You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从HTML表格中提取单个指定值?Python爬虫爬取HMDB数据问题

代码修正与目标文本提取方案

原有代码问题

  • 变量名逻辑错误:循环内将存储所有行数据的列表datasets错误赋值为单行数据字典,同时尝试追加未定义的dataset变量,运行会直接报错
  • 逻辑冗余:无需抓取全表所有内容,可直接定位目标字段,运行效率更高

方案1:基于原有逻辑修改,适配全表提取场景

如果后续还需要用到该表格的其他数据,可使用该版本:

import requests
from bs4 import BeautifulSoup as bs
import pandas as pd

c = "HMDB0059897"
res = requests.get("https://hmdb.ca/metabolites/" + c)
html_page = res.content
soup = bs(html_page, "html.parser")
table = soup.find("table")

headings = [th.get_text().strip() for th in table.find("tr").find_all("th")]

datasets = []
for row in table.find_all("tr")[1:]:
    # 修正变量名错误,单行列数据存入dataset变量
    dataset = dict(zip(headings, (td.get_text().strip() for td in row.find_all("td"))))
    datasets.append(dataset)

# 提取Status字段对应的目标文本
target_text = next(item['Status'] for item in datasets if 'Status' in item)
print(target_text)

方案2:精简直接定位方案,仅提取目标文本

如果只需要获取「Detected but not Quantified」这段内容,无需处理全表数据,可使用该版本:

import requests
from bs4 import BeautifulSoup as bs

c = "HMDB0059897"
res = requests.get("https://hmdb.ca/metabolites/" + c)
soup = bs(res.content, "html.parser")
# 直接定位Status表头对应的单元格内容
target_text = soup.find("table").find("th", string="Status").next_sibling.get_text().strip()
print(target_text)

两种方案运行后均会输出你需要的Detected but not Quantified结果。

内容的提问来源于stack exchange,提问作者Charlie P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:06:04