python mechanize 的网页抓取问题
python web scraping issues with mechanize
我正在尝试 从网站抓取 网页结果:https://promedmail.org/promed-posts/
我关注了beutifulsoup。 mechanical soup 和 mechanize 目前无法抓取搜索结果。
import re
from mechanize import Browser,urlopen
browser = Browser()
browser.set_handle_robots(False)
browser.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
browser.open("https://promedmail.org/promed-posts")
for form in browser.forms():
if form.attrs['id'] == 'full_search':
browser.form = form
break
browser['search'] = 'US'
response = browser.submit()
content = response.read()
内容在美国输入时不显示搜索结果。知道我在这里做错了什么吗?
正如您提到的 bs4,您可以模仿页面发出的 POST 请求。提取 json 项目,其中包含 html 页面将被更新(包含结果);将其解析为 BeautifulSoup 对象,然后将结果 table 重建为数据帧:
import requests
from bs4 import BeautifulSoup as bs
headers = {'user-agent': 'Mozilla/5.0'}
data = {
'action': 'get_promed_search_content',
'query[0][name]': 'kwby1',
'query[0][value]': 'summary',
'query[1][name]': 'search',
'query[1][value]': 'US',
'query[2][name]': 'date1',
# 'query[2][value]': '',
'query[3][name]': 'date2',
# 'query[3][value]': '',
'query[4][name]': 'feed_id',
'query[4][value]': '1'
}
r = requests.post('https://promedmail.org/wp-admin/admin-ajax.php', headers=headers, data=data).json()
soup = bs(r['results'], 'lxml')
df = pd.DataFrame([(i.find_next(text=True),
i.a.text,
f"https://promedmail.org/promed-post/?id={i.a['id'].replace('id','')}") for i in soup.select('li')]
, columns = ['Date', 'Title', 'Link'])
print(df)
我正在尝试 从网站抓取 网页结果:https://promedmail.org/promed-posts/
我关注了beutifulsoup。 mechanical soup 和 mechanize 目前无法抓取搜索结果。
import re
from mechanize import Browser,urlopen
browser = Browser()
browser.set_handle_robots(False)
browser.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
browser.open("https://promedmail.org/promed-posts")
for form in browser.forms():
if form.attrs['id'] == 'full_search':
browser.form = form
break
browser['search'] = 'US'
response = browser.submit()
content = response.read()
内容在美国输入时不显示搜索结果。知道我在这里做错了什么吗?
正如您提到的 bs4,您可以模仿页面发出的 POST 请求。提取 json 项目,其中包含 html 页面将被更新(包含结果);将其解析为 BeautifulSoup 对象,然后将结果 table 重建为数据帧:
import requests
from bs4 import BeautifulSoup as bs
headers = {'user-agent': 'Mozilla/5.0'}
data = {
'action': 'get_promed_search_content',
'query[0][name]': 'kwby1',
'query[0][value]': 'summary',
'query[1][name]': 'search',
'query[1][value]': 'US',
'query[2][name]': 'date1',
# 'query[2][value]': '',
'query[3][name]': 'date2',
# 'query[3][value]': '',
'query[4][name]': 'feed_id',
'query[4][value]': '1'
}
r = requests.post('https://promedmail.org/wp-admin/admin-ajax.php', headers=headers, data=data).json()
soup = bs(r['results'], 'lxml')
df = pd.DataFrame([(i.find_next(text=True),
i.a.text,
f"https://promedmail.org/promed-post/?id={i.a['id'].replace('id','')}") for i in soup.select('li')]
, columns = ['Date', 'Title', 'Link'])
print(df)