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
相关产品推荐
相关产品推荐

