Python Selenium 网页爬虫实战教程:一步步教你搞定动态数据

最后更新于 January 23, 2026

现在的互联网早就不是当年的样子了。几乎所有网站都靠 JavaScript 动态加载内容——无限下拉、弹窗、交互式仪表盘,核心数据总要点几下才能看到。实际上,,这意味着只会读取静态 HTML 的传统爬虫工具,已经很难抓到真正有价值的信息。如果你试过从现代电商网站抓商品价格,或者想从交互地图上提取房产信息,肯定体会过那种“数据根本不在源码里”的无力感。

这时候,Selenium 就成了你的“救命稻草”。作为一个长期折腾自动化工具(也抓过不少网站数据)的开发者,我可以很负责任地说:掌握 Selenium,就等于拥有了动态数据采集的“外挂”。在这篇 Selenium 网页爬虫实战教程里,我会带你从环境搭建到自动化采集,手把手演示怎么结合 实现结构化、可导出的数据。不管你是业务分析师、销售达人,还是对 Python 感兴趣的朋友,都能学到实用技巧,顺便体验下“爬虫人”的乐趣(调试 XPath 真的很锻炼心态)。

什么是 Selenium?为什么用它做网页爬虫?

selenium-dynamic-vs-static-web-scraping.png 先来科普下。 是一个开源框架,可以用代码自动操控真实浏览器(比如 Chrome、Firefox)。你可以把它想象成一个“网页机器人”,能自动打开页面、点击按钮、填写表单、滚动页面,甚至执行 JavaScript,和真人操作几乎一模一样。这点非常关键,因为现在大多数网站不会一开始就把所有数据都展示出来,很多内容都要等你交互后才会加载。

为什么这对爬虫很重要? 传统工具比如 BeautifulSoup 或 Scrapy 只适合静态 HTML,对于 JavaScript 动态加载的内容完全“看不见”。而 Selenium 能和页面实时互动,非常适合:

  • 抓取点击“加载更多”后才出现的商品列表
  • 获取动态更新的价格或评论
  • 自动登录、处理弹窗、支持无限滚动页面
  • 提取仪表盘、地图等交互式组件里的数据

简单说,Selenium 是你采集“页面加载后”或“用户操作后”才出现数据的首选神器。

Python Selenium 网页爬虫的核心步骤

用 Selenium 抓网页,主要分三步:

步骤要做什么为什么重要
1. 环境搭建安装 Selenium、WebDriver 和 Python 库工具准备齐全,避免环境踩坑
2. 定位元素用 ID、class、XPath 等方式找到目标数据精准锁定信息,哪怕被 JS 隐藏
3. 数据提取与保存抓取文本、链接或表格,导出为 CSV/Excel把网页原始数据变成可用资源

下面结合实例和代码,带你一步步拆解,让你轻松上手。

步骤 1:搭建 Python Selenium 环境

首先要安装 Selenium 和浏览器驱动(比如 Chrome 就用 ChromeDriver)。好消息是,现在安装真的很简单。

安装 Selenium

打开终端,输入:

1pip install selenium

获取 WebDriver

  • Chrome 用户: 下载 (注意版本要和 Chrome 匹配)。
  • Firefox 用户: 下载

小贴士: Selenium 4.6+ 支持 Selenium Manager 自动下载驱动,基本不用再手动配置 PATH 了()。

Selenium “Hello World” 示例

1from selenium import webdriver
2driver = webdriver.Chrome()  # 或 webdriver.Firefox()
3driver.get("https://example.com")
4print(driver.title)
5driver.quit()

常见问题排查:

  • 如果提示“找不到驱动”,检查 PATH 或用 Selenium Manager。
  • 浏览器和驱动版本要一致。
  • 如果在无界面服务器上运行,见下文“无头模式”技巧。

步骤 2:定位网页元素,提取目标数据

接下来就是“找数据”。网页由各种元素(div、span、table 等)组成,Selenium 提供多种定位方式。

常用定位方法

  • By.ID:通过唯一 ID 查找元素
  • By.CLASS_NAME:按 CSS 类名查找
  • By.XPATH:用 XPath 表达式(灵活但容易变)
  • By.CSS_SELECTOR:用 CSS 选择器(复杂查询很方便)

示例:

1from selenium.webdriver.common.by import By
2# 按 ID 查找
3price = driver.find_element(By.ID, "price").text
4# 用 XPath 查找标题
5title = driver.find_element(By.XPATH, "//h1").text
6# 用 CSS 选择器查找所有商品图片
7images = driver.find_elements(By.CSS_SELECTOR, ".product img")
8for img in images:
9    print(img.get_attribute("src"))

建议: 优先用最简单、最稳定的定位方式(ID > class > CSS > XPath)。如果页面数据有延迟加载,建议用显式等待:

1from selenium.webdriver.support.ui import WebDriverWait
2from selenium.webdriver.support import expected_conditions as EC
3wait = WebDriverWait(driver, 10)
4price_elem = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".price")))

