【问题标题】:Scrape HTML Table with Python and Dealing with Hidden Rows使用 Python 抓取 HTML 表并处理隐藏行
【发布时间】:2021-05-05 04:19:01
【问题描述】:

我希望从此页面中抓取 HTML 表格:** https://www.nba.com/stats/teams/opponent-shooting/

我通常通过pd.read_html() 调用来完成这项任务,但是我在处理这个特定的表时遇到了问题。我认为这是因为 HTML 中隐藏了额外的数据,而这些数据并未在实际页面加载中显示(我并不真正感兴趣的数据)。我在read_html 函数中尝试了一些不同的参数,但没有任何运气。这些可以在这里找到: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_html.html

任何建议将不胜感激!

根据要求了解更多详细信息。我确实遵循常识和更高级的路线来检索页面汤。其中:

driver = webdriver.Chrome(options=options)driver.get() 用于硒路线。

page = requests.get()soup = BeautifulSoup(page.content, 'html.parser') 用于非硒路线。

之后我使用table = soup.find('table') 检索表HTML 以传递给pd.read_html()。这两种方法都导致了一个我不习惯得到的非常混乱的桌子。

【问题讨论】:

  • 您已经尝试过哪些代码?您当前的代码是什么?有哪些错误?期望的输出是什么?实际输出是多少?
  • 我刚刚尝试了pd.read_html() 的变体。根据我的经验,除了指定标题行之外,它会立即将数据转换为 pandas 数据框,这是所需的输出。我没有添加任何额外的代码,因为通常只需要一行代码。
  • 就错误而言,我没有收到“错误”,该表显然没有被一对一地转换为 pandas df。
  • 所以你的整个代码是pandas.read_html("https://www.nba.com/stats/teams/opponent-shooting/")?你没有错误?
  • 我为你添加了额外的代码。但是听到没有什么特别的。我只是得到网页的汤。很抱歉您觉得我没有提供足够的信息。

标签: python html pandas


【解决方案1】:

如果没有看到您的实际代码或当前输出,就很难说明您哪里出了问题或者是什么导致了您的问题。这对我有用:

driver.get("https://www.nba.com/stats/teams/opponent-shooting/")
table = driver.find_element_by_tag_name("table")
head = table.find_element_by_tag_name("thead").find_elements_by_css_selector("tr[aria-hidden='false']")[-1].text
tab = table.get_attribute("outerHTML")
df = pd.read_html(tab)[0]
df.columns = head.split()
final = df[:30]

【讨论】:

  • 非常感谢!那么我的代码出错的地方就是我所缺少的。我不知道 selenium 有一种方法来解析 html 而无需真正经历美丽的汤。 .find_elements_by_css_selector("tr[aria-hidden='false']")[-1].text 正是我所需要的!
猜你喜欢
  • 2020-09-02
  • 2017-02-20
  • 2011-05-05
  • 2018-09-22
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
相关资源
最近更新 更多