【问题标题】:BeautifulSoup Parsed document different than original html page's codeBeautifulSoup Parse 文档与原始 html 页面代码不同
【发布时间】:2023-03-12 16:50:02
【问题描述】:

我正在使用 BeautifulSoup4 从 Spotify 图表中进行一些抓取。

我已经启动并运行了几个星期的代码。但是今天突然开始失败了。它开始为所有条目提供 NaN 值...

我相信问题出在 html 解析页面上。生成的 html 代码与原始网页 html 不同。

我尝试过使用“html.parses”、“lxml”和“html5lib”。我还更新了 BeautifulSoup 和所有解析器的包。但是什么都没有

可能是什么问题? 我不知道问题的根源是什么。昨天我的 Windows 10 更新了,可能与此有关吗?

下面是重要的代码部分:

from bs4 import BeautifulSoup as bs
import requests

u = 'https://spotifycharts.com/regional/us/daily/2021-04-18'

x = requests.get(u)  
a = bs(x.content,'html.parser')
tracks = a.find_all('td',class_='chart-table-position')

tracks 总是 none,因为它不存在于 'a' 中。但它应该...因为它存在于网页html中并且它在几天前就存在...

提前感谢您的帮助。

【问题讨论】:

    标签: python html parsing beautifulsoup spotify


    【解决方案1】:

    在标题中添加用户代理最终解决了这个问题。试试看:

    from bs4 import BeautifulSoup as bs
    import requests
    
    
    u = 'https://spotifycharts.com/regional/us/daily/2021-04-18'
    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36'}
    x = requests.get(u, headers=headers)  
    a = bs(x.content,'html.parser')
    tracks = a.find_all('td',class_='chart-table-position')
    

    输出:

    print(len(tracks))
    200
    

    【讨论】:

    • 确实解决了问题。非常感谢!虽然我很好奇这个解决方案的“为什么”
    • 没有它,它会让你看起来像个机器人。如果您打印出没有标题的响应,则表明它正在向您抛出验证码。因此,通过将您的用户代理标头放在那里,它看起来就像一个普通的旧浏览器访问它。
    • 有趣...不知道。非常感谢您的帮助和解释!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多