如何用Python Selenium实现网页无限滚动并将行数据存入字典列表
实现滚动加载数据并提取为字典列表的方案
1. 依赖准备
先安装Selenium库,并配置好对应浏览器的驱动(比如ChromeDriver):
pip install selenium
注意:ChromeDriver的版本要和你本地Chrome浏览器版本匹配,可直接放在系统环境变量路径下,或者在初始化webdriver时指定路径。
2. 核心实现代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time def scrape_infinite_scroll_data(target_url): # 初始化Chrome浏览器实例 driver = webdriver.Chrome() driver.get(target_url) driver.maximize_window() # 等待表头加载完成,提取列名作为字典的键 wait = WebDriverWait(driver, 10) header_elements = wait.until(EC.visibility_of_all_elements_located((By.XPATH, "//table//thead//th"))) column_keys = [header.text.strip() for header in header_elements] all_rows_data = [] processed_row_count = 0 # 循环滚动加载,直到获取到70行数据 while len(all_rows_data) < 70: # 获取当前页面所有已加载的数据行(排除表头) current_rows = wait.until(EC.visibility_of_all_elements_located((By.XPATH, "//table//tbody//tr"))) # 处理新增的行,避免重复提取 for row in current_rows[processed_row_count:]: cell_elements = row.find_elements(By.XPATH, "./td") # 把每行数据映射为字典,列名为键,单元格文本为值 row_dict = {column_keys[i]: cell_elements[i].text.strip() for i in range(len(cell_elements))} all_rows_data.append(row_dict) # 已获取足够数据,终止循环 if len(all_rows_data) >= 70: break # 滚动到当前最后一行,触发后端加载新数据 last_row = current_rows[-1] driver.execute_script("arguments[0].scrollIntoView({behavior: 'smooth', block: 'end'});", last_row) # 等待新数据加载完成(可根据页面加载速度调整等待时间,或用显式等待判断行数量变化) time.sleep(1.5) processed_row_count = len(current_rows) # 关闭浏览器 driver.quit() return all_rows_data # 调用函数,替换为你的目标网页地址 result_data = scrape_infinite_scroll_data("https://your-target-page.com") # 打印前5行数据示例 for i in range(min(5, len(result_data))): print(f"第{i+1}行: {result_data[i]}")
3. 关键逻辑说明
- 滚动触发机制:通过执行JavaScript将当前可见的最后一行滚动到视图内,触发页面的滚动加载逻辑,拉取新数据。
- 去重处理:用
processed_row_count记录上一次已处理的行数,每次只处理新增的行,避免重复提取相同数据。 - 显式等待:使用
WebDriverWait确保元素完全加载后再操作,比固定等待更可靠,减少元素未找到的报错概率。 - 终止条件:以获取到70行数据为终止标志,也可以优化为“连续两次获取的行数量不变”,适配数据行数不确定的场景。
内容的提问来源于stack exchange,提问作者Priya Shah
相关产品推荐
相关产品推荐

