首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用机器处理python抓取问题

用机器处理python抓取问题
EN

Stack Overflow用户
提问于 2021-03-31 07:50:21
回答 1查看 94关注 0票数 0

我正在尝试网站上刮取的网页结果:https://promedmail.org/promed-posts/

我喝了一杯香甜的汤。机械汤和机械到目前为止还不能的搜索结果。

代码语言:javascript
复制
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()

在US中键入时,内容不显示搜索结果。知道我做错什么了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-31 10:33:03

当您提到bs4时,您可以模仿页面发出的POST请求。提取包含页面将用(包含结果)更新的html的json项;将其解析为BeautifulSoup对象,然后将结果表重构为dataframe:

代码语言:javascript
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66883744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档