【问题标题】:How can I pull webpage data into my DataFrame by referencing a specific HTML class or id using pandas read_html?如何通过使用 pandas read_html 引用特定的 HTML 类或 id 将网页数据拉入我的 DataFrame?
【发布时间】:2025-12-29 04:40:06
【问题描述】:

我正在尝试从this site 的表中提取数据并将其保存在包含“ticker”列的CSV 中。现在我的代码是这样的:

import requests
import pandas as pd

url = 'https://www.biopharmcatalyst.com/biotech-stocks/company-pipeline-database#marketCap=mid|stages=approved,crl'
html = requests.get(url).content
df_list = pd.read_html(html)
df = df_list[0]
print (df)
df.to_csv('my data.csv')

它会生成一个看起来像 this 的文件。

我想在我的 CSV 文件中添加“股票代码”列,并为每家公司列出相应的股票代码。代码在 HTML here (class="ticker--small") 中。输出应该类似于this.

我完全坚持这一点。我也尝试在 BeautifulSoup 中这样做,但我无法让它工作。任何帮助将不胜感激。

【问题讨论】:

  • 您需要将每个代码与您拥有的表格相关联。 Pandas read html 不能用于所有情况。正如你所说,你需要 Beautiful Soup 类库来解析 html,然后使用它构建一个表
  • 你建议我怎么做?下面的帖子在 BeautifulSoup 中没有解决它。
  • 根据网站的使用条款:“根据使用条款,不允许抓取数据。”而且,不幸的是,该网站似乎故意使简单的网络抓取变得困难。您也许可以使用 beautifulsoup 一次提取一个带有 <div class="filter-table__row js-tr"> 的所有元素
  • 我看到了那个类,但不知道如何使用它,你会如何在下面的评论中将它合并到 ewwink 的代码中?

标签: python html pandas beautifulsoup datareader


【解决方案1】:

它有多个表,使用 BeautifulSoup 提取并循环写入 csv。

from bs4 import BeautifulSoup

import requests, lxml
import pandas as pd

url = 'https://www.biopharmcatalyst.com/biotech-stocks/company-pipeline-database#marketCap=mid|stages=approved,crl'
html = requests.get(url).text
soup = BeautifulSoup(html, 'lxml')
tables = soup.findAll('table')

for table in tables:
    df = pd.read_html(str(table))[0]
    with open('my_data.csv', 'a+') as f:
      df.to_csv(f)

【讨论】:

  • 感谢您的建议。不幸的是,这会产生与我已经得到的结果相同的结果,CSV 文件中没有用于股票代码或公司名称的列。
  • 我该怎么做?
最近更新 更多