无论我怎么做,BeautifulSoup4都找不到表

2024-09-29 17:15:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个网页上同时刮2表。 BeautifulSoup找到第一个表没问题,但是不管我怎么尝试都找不到第二个表,这里是网页:Hockey Reference: Justin Abdelkader。你知道吗

这是季后赛头球下方的桌子。你知道吗

这是我的密码。你知道吗

        sauce = urllib.request.urlopen('https://www.hockey-reference.com/players/a/abdelju01/gamelog/2014', timeout=None).read()
        soup = bs.BeautifulSoup(sauce, 'html5lib')
        table = soup.find_all('table')
        print(len(table))

总是打印1。你知道吗

如果我打印(汤),并使用我的终端搜索功能,我可以找到2个单独的表标签。我没有看到任何javascript会妨碍BS4找到标记。我也尝试过按id和class查找表,甚至表的父div似乎也无法找到。有人知道我做错了什么吗?你知道吗


Tags: 网页密码requesttableurlliburlopenreferencejustin
3条回答

因为javascript加载了额外的信息

现在requests_html可以加载html页面和javascript内容。你知道吗

pip install requests-html

from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://www.hockey-reference.com/players/a/abdelju01/gamelog/2014')
r.html.render()
res = r.html.find('table')
print(len(res))
4

看起来该表是一个小部件-单击“共享更多”->;“嵌入此表”,您将得到一个带有以下链接的脚本:

https://widgets.sports-reference.com/wg.fcgi?css=1&site=hr&url=%2Fplayers%2Fa%2Fabdelju01%2Fgamelog%2F2014&div=div_gamelog_playoffs

我们如何解析它?你知道吗

import requests
import bs4
url = 'https://widgets.sports-reference.com/wg.fcgi?css=1&site=hr&url=%2Fplayers%2Fa%2Fabdelju01%2Fgamelog%2F2014&div=div_gamelog_playoffs'
widget = requests.get(url).text
fixed = '\n'.join(s.lstrip("document.write('").rstrip("');") for s in widget.splitlines())

soup = bs4.BeautifulSoup(fixed)
soup.find('td', {'data-stat': "date_game"}).text # => '2014-04-18'

瞧!你知道吗

第二个表似乎位于HTML注释标记<--... <table class=...中。我想这就是为什么美团找不到它。你知道吗

相关问题 更多 >

    热门问题