返回介绍

7.3 Selenium 库的安装与使用

发布于 2025-04-21 19:15:27 字数 3965 浏览 0 评论 0 收藏

7.3.1 Selenium 库的安装

爬虫基础-爬取动态网站的神器 Selenium 简介

Selenium 是个自动化测试工具,也可用来解决动态网页的加载和渲染问题。Selenium 可以驱动浏览器模拟人的操作,支持各种浏览器,包括 Chrome、Safari、Firefox 等主流界面式浏览器。本书讲解 Selenium 配合 Chrome 浏览器来爬取网页内容,这是因为 Google Chrome 最新版本发布了一个新的实用功能 - Headless Chrome,也就是无界面 Chrome 浏览器,这对提高爬虫效率非常有利。读者可能在其他书或者网站发现,之前普遍习惯使用 Selenium 配合 PhantomJS 编写动态网页爬虫,但是在 2017 年谷歌官方准备提供 Chrome Headless 后,PhantomJS 维护者 Vitaly Slobodin 随即在邮件列表上宣布辞职,PhantomJS 浏览器前景不明,因此本书使用 Selenium 和 Chrome 浏览器这两个工具。

Selenium 库不是 Python 标准库,使用前需要安装,可以使用 pip 来安装。

>pip install selenium 

如果使用的是 Anaconda 发行版本的 Python,安装过程遇到 TypeError: parse() got an unexpected keyword argument 'transport_encoding'这样的错误提示,可以首先升级一下 pip 版本,然后再运行。

>conda install pip
 
>pip install selenium 

这样就可以完成 Selenium 的安装了,本书所使用的 Selenium 版本是 3.8.1 版本。Selenium 需要配合 Chrome 浏览器使用,并且需要驱动浏览器的 chromedriver 驱动程序。

7.3.2 chromedriver 的安装和使用

Selenium 需要使用 chromedriver 来驱动 Chrome 浏览器,我们需要下载与操作系统对应的版本。Chromedriver 的具体版本还要与使用的 Chrome 浏览器版本对应,表 7-1 所示为 chromedriver 与谷歌浏览器版本映射表。

表 7-1 chromedriver 与谷歌浏览器版本映射表

例如,我们在本书中使用的 Chrome 浏览器版本是 62.0.3202.89(正式版本),操作系统是 Windows 10,根据表中的对应关系,下载使用的是 2.34 版本的 chromedriver.exe 文件。

Selenium 在使用 chromedriver 时,既可以把 chromedriver 添加到系统的环境变量,也可以直接在代码中指明 chromedriver 所在的目录。为了简单,本节会在代码中直接添加 chromedriver 所在的路径地址,从而省去了添加到系统环境变量的操作。

7.3.3 Selenium 的简单使用

安装好 Selenium 和 Chrome 浏览器,并且下载好驱动 chromedrive,就可以开始使用 Selenium 打开浏览器,并浏览需要的内容了。下面是一个简单示例。

第一步,从 Selenium 中引入 webdriver。

>>>from selenium import webdriver 

第二步,初始化 webdriver。

>>>driver = webdriver.Chrome('d:/selenium/chromedriver.exe') 

这里使用下载的 chromedriver.exe 的完整路径来初始化 webdriver,因为下载的 chromedriver.exe 放在了 D 盘的 selenium 文件夹中,所以这里填写的路径是 d:/selenium/chromedriver.exe。

运行完这一步,Selenium 会打开 Chrome 浏览器,如图 7-6 所示。

图 7-6 Selenium 打开的 Chrome 浏览器

第三步,使用 webdriver 打开百度首页。

>>>driver.get('https://www.baidu.com/') 

可以使用 webdriver 的 GET 方法打开百度,如图 7-7 所示。

图 7-7 Selenium 驱动 Chrome 浏览器打开百度

第四步,使用 XPath 找到搜索框,在 Selenium 中继续使用 XPath 路径查找元素。

>>>search_box = driver.find_element_by_xpath('//*[@id="kw"]') 

第五步,在搜索框中输入搜索关键字 python。

>>>search_box.send_keys('python') 

这里使用 send_keys 方法输入了搜索关键字,现在的浏览器如图 7-8 所示。

图 7-8 Selenium 输入搜索关键词

最后找到搜索按钮并单击。

>>>submit = driver.find_element_by_xpath('//*[@id="su"]')
>>>submit.click()   #单击搜索按钮 

这里还是使用了 XPath 路径定位“百度一下”按钮,当然也可以使用 driver.find_element_by_id('su') 通过 id 找到元素,当知道一个元素的 name 时,Selenium 也支持使用 name 查找元素,然后对找到的这个元素应用 click 方法单击它,这样就完成了用 Selenium 打开百度网页,输入搜索关键字并单击搜索的过程。

以上是通过打开百度并搜索关键词这个小例子简单说明和演示了 Selenium 的基本应用,读者应该注意到,我们既可以在 webdriver 中使用 XPath 语法定位网页中的元素,也可以下载这些元素中的信息。下一节将通过爬取新浪微博的个人页面微博,来演示使用 Selenium 编写爬虫爬取网页的全过程。

代码的运行速度相对于浏览器打开速度而言是相当快的,如果代码中没有执行等待或确认网页已经完全打开,很有可能代码后续执行时报错。这就要求在执行代码过程中添加执行等待浏览器的代码,既可以使用 time.sleep() 这种固定时长等待时间,也可以使用隐式等待。隐式等待是在尝试发现某个元素的时候,如果没能立刻发现,就等待固定长度的时间,默认设置是 0 秒。一旦设置了隐式等待时间,它的作用范围就是 webdriver 对象实例的整个生命周期,也就是说在代码中只需要编写如下代码设置一次即可。

driver.implicitly_wait(10)

这里设置隐式等待 10 秒,也就是在查找元素时的最大等待时间为 10 秒,如果超过 10 秒就会报错。还可以使用显示等待,显示等待定义了等待条件,只有该条件触发,才执行后续代码,它的效率比 time.sleep() 这种固定时长等待要高很多,读者可以查阅相关文档进行学习。

本节带领读者认识了 Selenium 这个解析动态网页的终极武器。Selenium 不仅可以应用在爬虫方面,还可以被用来自动化地完成很多任务。例如需要在某个网站大量重复地提交数据,可以编写一个脚本,使用 Selenium 自动化地完成这些任务。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。