如何用Python高效抓取多页网页交互式数据集至pandas DataFrame?
从多页交互式网页提取数据到Pandas DataFrame的方法
核心适用库
- BeautifulSoup:处理静态HTML内容,解析网页结构提取数据,适合页面内容直接渲染的场景
- Selenium:处理动态加载的交互式网页(比如需要翻页、JS渲染的内容),模拟浏览器操作获取完整页面
- pandas:最终将提取的数据整理成DataFrame格式
高效实现步骤
1. 判断网页类型
- 静态网页(右键查看源码能看到所有数据):用
requests+BeautifulSoup组合 - 动态网页(数据靠JS加载,源码看不到):用
Selenium模拟浏览器加载页面
2. 静态网页提取流程
- 请求目标页面并解析:
import requests from bs4 import BeautifulSoup import pandas as pd url = "目标网页地址" response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser")
- 定位数据块:根据网页结构,用
soup.find()/soup.find_all()找到包含数据示例和标签的元素(比如截图里的卡片、固定框) - 提取单页数据:遍历每个数据块,提取数据示例文本和所有关联标签,存成字典列表
- 处理多页:构造分页URL(比如
?page=1、?page=2),循环请求每一页,重复提取步骤 - 转成DataFrame:
data_list = [] # 填充循环提取的字典数据 df = pd.DataFrame(data_list)
3. 动态网页提取流程
- 安装Selenium并配置浏览器驱动(比如ChromeDriver):
pip install selenium
- 模拟浏览器操作提取多页数据:
from selenium import webdriver from selenium.webdriver.common.by import By import time driver = webdriver.Chrome() driver.get("目标网页地址") data_list = [] while True: # 等待页面加载完成 time.sleep(2) # 定位数据块并提取内容 items = driver.find_elements(By.CLASS_NAME, "数据块类名") for item in items: sample_text = item.find_element(By.CLASS_NAME, "数据示例类名").text tags = [tag.text for tag in item.find_elements(By.CLASS_NAME, "标签类名")] data_list.append({"数据示例": sample_text, "关联标签": tags}) # 尝试点击下一页,无下一页则终止循环 try: next_btn = driver.find_element(By.CLASS_NAME, "下一页按钮类名") next_btn.click() except: break driver.quit() df = pd.DataFrame(data_list)
4. 注意事项
- 遵守网站
robots.txt规则,添加请求间隔(time.sleep())避免被封禁 - 定位元素优先用
ID、CLASS_NAME或CSS_SELECTOR,比XPATH更稳定 - 关联标签可在DataFrame中存为列表,后续按需拆分或处理
内容的提问来源于stack exchange,提问作者skidjoe
相关产品推荐
相关产品推荐

