【问题标题】:Trouble identifying difference in BeautifulSoup commented tables无法识别 BeautifulSoup 注释表中的差异
【发布时间】:2021-01-30 00:58:13
【问题描述】:

我知道有关此站点的已注释 HTML 表格的其他一些问题,但我不相信他们回答了这个特定问题。

我正在尝试为其中的所有表格刮取this page。除了“射击”之外,我可以得到所有。

我知道除了“Per Game”之外的所有内容都在页面源代码中被注释掉了。为了处理注释掉的表,我使用的代码如下:

soup = BeautifulSoup(res.text, "lxml")
comment_table = soup.find(text=lambda x: isinstance(x, NavigableString) and stat in x)
soup = BeautifulSoup(comment_table, "lxml")
table = soup.find("table", id=stat)

stat 可以是任意数量的“统计信息”。有效的是“per_minute”、“pbp”、“adj_shooting”等。

它首先找到被注释掉的表,然后从那里开始正常解析表。对于所有注释表,table 是一个表标签。然而,当stat 是“射击”时,table 是空的。

在查找包含“射击”的实例时,comment_table 行将返回文本 'Player shooting history' 而不是预期的表格。我已经验证了注释掉的文本中有“射击”(在页面源中)。

谁能帮我弄清楚这张桌子有什么不同?

【问题讨论】:

  • 你检查过不是js创建的内容吗?几个月前我抓取了这个页面并遇到了一些类似的问题。
  • 我无法想象这会是一张桌子,但我该如何检查呢?它在页面源代码中。

标签: python html python-3.x web-scraping beautifulsoup


【解决方案1】:

它与存在该字符串的较早实例匹配。当您在 id 中查找它时,我认为您可以更改以下行:

comment_table = soup.find(text=lambda x: isinstance(x, NavigableString) and stat in x)

comment_table = soup.find(text=lambda x: isinstance(x, NavigableString) and f'id="{stat}' in x)

from bs4 import BeautifulSoup as bs
from bs4 import NavigableString
import requests

res = requests.get('https://www.basketball-reference.com/players/j/jamesle01.html')
soup = bs(res.text, "lxml")
stat = 'shooting'
comment_table = soup.find(text=lambda x: isinstance(x, NavigableString) and f'id="{stat}' in x)
soup = bs(comment_table, "lxml")
table = soup.find("table", id=stat)
print(table)

例如,您可以使用正则表达式对主题进行变体。这样做是为了确保您在 id 属性中查找该值。

【讨论】:

  • 谢谢,我真的试过了,...and "id=shooting"... 但什么也没找到。
  • 在我的示例中似乎对我有用。未为您的其他人测试。
  • 哦,我让你的代码工作了。 f字符串中的单个双引号是什么?我对此并不熟悉。
  • 那是因为属性应该是 id="" 而我只是在第二个“ 之前提前关闭
  • 不用担心。希望这继续为您的其他人工作。
猜你喜欢
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
相关资源
最近更新 更多