Python实现Excel读写与网页搜索数据追加存储问题求助
解决方案
一、读取输入Excel(姓名、职业列表)
推荐用pandas库,操作简单易上手,先安装依赖:
pip install pandas openpyxl
读取Excel的代码示例:
import pandas as pd # 读取输入Excel文件,假设文件名为input.xlsx,包含"姓名"和"职业"两列 df_input = pd.read_excel("input.xlsx", usecols=["姓名", "职业"]) # 将数据转换成可迭代的列表,方便后续循环搜索 search_list = df_input.to_dict("records") # 此时search_list是一个字典列表,每个元素是{"姓名": "XXX", "职业": "XXX"}
如果你的Excel没有表头,可指定header=None,再手动指定列名:
df_input = pd.read_excel("input.xlsx", header=None, names=["姓名", "职业"])
二、实现Excel数据追加
xlsxwriter本身不支持直接向已有Excel文件追加数据,这里提供两种适合新手的方案:
方案1:用pandas合并旧数据+新数据后写入
这种方法逻辑简单,适合数据量不大的场景:
import pandas as pd # 假设你爬取到的新数据是一个字典列表,比如: new_data = [ {"姓名": "张三", "职业": "程序员", "爬取结果1": "XXX", "爬取结果2": "XXX"}, {"姓名": "李四", "职业": "设计师", "爬取结果1": "YYY", "爬取结果2": "YYY"} ] df_new = pd.DataFrame(new_data) try: # 尝试读取已有结果文件 df_old = pd.read_excel("result.xlsx") # 合并旧数据和新数据 df_total = pd.concat([df_old, df_new], ignore_index=True) except FileNotFoundError: # 如果文件不存在,直接用新数据 df_total = df_new # 将合并后的数据写入Excel df_total.to_excel("result.xlsx", index=False)
方案2:用openpyxl直接追加数据到已有文件
如果不想每次都读取全部旧数据,可使用openpyxl操作已有Excel的工作表:
from openpyxl import load_workbook import pandas as pd # 新数据转DataFrame new_data = [ {"姓名": "张三", "职业": "程序员", "爬取结果1": "XXX", "爬取结果2": "XXX"} ] df_new = pd.DataFrame(new_data) try: # 加载已有工作簿 book = load_workbook("result.xlsx") sheet = book.active # 获取已有数据的最后一行,新数据从下一行开始写入 start_row = sheet.max_row + 1 # 将新数据逐行写入 for index, row in df_new.iterrows(): for col_num, value in enumerate(row.values, 1): sheet.cell(row=start_row + index, column=col_num, value=value) book.save("result.xlsx") except FileNotFoundError: # 文件不存在时直接创建新文件 df_new.to_excel("result.xlsx", index=False)
三、结合Selenium的完整流程示例
把读取输入、爬取、写入整合起来:
import pandas as pd from selenium import webdriver from selenium.webdriver.common.by import By import time # 1. 读取输入Excel df_input = pd.read_excel("input.xlsx", usecols=["姓名", "职业"]) search_list = df_input.to_dict("records") # 2. 初始化Selenium浏览器 driver = webdriver.Chrome() driver.implicitly_wait(10) # 3. 循环爬取数据 result_list = [] for item in search_list: name = item["姓名"] job = item["职业"] # 这里替换成你的搜索逻辑,比如打开搜索页面,输入关键词 driver.get("https://example.com/search") # 假设搜索框的id是"search-input" search_box = driver.find_element(By.ID, "search-input") search_box.send_keys(f"{name} {job}") search_box.submit() time.sleep(2) # 这里替换成你的数据提取逻辑,比如提取结果文本 try: result_text = driver.find_element(By.CLASS_NAME, "result-content").text except: result_text = "无结果" # 将爬取结果加入列表 result_list.append({ "姓名": name, "职业": job, "爬取结果": result_text }) # 4. 关闭浏览器 driver.quit() # 5. 将结果写入/追加到Excel df_result = pd.DataFrame(result_list) try: df_old = pd.read_excel("result.xlsx") df_total = pd.concat([df_old, df_result], ignore_index=True) except FileNotFoundError: df_total = df_result df_total.to_excel("result.xlsx", index=False)
内容的提问来源于stack exchange,提问作者sadsapien
相关产品推荐
相关产品推荐