这样可以避免数据还没加载完脚本就报错。

步骤 3:提取并保存数据

定位到元素后,就可以抓取数据并保存。

抓取文本、链接、表格

比如抓取商品表格:

1data = []
2rows = driver.find_elements(By.XPATH, "//table/tbody/tr")
3for row in rows:
4    cells = row.find_elements(By.TAG_NAME, "td")
5    data.append([cell.text for cell in cells])

用 Pandas 保存为 CSV

1import pandas as pd
2df = pd.DataFrame(data, columns=["Name", "Price", "Stock"])
3df.to_csv("products.csv", index=False)

也可以保存为 Excel(df.to_excel("products.xlsx")),甚至用 Google Sheets API 推送到表格。

完整示例:抓取商品标题和价格

1from selenium import webdriver
2from selenium.webdriver.common.by import By
3import pandas as pd
4driver = webdriver.Chrome()
5driver.get("https://example.com/products")
6data = []
7products = driver.find_elements(By.CLASS_NAME, "product-card")
8for p in products:
9    title = p.find_element(By.CLASS_NAME, "title").text
10    price = p.find_element(By.CLASS_NAME, "price").text
11    data.append([title, price])
12driver.quit()
13df = pd.DataFrame(data, columns=["Title", "Price"])
14df.to_csv("products.csv", index=False)

Selenium、BeautifulSoup、Scrapy 对比:Selenium 有哪些独特优势?

selenium-vs-traditional-scrapers-comparison.png 很多人会问:什么时候用 Selenium,什么时候用 BeautifulSoup 或 Scrapy?下面简单对比一下:

工具最适合场景支持 JavaScript 吗?速度与资源消耗
Selenium动态/交互型网站支持较慢,内存占用高
BeautifulSoup简单静态网页抓取不支持非常快,轻量级
Scrapy大规模静态网站爬取有限*超快,异步,低内存
Thunderbit无代码,业务数据采集支持(AI)小中型任务速度快

*Scrapy 通过插件能处理部分动态内容,但不是强项()。

适合用 Selenium 的场景:

  • 数据需要点击、滚动或登录后才出现
  • 需要处理弹窗、无限滚动、动态仪表盘
  • 静态爬虫搞不定的页面

适合用 BeautifulSoup/Scrapy 的场景:

  • 数据直接在初始 HTML 里
  • 需要高效批量抓取成千上万页面
  • 资源消耗要求低

如果你想完全不用写代码, 支持用 AI 抓取动态网站——只需点击“AI 自动识别字段”,就能一键导出到 Sheets、Notion 或 Airtable(后面有详细介绍)。

Selenium + Python 实现网页爬虫自动化

说实话,没人愿意半夜两点起来手动跑爬虫脚本。好在你可以用 Python 的调度库或者操作系统自带的定时任务(比如 Linux/Mac 的 cron,Windows 的任务计划)自动执行 Selenium 采集。

schedule 库定时运行

1import schedule
2import time
3def job():
4    # 你的爬虫代码
5    print("正在抓取...")
6schedule.every().day.at("09:00").do(job)
7while True:
8    schedule.run_pending()
9    time.sleep(1)

用 Cron(Linux/Mac)

在 crontab 添加如下内容,每小时运行一次:

10 * * * * python /path/to/your_script.py

自动化小技巧:

  • 用无头模式运行 Selenium(见下文),避免弹出浏览器窗口。
  • 日志记录错误,必要时邮件提醒。
  • 记得用 driver.quit() 关闭浏览器,释放资源。

提升效率:让 Selenium 爬虫更快更稳的实用技巧

Selenium 功能很强,但如果不注意优化,速度慢、资源占用高。下面这些方法能帮你提速避坑:

1. 启用无头模式

不用反复看浏览器弹窗。无头模式让浏览器在后台运行:

1from selenium.webdriver.chrome.options import Options
2opts = Options()
3opts.headless = True
4driver = webdriver.Chrome(options=opts)

2. 屏蔽图片等无关内容

只抓文本时没必要加载图片,屏蔽后页面加载更快:

1prefs = {"profile.managed_default_content_settings.images": 2}
2opts.add_experimental_option("prefs", prefs)

3. 用高效定位方式

  • 优先用 ID 或简单 CSS 选择器,少用复杂 XPath。
  • 避免 time.sleep(),用显式等待(WebDriverWait)。

4. 随机延迟,模拟真人操作

加点随机等待,降低被封风险:

1import random, time
2time.sleep(random.uniform(1, 3))

5. 轮换 User-Agent 和 IP(如有需要)

大规模采集时,建议更换 UA 字符串并考虑代理,防止被简单反爬。

6. 会话与异常管理

  • 用 try/except 捕获缺失元素,避免脚本崩溃。
  • 记录错误日志,必要时截图方便排查。

更多优化建议可以参考

进阶玩法:Selenium + Thunderbit 实现结构化数据导出

如果你想省去数据清洗和导出环节,Thunderbit 能帮你大大提效。

