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

Selenium爬取名称后插入SQLite数据库仅保存少量数据问题求解

问题原因
  • 变量覆盖丢失数据:你在Test1、Test2的爬取循环中,每次迭代都会直接覆盖Test1_text、Test2_text变量,循环结束后这两个变量仅能保存最后一次迭代的1个名称,前面爬的38条数据全部没有留存
  • 插入参数不完整:你构造的Values仅传入了最后1条Test1名称和最后1条Test2名称,总共只有2条待插入数据,和你爬取的40条完全不匹配
  • 语法错误:driver.close没有加括号属于无效代码,不会执行窗口关闭逻辑,且同一个driver实例连续调用两次close操作会直接抛出异常
修改方案

确实需要用append()方法提前存储所有爬取到的名称,修改后代码保留了原有控制台打印逻辑,可实现40条数据全部入库:

import sqlite3
from selenium.webdriver.common.by import By

# 初始化空列表存储所有爬取到的名称
name_list = []
# 如用到records_added_Risultati变量,可在此处初始化避免报错:records_added_Risultati = 0

# Test 1
driver.minimize_window()
driver.get("link")
for Test1 in driver.find_elements(By.CSS_SELECTOR, "a[href^='/xxxx'][class^='xxxx']"):
    Test1_text = Test1.text
    print(Test1_text)
    # 追加到总列表
    name_list.append(Test1_text)

# Test 2
driver.minimize_window()
driver.get("link")
for Test2 in driver.find_elements(By.CSS_SELECTOR, "a[href^='/xxxx'][class^='xxxx']"):
    Test2_text = Test2.text
    print(Test2_text)
    # 追加到总列表
    name_list.append(Test2_text)

# 爬取完成后统一关闭driver
driver.quit()

# 批量插入数据库
con = sqlite3.connect('/home/blablabla/Desktop/Database.db')
cursor = con.cursor()

# 构造符合executemany要求的参数格式
values = [(name,) for name in name_list]
sqlite_insert_query = 'INSERT INTO NewTest (Name) VALUES (?);'
cursor.executemany(sqlite_insert_query, values)
con.commit()
print(" ")
print("Record inserted successfully ", cursor.rowcount)
records_added_Risultati = records_added_Risultati + 1
cursor.close()
con.close()

内容的提问来源于stack exchange,提问作者James D. Com

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 12:15:03