1. 项目概述
这个Python脚本实现了一个实用的网页PDF链接抓取功能,主要面向需要批量获取网页中PDF文件的技术人员。核心思路是通过Selenium自动化工具模拟用户操作:先点击列表项,再在新打开的详情页中提取所有PDF链接。整个过程就像是一个不知疲倦的助手,帮你完成那些重复而繁琐的点击和收集工作。
我在实际工作中经常遇到需要收集大量PDF文档的情况,比如爬取政府公示文件、学术论文或产品手册。传统的手动操作不仅效率低下,还容易出错。这个脚本完美解决了这些问题,特别适合以下场景:
- 需要从分页列表收集大量PDF文档
- 目标PDF分布在点击后才能显示的二级页面
- 要求完整记录所有PDF链接且不能重复
2. 环境准备与配置
2.1 基础环境搭建
在开始之前,我们需要准备好Python环境和必要的库。推荐使用Python 3.8+版本,这个脚本的核心依赖是Selenium库:
bash复制pip install selenium
同时需要下载对应浏览器版本的WebDriver。以Chrome为例:
- 查看Chrome浏览器版本(在地址栏输入chrome://version/)
- 到ChromeDriver官网下载匹配版本的驱动
- 将chromedriver.exe放在系统PATH路径或项目目录下
注意:浏览器和驱动版本必须严格匹配,否则会出现无法启动的问题。这是新手最容易踩的坑之一。
2.2 Selenium配置详解
脚本中的浏览器配置值得仔细研究:
python复制options = Options()
options.add_argument("--start-maximized")
# options.add_argument("--headless") # 稳定后可选无头
--start-maximized:确保浏览器以最大化窗口启动,避免元素因窗口太小而不可见--headless:无头模式,适合在服务器运行,但调试阶段建议关闭
我建议在开发阶段保持可视化模式,等脚本稳定后再启用无头模式。因为可视化状态下可以直观看到操作过程,方便定位问题。
3. 核心代码解析
3.1 页面元素定位策略
python复制li_elements = driver.find_elements(By.CSS_SELECTOR, "ul.infolist li")
这里使用CSS选择器定位列表元素,这种方式的优势在于:
- 比XPath更简洁易读
- 性能通常优于XPath
- 对页面结构变化有一定容错性
如果页面结构复杂,可以考虑更精确的选择器,比如:
python复制"ul.infolist > li.list-item"
3.2 点击与窗口切换机制
python复制driver.execute_script("arguments[0].scrollIntoView();", a)
a.click()
driver.switch_to.window(driver.window_handles[-1])
这段代码实现了三个关键操作:
- 滚动到元素位置(避免元素被遮挡)
- 模拟点击操作
- 切换到新打开的窗口
实际测试中发现,有些网站点击后不是开新窗口而是当前页跳
解锁全文
加入我们的会员,获取最新、最热、最精彩的开发者技术内容