如何从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
相关产品推荐
相关产品推荐

