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

Pandas Read HTML无法抓取可点击链接问题求助

解决PRONI网站表格抓取时丢失链接的问题

问题分析

pd.read_html() 只会提取表格的文本内容,无法识别通过JS事件(如onclick)实现的跳转链接,所以直接抓取表格HTML生成DataFrame会丢失PRONI REFERENCE列的链接信息。

解决方案

需要手动遍历表格的每一行,提取单元格文本的同时,解析onclick属性中的真实链接,再将链接合并到DataFrame中,最后导出为带可点击链接的Excel文件。

代码实现

import pandas as pd
from selenium import webdriver
import re
from openpyxl import Workbook
from openpyxl.utils import get_column_letter
from openpyxl.styles import Font

# 初始化浏览器驱动
driver = webdriver.Chrome()  # 替换为你使用的浏览器驱动
driver.get("https://apps.proni.gov.uk/Val12B/SearchResults.aspx")

# 获取表格表头
headers = [th.text.strip() for th in driver.find_elements_by_xpath(".//table[@id='gvSearchResults']//thead//th")]
# 新增链接列的表头
headers.append("PRONI REFERENCE 链接")

# 获取表格所有数据行
rows = driver.find_elements_by_xpath(".//table[@id='gvSearchResults']//tbody//tr")
data = []

for row in rows:
    cells = row.find_elements_by_xpath(".//td")
    # 提取每行的文本内容
    row_text = [cell.text.strip() for cell in cells]
    # 定位PRONI REFERENCE列(假设是第1列,根据实际页面调整索引)
    proni_cell = cells[1]
    # 获取onclick属性内容
    onclick_content = proni_cell.get_attribute("onclick")
    # 正则提取链接(匹配openWindow('xxx')格式的内容)
    link_match = re.search(r"openWindow\('(.*?)'\)", onclick_content)
    if link_match:
        proni_link = link_match.group(1)
        row_text.append(proni_link)
    else:
        row_text.append("")
    data.append(row_text)

# 构建DataFrame
df = pd.DataFrame(data, columns=headers)

# 导出为带可点击链接的Excel文件
wb = Workbook()
ws = wb.active

# 写入表头
for col_idx, header in enumerate(headers, 1):
    col_letter = get_column_letter(col_idx)
    ws[f"{col_letter}1"] = header
    ws[f"{col_letter}1"].font = Font(bold=True)

# 写入数据并设置超链接
for row_idx, row_data in enumerate(data, 2):
    for col_idx, cell_value in enumerate(row_data, 1):
        col_letter = get_column_letter(col_idx)
        cell = ws[f"{col_letter}{row_idx}"]
        # 判断是否为链接列(最后一列)
        if col_idx == len(headers):
            # 显示原PRONI REFERENCE文本,设置超链接
            cell.value = row_data[1]
            cell.hyperlink = cell_value
            cell.font = Font(color="0000FF", underline="single")
        else:
            cell.value = cell_value

# 保存文件
wb.save("PRONI搜索结果_带链接.xlsx")

# 关闭浏览器
driver.quit()

关键说明

  1. 链接提取:通过正则表达式解析onclick属性中的openWindow函数参数,获取真实跳转链接,适配页面无href属性的情况。
  2. Excel超链接设置:使用openpyxl库手动设置单元格超链接,确保导出的Excel中链接可直接点击,而非纯文本。
  3. 列索引调整:代码中假设PRONI REFERENCE是第1列(索引从0开始为索引1),实际使用时需根据页面表格结构调整对应单元格索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:25:34