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

基于Selenium的多同结构链接批量抓取及Excel多表导出优化咨询

Selenium批量抓取同结构多页面解决方案

完全可以实现,核心是通过函数封装重复逻辑+配置化管理抓取任务,无需反复复制代码,100个链接仅需添加对应配置行即可。

实现逻辑

  • 把单页面的抓取、解析逻辑封装为可复用函数,仅需传入目标URL和对应工作表名作为参数
  • 用字典统一管理所有抓取任务,键为预设的工作表名称,值为对应抓取链接,新增任务仅需修改该配置
  • 全局仅初始化一次浏览器驱动、一次Excel写入对象,减少重复初始化的资源开销,运行效率更高
  • 每次抓取完成后切回默认页面上下文,避免多页面切换时frame定位报错

优化后完整代码

from bs4 import BeautifulSoup
import os
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
import pandas as pd
from openpyxl import load_workbook

# --------------- 仅需修改以下配置即可新增/修改抓取任务 ---------------
SCRAPE_TASKS = {
    "FEUR": "https://www.morningstar.dk/dk/funds/snapshot/snapshot.aspx?id=F00000ZG2F&tab=3",
    # 新增任务直接按以下格式加一行即可,例:
    # "工作表名2": "对应URL2",
    # "工作表名3": "对应URL3",
}
EXCEL_PATH = r'/Users/karlemilthulstrup/Downloads/data.xlsx'
# -------------------------------------------------------------------

# 初始化浏览器驱动(全局仅初始化一次)
opts = Options()
opts.add_argument("--headless")
chrome_driver = os.getcwd() + "/chromedriver"
driver = webdriver.Chrome(options=opts, executable_path=chrome_driver)
driver.implicitly_wait(10)

# 初始化Excel写入对象(全局仅初始化一次)
book = load_workbook(EXCEL_PATH)
writer = pd.ExcelWriter(EXCEL_PATH, engine='openpyxl')
writer.book = book

def scrape_single_page(url: str, sheet_name: str):
    """单页面抓取函数"""
    try:
        driver.get(url)
        driver.switch_to.frame(1)
        driver.find_element_by_xpath("//button[contains(@class,'show-table')]//span").click()
        # 提取表头
        table_headers = driver.find_elements_by_xpath("//div[contains(@class,'sal-mip-factor-profile__value-table')]/table//tr/th")
        header = [tab.text for tab in table_headers]
        # 提取表体
        table_body = driver.find_elements_by_xpath("//div[contains(@class,'sal-mip-factor-profile__value-table')]/table//tbody/tr")
        data = [header]
        for tab in table_body:
            row = [con.text for con in tab.find_elements_by_tag_name("td")]
            data.append(row)
        df = pd.DataFrame(data)
        # 写入对应工作表
        df.to_excel(writer, sheet_name=sheet_name)
        print(f"[{sheet_name}] 抓取完成")
    except Exception as e:
        print(f"[{sheet_name}] 抓取失败,错误信息:{str(e)}")
    finally:
        # 切回默认上下文,避免下一次frame定位出错
        driver.switch_to.default_content()

# 批量执行所有抓取任务
for sheet_name, url in SCRAPE_TASKS.items():
    scrape_single_page(url, sheet_name)

# 全部执行完成后统一保存Excel、关闭资源
writer.save()
writer.close()
driver.quit()

使用说明

  • 提前在EXCEL_PATH指定路径创建空白的data.xlsx文件即可运行
  • 新增抓取链接仅需在SCRAPE_TASKS字典中添加一行配置,无需修改其他代码
  • 内置异常捕获逻辑,单个链接抓取失败不会中断整体任务,错误信息会在控制台打印

内容的提问来源于stack exchange,提问作者Karl Emil Thulstrup

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:42:00