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

如何用Python Pandas解析HTML表格获取隐藏值与链接?

使用Pandas解析带隐藏信息与超链接的HTML表格

确实,直接用pd.read_html没法满足你的需求——它只能提取表格里的可见文本,像悬停显示的title属性、隐藏input的值、超链接的URL这些附加信息,它都抓不到。不过我们可以结合BeautifulSoup来补全这些信息,不用逐行繁琐拆分,下面是具体的实现步骤:

步骤1:导入所需库

我们需要用pandas来最终整理成表格,用BeautifulSoup来解析HTML里的附加信息:

import pandas as pd
from bs4 import BeautifulSoup

步骤2:读取并解析HTML文件

先把HTML文件读进来,用BeautifulSoup解析定位到目标表格:

with open("/root/Downloads/adad.html", "r") as content_file:
    html_content = content_file.read()

# 解析HTML
soup = BeautifulSoup(html_content, "html.parser")
# 定位到class为'gene'的目标表格
target_table = soup.find("table", class_="gene")

步骤3:处理表头

把每个表头的文本(包括a标签的文本)和下方的info拼接成你想要的格式(比如header1info):

headers = []
for th in target_table.find_all("th"):
    # 提取th里的所有文本(包括a标签的文本),去掉多余换行和空格
    main_text = th.get_text(strip=True).replace("\n", "")
    headers.append(main_text.replace(" ", ""))  # 去掉空格拼接成目标格式

步骤4:处理每一行数据

逐行提取单元格里的所有信息,包括隐藏input值、title属性、超链接URL:

rows_data = []
for tr in target_table.find_all("tr")[1:]:  # 跳过表头行
    row = []
    tds = tr.find_all("td")
    
    # 处理第一列:提取隐藏input的value(比按钮文本更准确)
    input_tag = tds[0].find("input", type="hidden")
    row.append(input_tag["value"] if input_tag else tds[0].get_text(strip=True))
    
    # 处理第2-5列:直接提取可见文本
    for td in tds[1:5]:
        row.append(td.get_text(strip=True))
    
    # 处理第6列:拼接span的文本和title属性
    span_tag = tds[5].find("span", class_="dm")
    if span_tag and span_tag.has_attr("title"):
        row.append(f"{span_tag.get_text(strip=True)}({span_tag['title']})")
    else:
        row.append(tds[5].get_text(strip=True))
    
    # 处理第7列:直接提取可见文本
    row.append(tds[6].get_text(strip=True))
    
    # 处理第8列:拼接所有超链接的文本和URL
    link_texts = []
    for a in tds[7].find_all("a"):
        link_texts.append(f"{a.get_text(strip=True)}({a['href']})")
    row.append(" ".join(link_texts))
    
    # 处理第9列:拼接带title的span文本和超链接信息
    col9_content = []
    # 处理带title的span标签
    for span in tds[8].find_all("span", class_="gen"):
        if span.has_attr("title"):
            col9_content.append(f"{span.get_text(strip=True)}({span['title']})")
        else:
            col9_content.append(span.get_text(strip=True))
    # 处理超链接标签
    a_tag = tds[8].find("a")
    if a_tag:
        col9_content.append(f"{a_tag.get_text(strip=True)}({a_tag['href']})")
    row.append(" ".join(col9_content))
    
    rows_data.append(row)

步骤5:转换成Pandas DataFrame

把处理好的表头和数据组合成DataFrame,就是你想要的格式:

df = pd.DataFrame(rows_data, columns=headers)
print(df)

运行这段代码后,你会得到和预期格式一致的结果:表头是拼接后的header1info等,每行数据包含了隐藏的title信息、超链接URL以及隐藏input的值,完全不需要逐行繁琐拆分HTML标签。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 23:29:06