【问题标题】:python web scraping issues with mechanizepython web抓取问题与机械化
【发布时间】:2021-06-27 05:25:02
【问题描述】:

我正在尝试从以下网站抓取网络结果:https://promedmail.org/promed-posts/

我关注了 beutifulsoup。到目前为止,机械汤和机械化无法抓取搜索结果。

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()

在美国输入时内容不显示搜索结果。知道我在这里做错了什么吗?

【问题讨论】:

    标签: python beautifulsoup mechanize mechanicalsoup


    【解决方案1】:

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

    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)
    

    【讨论】:

    猜你喜欢
    • 2010-10-28
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    • 2011-07-13
    • 1970-01-01
    相关资源
    最近更新 更多