用 Selenium 抓到原始数据后,可以借助 实现:

  • AI 自动识别字段: Thunderbit 的 AI 能读取你抓取的网页或 CSV,智能推荐表头(“AI 自动识别字段”)。
  • 子页面采集: 有一批商品详情页链接?Thunderbit 可自动访问每个链接,补充更多字段,无需额外写代码。
  • 数据增强: 支持实时翻译、分类、分析等。
  • 一键导出: 轻松导出到 Google Sheets、Airtable、Notion、CSV 或 Excel。

典型流程示例:

  1. 用 Selenium 抓取商品 URL 和标题。
  2. 导出为 CSV。
  3. 打开 Thunderbit,导入 CSV,让 AI 自动识别字段。
  4. 用 Thunderbit 的子页面采集功能,批量补充图片、参数等详细信息。
  5. 最终一键导出到 Sheets 或 Notion。

这种组合能帮你省下大量手动整理时间,让你专注于数据分析而不是“数据搬砖”。更多玩法可以参考

Selenium 网页爬虫实用建议与常见问题排查

做网页爬虫就像钓鱼:有时候收获满满,有时候遇到各种“水草”。下面这些建议能让你的脚本更稳、更合规:

实用建议

  • 遵守 robots.txt 和网站协议: 先确认目标站点允许抓取。
  • 控制请求频率: 不要高频访问,注意 HTTP 429 报错。
  • 优先用 API: 如果有公开 API,优先用,安全高效。
  • 只抓取公开数据: 避免采集个人或敏感信息,注意隐私法规。
  • 处理弹窗和验证码: Selenium 可自动关闭弹窗,验证码建议人工处理或用第三方服务,务必遵守网站规则。
  • 随机 UA 和延迟: 降低被检测和封禁风险。

常见报错与解决办法

错误类型含义解决方法
NoSuchElementException找不到元素检查定位方式,适当加等待
超时错误页面或元素加载太慢增加等待时间,检查网络
驱动/浏览器不匹配Selenium 无法启动浏览器更新驱动和浏览器版本
会话崩溃浏览器意外关闭用无头模式,注意资源管理

更多排查技巧见

总结与核心要点

动态网页爬虫早就不是开发者的专利。借助 Python Selenium,你可以自动化操作浏览器,轻松应对各种 JavaScript 重度网站,采集业务所需数据——无论是销售、调研还是兴趣使然。记住:

  • Selenium 是动态、交互型网站数据采集的首选。
  • 三大核心步骤:环境搭建、元素定位、数据提取与保存。
  • 自动化脚本,定时更新数据。
  • 用无头模式、智能等待和高效定位优化速度与稳定性。
  • 结合 Thunderbit,轻松结构化和导出数据,彻底告别表格整理烦恼。

想亲自试试?直接用上文代码开练,等你想进一步提升效率时,不妨体验下 ,享受 AI 驱动的数据清洗与导出。如果还想了解更多,欢迎关注 ,获取更多实战教程和自动化干货。

祝你爬虫顺利,定位永远精准!

免费试用 Thunderbit AI 网页爬虫

常见问题解答

1. 为什么用 Selenium 做网页爬虫,而不是 BeautifulSoup 或 Scrapy?
Selenium 适合采集内容需要用户操作或 JavaScript 执行后才加载的数据。BeautifulSoup 和 Scrapy 适合静态 HTML,速度快但无法处理动态元素或模拟点击、滚动等操作。

2. 如何让 Selenium 爬虫运行更快?
建议用无头模式、屏蔽图片等无关资源、用高效定位方式,并加入随机延迟模拟真人操作。更多技巧见

3. Selenium 爬虫能自动定时运行吗?
当然可以!用 Python 的 schedule 库或操作系统自带的定时任务(如 cron、任务计划)即可定时执行脚本,保证数据实时更新。

4. Selenium 抓取的数据如何导出?
用 Pandas 保存为 CSV 或 Excel。如果需要导出到 Google Sheets、Notion、Airtable 等,推荐用 一键导出。

5. Selenium 如何处理弹窗和验证码?
弹窗可以通过定位关闭按钮自动关闭。验证码较难自动化,建议人工处理或用第三方服务,并始终遵守网站服务条款。

想看更多爬虫教程、AI 自动化技巧或了解最新数据工具?欢迎订阅 或关注我们的 ,获取实战演示。

延伸阅读

Shuai Guan
Shuai Guan
Co-founder/CEO @ Thunderbit. Passionate about cross section of AI and Automation. He's a big advocate of automation and loves making it more accessible to everyone. Beyond tech, he channels his creativity through a passion for photography, capturing stories one picture at a time.
Topics
Selenium 爬虫实战Selenium 网页爬虫教程Python Selenium 网站数据抓取
目录

体验 Thunderbit

两步获取线索及其他数据,AI 驱动。

立即体验 Thunderbit 永久免费
用 AI 提取数据
一键导出数据到 Google Sheets、Airtable 或 Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week