【问题标题】:Beautiful Soup can't find tablesBeautiful Soup 找不到桌子
【发布时间】:2020-08-08 13:55:33
【问题描述】:

我正在尝试使用 Python 和 Beautiful Soup 从网页上的表格中收集一些数据。但是,当我从页面中进行选择时,我得到的结果与在浏览器中得到的结果不同。具体来说,这些表完全丢失了。这是 Firefox 开发工具检查器中表格的屏幕截图:

这是我从 Beautiful Soup 得到的输出:

我尝试使用 urllib 代替请求,并且尝试使用不同的 HTML 解析器(html.parser 和 lxml)。都给出相同的结果。关于这里可能发生的事情以及我如何绕过它来访问表中的数据的任何建议?

import requests
from bs4 import BeautifulSoup
import pandas
import tabula
import html5lib

knox = requests.get("https://covid.knoxcountytn.gov/case-count.html")
knox_soup = BeautifulSoup(knox.text, 'html5lib')
knox_confirmed = knox_soup.find('div', id='covid_cases').prettify()

print(knox_confirmed)

【问题讨论】:

  • edit您的问题并将您的代码包含为code而不是img,以便我们手动检查和验证
  • 可能是使用 javascript 填充表格,这会进一步调用 ajaz 来获取表格内容。当您使用 requests 检索它时,该 javascript 不会(不能)执行 - 您'可能必须使用可以执行javascript的selectium之类的浏览器模拟,因此您可能能够收集表格祝您好运!
  • 是的,不要将代码/文本的图像放入问题中 - 粘贴文本。

标签: python beautifulsoup


【解决方案1】:

当您访问https://covid.knoxcountytn.gov/case-count.html 时尝试禁用javascript,您将看不到任何表格。正如@barny 所说,该表是使用 javascript 生成的,因此您无法使用 BeautifulSoup 解析它(至少不容易,请参阅How to call JavaScript function using BeautifulSoup and Python)。

【讨论】:

  • 您链接的帖子正是我所需要的!使用 requests-html 呈现页面的 JavaScript 得到了我需要的所有信息。谢谢!
【解决方案2】:

网站是通过JavaScript 加载的,因此您不能使用requestes 为您呈现JS。您可以使用seleniumrequests_html 等。

就目前而言,我已经能够跟踪从何处获取数据。通过检查XHR 的流量。

所以我们可以像下面这样使用pandas.read_csv()

import pandas as pd

df = pd.read_csv("https://covid.knoxcountytn.gov/includes/covid_cases.csv")

print(df)

【讨论】:

  • 这是一个绝妙的解决方案。我什至从未考虑过我可以直接从网站的同一来源获取数据。感谢您的建议!
  • @LuosRestil 你欢迎朋友。如果通过勾选答案旁边的复选标记对您有帮助,请随时接受我的答案。问候:)
猜你喜欢
  • 2019-11-03
  • 2013-07-15
  • 2018-04-22
  • 2021-12-08
  • 2017-12-07
  • 1970-01-01
相关资源
最近更新 更多