【问题标题】:BeautifulSoup4 fails to parse multiple tablesBeautifulSoup4 无法解析多个表
【发布时间】:2016-07-28 13:28:01
【问题描述】:

我想系统地抓取直接嵌入在页面 HTML 中的here 发现的隐私泄露数据。我在 StackOverflow 上找到了关于 missing HTMLnot being able to scrape a table using BS4 的各种链接。这两个线程似乎与我遇到的问题非常相似,但是我很难调和这些差异。

这是我的问题:当我使用 Requests 或 urllib (python 3.6) 拉取 HTML 时,第二个表不会出现在汤中。上面的第二个链接详细说明了如果在使用 javascript 加载页面后添加表/数据,可能会发生这种情况。但是,当我检查页面源时,数据都在那里,所以这似乎不是问题。下面是我的代码的 sn-p。

url = 'https://www.privacyrights.org/data-breach/new?title=&page=1'
r = requests.get(url, verify=False)
soupy = BeautifulSoup(r.content, 'html5lib')
print(len(soupy.find_all('table')))
# only finds 1 table, there should be 2

此代码 sn-p 无法找到包含实际数据的表。我试过 lmxl、html5lib 和 html.parse 解析器。我试过 urllib 和 Requests 包来下拉页面。

为什么 requests + BS4 找不到我要找的表?

【问题讨论】:

  • 我只看到一张桌子。您期望的第二张桌子在哪里?您确定该页面不包含更改浏览器中的 DOM 以添加表格的 JavaScript 代码吗?
  • 有可能,但我对 javascript 不是很熟悉。当我查看页面源时,数据在 class="data-breach-table" 的表中。
  • 该表不是请求所服务的源的一部分。这不是 BeautifulSoup 问题,您需要使用 selenium 驱动浏览器并执行加载该表的 JavaScript 代码,或者对页面代码进行逆向工程并弄清楚该表是如何构造的。
  • 太好了,我会调查的。谢谢!

标签: python html web-scraping beautifulsoup python-requests


【解决方案1】:

查看从 URL 传递的 HTML,其中似乎只有一个表,这正是 Beautiful Soup 找不到两个的原因!

【讨论】:

    猜你喜欢
    • 2018-08-28
    • 2021-08-03
    • 2021-03-24
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 2018-12-18
    • 1970-01-01
    相关资源
    最近更新 更多