在Python 3中使用lxml查询网站?
Using lxml to query a website in Python 3?
我目前正在尝试使用 Python 中的 lxml
查询以下网站 (HPBD) 3. 我需要从每个搜索结果中抓取一些信息。现在,我已经获得了我想要搜索的标题列表(大约 100 个)。我在这里附上前五个作为例子:
for book in BOOK_TITLES:
print('-', book, '\n')
- Apologie des ministres du culte, qui ont prêté la déclaration exigée par la loi du 7 vendém. an 4. contre les critiques de mm. Dédoyar & Vanhoren, les Motifs de Malines & autres brochures
- Observations sur la déclaration exigée des ministres des cultes, en vertu de la loi du 7 vendémiaire, an 4
- l'Eloquence chrétienne dans l'idée et dans la pratique
- Verscheyde leeringen en exempelen der oude vaders
- Godtvruchtige leeringen en gebeden voor de eerste communie
然而,我对网络抓取还很陌生,开始尝试使用 BeatifulSoup 看看这个想法是否正确,但无法从中得到任何东西(见下面的代码)。
import requests
import urllib.request
import time
import urllib
from bs4 import BeautifulSoup
from lxml import etree
from bs4 import BeautifulSoup as BS
for book in BOOK_TITLES:
text = requests.get('https://kxp.k10plus.de/DB=1.77/SET=5/TTL=1/CMD?MATCFILTER=N&MATCSET=N&ACT0=&ACT=SRCHA&IKT=1016&SRT=YOP&ADI_IKT9200=&TRM=' + urllib.parse.quote(book)).text
soup = BS(text)
print(soup)
问题是 URL 的 'mutable' 部分,例如上面列表中的标题 3 是:
l%27Eloquence+chrétienne+dans+l%27idée+et+dans+la+pratique
同时 urllib.parse.quote(book)
returns:
l%27Eloquence%20chr%C3%A9tienne%20dans%20l%27id%C3%A9e%20et%20dans%20la%20pratique
我正在使用 Google Chrome 和 Python 3. 对上述代码的任何修复以及对使用 lxml
的替代方案的建议表示赞赏。
你可以这样做:
from urllib.parse import urlencode, quote_plus
payload = {"TRM":"l'Eloquence chrétienne dans l'idée et dans la pratique"}
result = urlencode(payload, quote_via=quote_plus)
# 'TRM=l%27Eloquence+chrétienne+dans+l%27idée+et+dans+la+pratique'
我目前正在尝试使用 Python 中的 lxml
查询以下网站 (HPBD) 3. 我需要从每个搜索结果中抓取一些信息。现在,我已经获得了我想要搜索的标题列表(大约 100 个)。我在这里附上前五个作为例子:
for book in BOOK_TITLES:
print('-', book, '\n')
- Apologie des ministres du culte, qui ont prêté la déclaration exigée par la loi du 7 vendém. an 4. contre les critiques de mm. Dédoyar & Vanhoren, les Motifs de Malines & autres brochures
- Observations sur la déclaration exigée des ministres des cultes, en vertu de la loi du 7 vendémiaire, an 4
- l'Eloquence chrétienne dans l'idée et dans la pratique
- Verscheyde leeringen en exempelen der oude vaders
- Godtvruchtige leeringen en gebeden voor de eerste communie
然而,我对网络抓取还很陌生,开始尝试使用 BeatifulSoup 看看这个想法是否正确,但无法从中得到任何东西(见下面的代码)。
import requests
import urllib.request
import time
import urllib
from bs4 import BeautifulSoup
from lxml import etree
from bs4 import BeautifulSoup as BS
for book in BOOK_TITLES:
text = requests.get('https://kxp.k10plus.de/DB=1.77/SET=5/TTL=1/CMD?MATCFILTER=N&MATCSET=N&ACT0=&ACT=SRCHA&IKT=1016&SRT=YOP&ADI_IKT9200=&TRM=' + urllib.parse.quote(book)).text
soup = BS(text)
print(soup)
问题是 URL 的 'mutable' 部分,例如上面列表中的标题 3 是:
l%27Eloquence+chrétienne+dans+l%27idée+et+dans+la+pratique
同时 urllib.parse.quote(book)
returns:
l%27Eloquence%20chr%C3%A9tienne%20dans%20l%27id%C3%A9e%20et%20dans%20la%20pratique
我正在使用 Google Chrome 和 Python 3. 对上述代码的任何修复以及对使用 lxml
的替代方案的建议表示赞赏。
你可以这样做:
from urllib.parse import urlencode, quote_plus
payload = {"TRM":"l'Eloquence chrétienne dans l'idée et dans la pratique"}
result = urlencode(payload, quote_via=quote_plus)
# 'TRM=l%27Eloquence+chrétienne+dans+l%27idée+et+dans+la+pratique'