【问题标题】:BeautifulSoup (bs4) does not find all tagsBeautifulSoup (bs4) 找不到所有标签
【发布时间】:2016-12-12 01:09:55
【问题描述】:

我正在使用 Python 3.5 和 bs4

以下代码不会从指定网站检索所有表。该页面有 14 个表,但代码的返回值为 2。我不知道发生了什么。我手动检查了 HTML,但找不到它不起作用的原因。每张桌子似乎都没有什么特别之处。

import bs4
import requests

link = "http://www.pro-football-reference.com/players/B/BradTo00.htm"

htmlPage = requests.get(link)
soup = bs4.BeautifulSoup(htmlPage.content, 'html.parser')
all_tables = soup.findAll('table')
print(len(all_tables))

发生了什么事?

编辑:我应该澄清一下。如果我检查汤变量,它包含我希望看到的所有表。我怎么不能用 findAll 方法从汤中提取这些表?

【问题讨论】:

  • 检查表格是否通过Ajax加载。
  • 此页面使用 JavaScript 来显示数据,但可能所有数据都是 HTML 格式,但带有注释。您可以尝试使用 BS 来查找 comment 标签,或者尝试使用字符串函数(或正则表达式)来查找 <!-- ... --> - 也许然后您可以将此字符串与 BS 一起使用。

标签: python web-scraping beautifulsoup html-parsing


【解决方案1】:

这个页面是用javascript渲染的,如果你禁用浏览器中的javascrip,你会注意到这个页面只有两个表。 我建议在这种情况下使用硒。

【讨论】:

  • 我假设在所有的 javascript 和 ajax 请求都加载后我已经取回了 html。当我检查了“汤”变量时,所有的表都在那里。这不是证明我在发出 ajax 请求后正在检索数据吗?
  • 请求不能做到这一点,但是如果你使用 selenium 或类似的东西,你会得到一个包含所有表的汤,这证明你在 javascrip 呈现页面后获得了数据
  • 我仍然很困惑,因为我看到汤里的所有桌子。但无论如何,使用硒是有效的。谢谢!
猜你喜欢
  • 2021-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多