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

如何将Selenium抓取的数据拆分存储为两组关联衔接的列表?

问题解决

现有代码及运行结果

lokk = []
nums = 7
for _ in range(nums):
    inner = driver.find_element_by_xpath(
        "/html/body/div[1]/div[2]/div/div/div/div[2]/div/div/div/div[2]/div[2]/div/div/div[2]/div[5]/span[1]").get_attribute(
        "innerHTML")
    lokk.append(inner)
    time.sleep()
    print(lokk)

运行后得到数据:['1', '2', '3', '4', '5', '6', '7']

预期需求

需要将抓取数据分为两组:

  • 第一组:包含前6个元素,如 ['1', '2', '3', '4', '5', '6']
  • 第二组:包含全部7个元素,如 ['1', '2', '3', '4', '5', '6', '7']

后续再次抓取时,新分组需以上一次第二组的最后一个元素为起始:

  • 新第一组:['7', '8', '9', '10', '11', '12']
  • 新第二组:['7', '8', '9', '10', '11', '12', '13']

尝试的代码及问题

尝试的代码如下:

lok = []
num = 6
for _ in range(num):
    inner = driver.find_element_by_xpath(
    "/html/body/div[1]/div[2]/div/div/div/div[2]/div/div/div/div[2]/div[2]/div/div/div[2]/div[5]/span[1]").get_attribute(
        "innerHTML")
    lok.append(inner)
    time.sleep(10)
    print(lok)

lokk = []
nums = 7
for _ in range(nums):
    inner = driver.find_element_by_xpath(
"/html/body/div[1]/div[2]/div/div/div/div[2]/div/div/div/div[2]/div[2]/div/div/div[2]/div[5]/span[1]").get_attribute(
        "innerHTML")
    lokk.append(inner)
    time.sleep()
    print(lokk)

存在的问题:

  • 抓取第二组7个元素时,页面数据已更新,无法得到预期结果
  • 后续运行时,上一组的第7个元素无法成为新组起始,新组会从下一个元素开始

解决方案

核心问题是重复抓取时没有复用已获取的最后一个元素,且两次独立循环导致页面数据更新后前后数据断层,可以按以下思路修改:

  1. 每次抓取时,先获取足够的连续数据,再从中拆分两组;后续抓取以上一次的最后一个元素为起点,只补充新数据。
  2. 维护一个全局的历史数据列表,避免重复抓取已获取的元素。

修改后的代码示例:

import time
from selenium import webdriver

driver = webdriver.Chrome()  # 根据你的浏览器调整驱动
# 假设这里已经打开目标页面并完成初始化

# 初始抓取:获取7个元素
total_data = []
initial_count = 7
for _ in range(initial_count):
    inner = driver.find_element_by_xpath(
        "/html/body/div[1]/div[2]/div/div/div/div[2]/div/div/div/div[2]/div[2]/div/div/div[2]/div[5]/span[1]").get_attribute(
        "innerHTML")
    total_data.append(inner)
    time.sleep(10)  # 根据页面更新频率调整休眠时间

# 拆分初始两组
group1 = total_data[:6]
group2 = total_data[:7]
print("初始第一组:", group1)
print("初始第二组:", group2)

# 后续抓取逻辑:以上一次第二组最后一个元素为起点
while True:  # 可以根据需求改成固定次数循环
    # 获取当前需要补充的元素数量:需要凑够新的7个(含上一次最后一个),所以补充6个新元素
    need_count = 6
    new_data = []
    # 先把上一次的最后一个元素加入新数据
    new_data.append(total_data[-1])
    # 抓取6个新元素
    for _ in range(need_count):
        inner = driver.find_element_by_xpath(
            "/html/body/div[1]/div[2]/div/div/div/div[2]/div/div/div/div[2]/div[2]/div/div/div[2]/div[5]/span[1]").get_attribute(
            "innerHTML")
        new_data.append(inner)
        time.sleep(10)
    
    # 更新全局数据
    total_data.extend(new_data[1:])  # 只加新的6个,避免重复
    
    # 拆分新的两组
    new_group1 = new_data[:6]
    new_group2 = new_data[:7]
    print("新第一组:", new_group1)
    print("新第二组:", new_group2)
    
    # 可以在这里加停止条件,比如抓取N轮后break
    # break

关键说明

  • 用total_data维护所有已抓取的元素,避免重复获取
  • 初始抓取7个元素后直接拆分两组,不需要分开两次循环,避免页面更新导致数据不一致
  • 后续抓取时,先把上一组最后一个元素加入新数据列表,再抓取6个新元素,刚好凑够7个,拆分后自然满足要求
  • 休眠时间要根据页面实际更新频率调整,确保每次抓取时页面已经更新到下一个元素

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:31:08