【问题标题】:Problems scraping dynamic content with requests and BeautifulSoup使用请求和 BeautifulSoup 抓取动态内容的问题
【发布时间】:2021-12-11 20:05:50
【问题描述】:

我试图通过填写表单并提交请求和 BeautifulSoup 来抓取网站 https://www.languagesandnumbers.com/how-to-count-in-german/en/deu/ 上的表单响应。检查提交的网络流量后,我发现帖子参数是“numberz”和“lang”。这就是我尝试发布以下内容的原因:

import requests
from bs4 import BeautifulSoup

with requests.Session() as session:
    response = session.post('https://www.languagesandnumbers.com/how-to-count-in-german/en/deu/', data={
        "numberz": "23",
        "lang": "deu"
    })

    soup = BeautifulSoup(response.content, "lxml")
    print(soup.find(id='words').get_text())

不幸的是,响应是动态的且不可见,因此在提交表单后,我总是返回主页,而在实际携带该响应的特定 div 中没有任何文本。是否有另一种方法可以使用 requests 和 BeautifulSoup 而不使用 selenium 来抓取响应?

【问题讨论】:

    标签: python web-scraping beautifulsoup


    【解决方案1】:

    您不需要BeautifulSoup,但需要正确的url 才能仅获得写入数字的结果:

    https://www.languagesandnumbers.com/ajax/en/
    

    因为它以这种方式返回 ack:::dreiundzwanzig 你必须提取字符串:

    response.text.split(':')[-1]
    

    示例

    import requests
    
    with requests.Session() as session:
        response = session.post('https://www.languagesandnumbers.com/ajax/en/', data={
            "numberz": "23",
            "lang": "deu"
        })
    response.text.split(':')[-1]
    

    输出

    dreiundzwanzig
    

    【讨论】:

      猜你喜欢
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多