在传统网络爬虫开发中,requests和BeautifulSoup等工具能够高效处理静态页面。然而,随着现代Web应用广泛采用Ajax异步加载、JavaScript动态渲染技术(如React/Vue框架),大量关键数据在页面初始加载时并不存在,需要通过用户交互(如点击按钮、滚动页面)触发动态加载。例如:
此时,传统爬虫因无法执行浏览器行为,无法捕获动态生成的内容。Selenium作为一种浏览器自动化工具,成为解决这一痛点的核心技术。
Selenium是一个跨平台的Web自动化测试框架,通过驱动真实浏览器(Chrome/Firefox/Edge)模拟用户操作,支持:
# 安装Python库
pip install selenium
# 下载浏览器驱动(需与浏览器版本匹配)
# ChromeDriver下载地址:https://chromedriver.chromium.org/
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
service = Service(executable_path='chromedriver路径')
driver = webdriver.Chrome(service=service)
driver.get("https://example.com")
案例目标:自动化爬取动态加载的电商商品数据(需滚动+点击翻页)
# 定位“下一页”按钮并点击(显式等待确保元素加载)
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
next_button = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, ".next-page"))
)
next_button.click()
# 滚动到页面底部(触发懒加载)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# 平滑滚动到特定元素
target = driver.find_element(By.ID, "load-more")
driver.execute_script("arguments[0].scrollIntoView({behavior: 'smooth'});", target)
# 自动填写搜索框并提交
search_input = driver.find_element(By.NAME, "q")
search_input.send_keys("Python编程书籍") # 输入文本
search_input.submit() # 提交表单
# 处理复杂表单(如登录)
username = driver.find_element(By.ID, "username")
password = driver.find_element(By.ID, "password")
username.send_keys("[email protected]")
password.send_keys("secure_password123")
driver.find_element(By.XPATH, "//button[@type='submit']").click()
# 自动关闭弹窗
try:
popup = driver.find_element(By.CLASS_NAME, "modal-close")
popup.click()
except NoSuchElementException:
pass
# 绕过基础验证码(复杂场景需结合OCR或第三方服务)
# 隐式等待(全局生效)
driver.implicitly_wait(5)
# 显式等待(针对特定条件)
WebDriverWait(driver, 10).until(EC.title_contains("搜索结果"))
options = webdriver.ChromeOptions()
options.add_argument("--headless") # 不显示浏览器界面
options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2}) # 禁止加载图片
提示:Selenium虽然功能强大,但相较于纯HTTP请求速度较慢。在实际项目中,建议优先尝试逆向工程接口(通过浏览器开发者工具分析XHR请求),仅在必要时使用Selenium。
Python爬虫介绍 | Python爬虫(1)Python爬虫:从原理到实战,一文掌握数据采集核心技术 |
HTTP协议解析 | Python爬虫(2)Python爬虫入门:从HTTP协议解析到豆瓣电影数据抓取实战 |
HTML核心技巧 | Python爬虫(3)HTML核心技巧:从零掌握class与id选择器,精准定位网页元素 |
CSS核心机制 | Python爬虫(4)CSS核心机制:全面解析选择器分类、用法与实战应用 |
静态页面抓取实战 | Python爬虫(5)静态页面抓取实战:requests库请求头配置与反反爬策略详解 |
静态页面解析实战 | Python爬虫(6)静态页面解析实战:BeautifulSoup与lxml(XPath)高效提取数据指南 |
Python数据存储实战 CSV文件 | Python爬虫(7)Python数据存储实战:CSV文件读写与复杂数据处理指南 |
Python数据存储实战 JSON文件 | Python爬虫(8)Python数据存储实战:JSON文件读写与复杂结构化数据处理指南 |
Python数据存储实战 MySQL数据库 | Python爬虫(9)Python数据存储实战:基于pymysql的MySQL数据库操作详解 |
Python数据存储实战 MongoDB数据库 | Python爬虫(10)Python数据存储实战:基于pymongo的MongoDB开发深度指南 |
Python数据存储实战 NoSQL数据库 | Python爬虫(11)Python数据存储实战:深入解析NoSQL数据库的核心应用与实战 |
Python爬虫数据存储必备技能:JSON Schema校验 | Python爬虫(12)Python爬虫数据存储必备技能:JSON Schema校验实战与数据质量守护 |
Python爬虫数据安全存储指南:AES加密 | Python爬虫(13)数据安全存储指南:AES加密实战与敏感数据防护策略 |
Python爬虫数据存储新范式:云原生NoSQL服务 | Python爬虫(14)Python爬虫数据存储新范式:云原生NoSQL服务实战与运维成本革命 |
Python爬虫数据存储新维度:AI驱动的数据库自治 | Python爬虫(15)Python爬虫数据存储新维度:AI驱动的数据库自治与智能优化实战 |
Python爬虫数据存储新维度:Redis Edge近端计算赋能 | Python爬虫(16)Python爬虫数据存储新维度:Redis Edge近端计算赋能实时数据处理革命 |
反爬攻防战:随机请求头实战指南 | Python爬虫(17)反爬攻防战:随机请求头实战指南(fake_useragent库深度解析) |
反爬攻防战:动态IP池构建与代理IP | Python爬虫(18)反爬攻防战:动态IP池构建与代理IP实战指南(突破95%反爬封禁率) |
Python爬虫破局动态页面:全链路解析 | Python爬虫(19)Python爬虫破局动态页面:逆向工程与无头浏览器全链路解析(从原理到企业级实战) |
Python爬虫数据存储技巧:二进制格式性能优化 | Python爬虫(20)Python爬虫数据存储技巧:二进制格式(Pickle/Parquet)性能优化实战 |