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()
关键说明
- 链接提取:通过正则表达式解析
onclick属性中的openWindow函数参数,获取真实跳转链接,适配页面无href属性的情况。 - Excel超链接设置:使用
openpyxl库手动设置单元格超链接,确保导出的Excel中链接可直接点击,而非纯文本。 - 列索引调整:代码中假设PRONI REFERENCE是第1列(索引从0开始为索引1),实际使用时需根据页面表格结构调整对应单元格索引。
内容的提问来源于stack exchange,提问作者Gerard
相关产品推荐
相关产品推荐

