如何用Python读取Excel列URL调用Chrome爬取数据后回存Excel
实现方案
前置依赖安装
你需要先安装用到的Python库,执行以下命令即可:
pip install pandas openpyxl selenium
pandas+openpyxl:负责Excel文件的读取和写入selenium:负责控制Chrome浏览器打开网页、提取动态渲染的内容,4.0+版本会自动匹配安装对应版本的ChromeDriver,无需手动下载
实现逻辑
- 读取Excel中存储URL的指定列,转为可遍历的序列
- 初始化Chrome浏览器驱动,配置全局等待时长
- 循环遍历每一条URL,打开页面后定位提取目标内容,遇到异常标记为爬取失败,每次请求后加入随机等待避免触发反爬
- 所有URL处理完成后,将爬取结果写入Excel的指定列
可直接复用的代码示例
你只需要修改代码开头的配置项,适配你自己的Excel路径、列名、目标元素定位规则即可:
import pandas as pd import time import random from selenium import webdriver from selenium.webdriver.common.by import By from selenium.common.exceptions import TimeoutException, NoSuchElementException # -------------------------- 自定义配置区域 -------------------------- EXCEL_PATH = "你的文件路径.xlsx" # 替换为你的Excel文件实际路径 URL_COL_NAME = "url" # 替换为Excel中存储URL的列名 SAVE_COL_NAME = "爬取结果" # 替换为你要存储爬取数据的列名 # 替换为你要爬取的元素CSS选择器,示例为页面一级标题的选择器 TARGET_SELECTOR = "h1.page-title" MAX_WAIT = 3 # 每个页面最长等待加载的秒数 MIN_SLEEP = 1 # 两次请求之间的最短等待秒数 MAX_SLEEP = 2 # 两次请求之间的最长等待秒数 # ------------------------------------------------------------------- # 读取Excel df = pd.read_excel(EXCEL_PATH, engine="openpyxl") result_list = [] # 初始化Chrome浏览器 driver = webdriver.Chrome() driver.implicitly_wait(MAX_WAIT) try: for url in df[URL_COL_NAME]: try: driver.get(url) # 提取目标内容 target_content = driver.find_element(By.CSS_SELECTOR, TARGET_SELECTOR).text.strip() result_list.append(target_content) except (TimeoutException, NoSuchElementException): # 页面加载超时或者找不到目标元素时,标记为爬取失败 result_list.append("爬取失败") # 随机等待,降低被反爬拦截的概率 time.sleep(random.uniform(MIN_SLEEP, MAX_SLEEP)) finally: # 确保程序异常时也会关闭浏览器 driver.quit() # 结果写回Excel df[SAVE_COL_NAME] = result_list df.to_excel(EXCEL_PATH, index=False, engine="openpyxl") print("所有URL处理完成,结果已保存")
优化建议
- 如果你要爬取的页面是静态页面,没有JS动态渲染的内容,可以把selenium替换为
requests+BeautifulSoup的组合,不需要打开浏览器,爬取速度会提升数倍 - 4000条URL处理耗时较长,可以引入
tqdm库添加进度条,直观查看处理进度 - 如果担心程序中途崩溃丢失已爬取的数据,可以每爬100条就存一次临时文件,不要等全部爬完再统一存储
内容的提问来源于stack exchange,提问作者Simon Soltanian
相关产品推荐
相关产品推荐

