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

如何将Selenium多链接爬虫的抓取结果统一保存到单个CSV文件

多链接Kayak航班数据合并存储CSV解决方案

核心修改逻辑

  • 在遍历链接的循环外定义总列表,存储所有抓取到的航班数据,避免单次循环结束后数据被覆盖
  • 调整浏览器驱动的生命周期:将驱动初始化放在循环内,每次爬完一个链接再销毁,避免调用quit()后无法操作后续链接
  • 将航班详情列表转为用特殊分隔符(如|)拼接的字符串,适配CSV的单元格存储格式
  • 所有链接爬取完成后,统一将总列表写入同一个CSV文件

完整可运行代码

from selenium import webdriver
import time
import csv

# 存储所有航班数据的总列表
all_flights = []
list_link = ['https://www.kayak.it/flights/MIL-PAL/2021-09-05/2021-09-06/?sort=bestflight__a&fs=stops=0', 'https://www.kayak.it/flights/MIL-ROM/2021-09-05/2021-09-06/?sort=bestflight__a&fs=stops=0']

for link in list_link:
    # 每次循环初始化一次驱动
    driver = webdriver.Chrome(executable_path="你的ChromeDriver路径")
    driver.maximize_window()
    driver.implicitly_wait(10)
    driver.get(link)
    time.sleep(5)
    flights = driver.find_elements_by_class_name("resultInner")
    print(f"当前链接{link}抓取到航班数:{len(flights)}")
    for flight in flights:
        driver.execute_script("arguments[0].scrollIntoView(true);", flight)
        driver.execute_script("window.scrollBy(0,-300)")
        flightdetails = {}
        frowdet = []
        details = flight.find_elements_by_xpath(".//div[@class='mainInfo']//li")
        for d in details:
            fd = ""
            sd = ""
            first = d.find_elements_by_xpath(".//div[@class='top']")
            for f in first:
                fd += f.get_attribute("innerText") + ' '
            second = d.find_elements_by_xpath(".//div[@class='bottom']//span")
            for s in second:
                sd += s.get_attribute("innerText")
            detstr = sd + ' - ' + fd
            frowdet.append(detstr)
        # 提取完整价格,原代码仅取前两位会丢失数据,可根据需要调整
        fprice = flight.find_element_by_xpath(".//span[@class='price-text']").get_attribute("innerText").replace("€", "").strip()
        # 航班列表转为|分隔的字符串
        flightdetails["出发-到达航线"] = "|".join(frowdet)
        flightdetails["价格(欧元)"] = fprice
        # 追加到总列表
        all_flights.append(flightdetails)
    driver.quit()

# 写入CSV文件
if all_flights:
    with open("kayak_flights.csv", "w", newline="", encoding="utf-8-sig") as f:
        writer = csv.DictWriter(f, fieldnames=all_flights[0].keys())
        writer.writeheader()
        writer.writerows(all_flights)
    print(f"所有数据已写入kayak_flights.csv,共{len(all_flights)}条记录")

注意事项

  • 需替换代码中你的ChromeDriver路径为本地实际的ChromeDriver文件路径
  • 如果使用Selenium 4.x版本,需要把find_elements_by_xx的写法替换为find_elements(By.xx, 定位值),同时顶部导入from selenium.webdriver.common.by import By
  • 如果爬取过程中出现元素找不到的问题,可适当延长time.sleep的等待时长,或者改用显示等待逻辑
  • 代码使用utf-8-sig编码存储CSV,用Excel打开不会出现乱码问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:42:03