Python提取网页含超链接表格并导出Excel的解决方案
问题原因
pd.read_html 仅解析DOM节点的文本内容,不会提取标签属性,因此无法保留单元格内的超链接信息。
实现思路
- 拿到表格HTML片段后,手动遍历DOM节点,同时提取每个单元格的显示文本、内部
<a>标签的href属性 - 基于提取的纯文本生成与原逻辑一致的DataFrame
- 写入Excel时,借助xlsxwriter的
write_url方法,给存在超链接的单元格单独绑定跳转地址,同时保留原显示文本
完整修改代码
from selenium import webdriver from selenium.webdriver.common.by import By import pandas as pd from bs4 import BeautifulSoup driver = webdriver.Chrome() driver.get("https://eservices.bcsc.bc.ca/eder/formsearch.aspx") # 手动在页面完成搜索操作后,回到终端按回车继续执行 input("Press ENTER to continue...") # 定位目标表格元素 table_element = driver.find_element(By.XPATH, "/html/body/form/table/tbody/tr/td[2]/div/div/div[2]") table_html = table_element.get_attribute('outerHTML') driver.quit() # 解析表格结构,同步提取文本和超链接 soup = BeautifulSoup(table_html, "html.parser") table = soup.find("table") rows = table.find_all("tr") table_content = [] # 记录超链接位置:键为(表格内行号, 列号),值为超链接地址 link_position = {} for row_idx, tr in enumerate(rows): cells = tr.find_all(["th", "td"]) current_row = [] for col_idx, cell in enumerate(cells): cell_text = cell.get_text(strip=True) current_row.append(cell_text) # 提取单元格内的超链接,处理相对路径 a_tag = cell.find("a") if a_tag and a_tag.get("href"): href = a_tag.get("href") if href.startswith("/"): href = "https://eservices.bcsc.bc.ca/eder" + href link_position[(row_idx, col_idx)] = href table_content.append(current_row) # 生成DataFrame,首行作为表头 df = pd.DataFrame(table_content[1:], columns=table_content[0]) # 写入Excel并注入超链接 with pd.ExcelWriter('testreport.xlsx', engine='xlsxwriter') as writer: df.to_excel(writer, sheet_name='Sheet1', index=False) worksheet = writer.sheets['Sheet1'] # 配置默认超链接样式:蓝色、下划线 link_style = writer.book.add_format({'color': 'blue', 'underline': 1}) # 逐个写入超链接,位置与单元格一一对应 for (row, col), url in link_position.items(): display_text = table_content[row][col] worksheet.write_url(row, col, url, link_style, display_text)
补充说明
- 代码默认对站点下的相对路径超链接做了域名补全,更换抓取站点时需要根据实际路径规则调整拼接逻辑
- 如果目标表格存在合并单元格,需要额外计算行列偏移量,避免超链接位置错位
- 可以通过修改
link_style的配置,匹配原表格的字体、字号等样式
内容的提问来源于stack exchange,提问作者Vladyslav Somchenko
相关产品推荐
相关产品推荐

