我目前正在尝试使用 Python 3.6 中的请求和 BeautifulSoup 模块进行练习,并且遇到了一个问题,我似乎无法在其他问题和答案中找到任何信息。
似乎在页面中的某个时刻,Beautifulsoup 停止识别标签和 ID。我正在尝试从这样的页面中提取逐个播放数据:
http://www.pro-football-reference.com/boxscores/201609080den.htm http://www.pro-football-reference.com/boxscores/201609080den.htm
import requests, bs4
source_url = 'http://www.pro-football-reference.com/boxscores/201609080den.htm'
res = requests.get(source_url)
if '404' in res.url:
raise Exception('No data found for this link: '+source_url)
soup = bs4.BeautifulSoup(res.text,'html.parser')
#this works
all_pbp = soup.findAll('div', {'id' : 'all_pbp'})
print(len(all_pbp))
#this doesn't
table = soup.findAll('table', {'id' : 'pbp'})
print(len(table))
使用 Chrome 中的检查器,我可以看到该表确实存在。我还尝试在 HTML 后半部分的“div”和“tr”上使用它,但似乎不起作用。我已经尝试过标准的“html.parser”以及lxml和html5lib,但似乎没有任何效果。
我在这里做错了什么,或者 HTML 或其格式中是否有某些内容阻止 BeautifulSoup 正确找到后面的标签?我在该公司(hockey-reference.com、basketball-reference.com)运行的类似页面上遇到了问题,但能够在其他网站上正确使用这些工具。
如果是 HTML 的内容,是否有更好的工具/库可以帮助提取此信息?
感谢您的帮助,
BF
在对 URL 执行 GET 请求后,BS4 将无法执行网页的 javascript。我认为关注的表是从客户端 JavaScript 异步加载的。
因此,在抓取 HTML 之前,需要先运行客户端 JavaScript。这post https://stackoverflow.com/questions/8049520/web-scraping-javascript-page-with-python描述了如何做到这一点!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)