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

如何无需指定子链接提取同一页面特定标题下多链接内的表格?

嘿,我来帮你搞定这个自动抓取表格的需求!要不用手动指定子链接,把“Account and Payment”板块下所有子页面的表格都捞出来,咱们可以分两步走:先从主页面爬取该板块下的所有子链接,再逐个链接提取表格。用Python的几个常用库就能轻松实现,具体方法如下:

实现步骤

1. 从主页面提取目标板块的所有子链接

首先得请求主页面,解析HTML结构,精准定位到“Account and Payment”标题下面的所有子页面链接。这里用BeautifulSoup来做页面解析,比硬写正则靠谱多了。

import requests
from bs4 import BeautifulSoup
import pandas as pd
import time

# 主页面的URL
main_url = "https://support.office.com/en-us/article/what-s-the-difference-between-office-365-and-office-2016-ed447ebf-6060-46f9-9e90-a239bd27eb96?ui=en-US&rs=en-US&ad=US"

# 模拟浏览器请求,避免被拦截
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}

# 请求主页面
response = requests.get(main_url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')

# 定位"Account and Payment"对应的板块
target_section = None
# 先遍历页面的标题标签,找到目标标题
for heading in soup.find_all(['h2', 'h3']):
    heading_text = heading.get_text(strip=True)
    if 'Account and Payment' in heading_text:
        # 找到标题后,获取它后面的链接列表容器(通常是ul或者div)
        target_section = heading.find_next_sibling(['ul', 'div', 'section'])
        break

# 提取所有子页面的完整链接
sub_links = []
if target_section:
    for a_tag in target_section.find_all('a', href=True):
        # 处理相对链接,拼接成完整URL
        full_link = requests.compat.urljoin(main_url, a_tag['href'])
        sub_links.append(full_link)

2. 遍历子链接,批量提取表格

拿到所有子链接后,就可以用pd.read_html逐个抓取每个页面的表格了。还可以给每个表格加上来源链接,方便后续区分是哪个页面的内容。

# 存储所有提取到的表格
all_tables = []

for link in sub_links:
    try:
        # 提取当前页面的所有表格
        dfs = pd.read_html(link, header=0, headers=headers)
        for df in dfs:
            # 给表格添加来源链接字段
            df['source_page'] = link
            all_tables.append(df)
        print(f"✅ 成功提取 {link} 的表格")
    except Exception as e:
        print(f"❌ 处理 {link} 时出错: {str(e)}")
    # 加个延时,避免请求太频繁被封
    time.sleep(1)

# 如果所有表格结构相似,也可以合并成一个大DataFrame
# combined_df = pd.concat(all_tables, ignore_index=True)
# combined_df.to_csv('office_tables.csv', index=False)  # 保存到本地CSV
几个注意事项
  • 页面结构变化:Office的支持页面偶尔会更新HTML结构,要是代码跑不通了,记得打开浏览器开发者工具(F12),重新确认目标标题和子链接的标签结构(比如标题是h2还是h3,链接容器是ul还是div)。
  • 反爬限制:要是遇到请求被拦截的情况,可以把headers里的User-Agent换成你自己浏览器的标识,或者延长延时时间。
  • 表格差异:不同子页面的表格结构可能不一样,要是合并的时候报错,建议分开存储每个表格,或者提前做结构适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:17:01