Selenium 与爬虫的关联
在 Selenium 普及之前,基于 Webkit 的无界面浏览器 PhantomJS 曾是自动化测试的主流工具。但 Selenium 直接运行在真实浏览器中,模拟用户操作更加自然,数据提取能力更强,目前已基本取代了 PhantomJS。
Selenium 的核心作用
- 捕获任意形式的数据:
page_source属性能返回页面加载完成后的所有源码,无论是静态 HTML 还是 Ajax 动态加载的内容,真正实现了"可见即可爬取"。虽然效率略低于纯 HTTP 请求,但准确性高。 - 模拟登录:对于反爬机制复杂的大型网站,Selenium 能模拟真实的浏览器行为,绕过部分验证逻辑。
Selenium 捕获动态加载数据
环境准备
首先需要下载 chromedriver,这是驱动 Chrome 浏览器的核心组件。务必确保驱动版本与你本地安装的 Chrome 浏览器版本一致。在地址栏输入 chrome://version/ 可查看当前版本号。
安装依赖:
pip install selenium
案例:药监总局企业数据爬取
该网站数据通过 Ajax 动态加载,URL 固定,点击页码会触发后台请求。利用 Selenium,我们无需关心 Ajax 细节,直接解析渲染后的 DOM 即可。
先尝试爬取第一页数据:
from selenium import webdriver
from lxml import etree
import time
# 指定 chromedriver 路径,建议配置环境变量
bro = webdriver.Chrome(executable_path='../chromedriver_win32/chromedriver.exe')
url = 'http://125.35.6.84:81/xk/'
bro.get(url)
# page_source 获取渲染后的完整 HTML
page_text = bro.page_source
# 解析企业名称
tree = etree.HTML(page_text)
li_list = tree.xpath('//*[@id="gzlist"]/li')
for li in li_list:
name = li.xpath('./dl/@title')[0]
print(name)
bro.quit()
如何爬取多页数据?
由于 URL 不变,我们需要模拟点击"下一页"按钮。注意添加延时等待数据加载。
from selenium import webdriver
from lxml import etree
import time
bro = webdriver.Chrome(executable_path='../chromedriver_win32/chromedriver.exe')
url =
bro.get(url)
all_page_text = []
i ():
next_page_tag = bro.find_element_by_xpath()
next_page_tag.click()
time.sleep()
all_page_text.append(bro.page_source)
page_text all_page_text:
tree = etree.HTML(page_text)
li_list = tree.xpath()
li li_list:
name = li.xpath()[]
(name)
bro.quit()


