【发布时间】:2017-12-05 15:37:55
【问题描述】:
我目前正在尝试使用 Python 3.6 中的请求和 BeautifulSoup 模块进行练习,并且遇到了一个问题,我似乎无法在其他问题和答案中找到任何信息。
似乎在页面的某个位置,Beuatiful Soup 停止识别标签和 Id。我正在尝试从这样的页面中提取播放数据:
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's 和 'tr's 上使用它,但它似乎不起作用。我已经尝试过标准的“html.parser”以及 lxml 和 html5lib,但似乎没有任何效果。
我在这里做错了什么,还是 HTML 或其格式中的某些内容阻止了 BeautifulSoup 正确找到后面的标签?我遇到了这家公司(hockey-reference.com、basketball-reference.com)运行的类似页面的问题,但能够在其他网站上正确使用这些工具。
如果它与 HTML 有关,是否有更好的工具/库来帮助提取这些信息?
感谢您的帮助, 高炉
【问题讨论】:
-
你想从那个表中解析什么?全桌?只有几列?几个细胞?
-
您的声明
table = soup.findAll('table', {'id' : 'pbp'})不不起作用,它只是找不到div元素与id = pbp -
如果是这样,页面上的 javascript 需要在抓取之前先加载。这篇文章似乎有这样做的方法 - stackoverflow.com/questions/8049520/….
-
@qwertyuiop9 谢谢!这正是我一直在寻找的。我没有意识到汤可能不包含我通过浏览器查看的所有 html。我会玩 Selenium 或 Dryscrape,看看我能弄清楚什么。再次感谢
-
这能回答你的问题吗? Web-scraping JavaScript page with Python
标签: python beautifulsoup