网页其实有很多复杂的操作,很多时候对于一些 JavaScript 动态渲染的页面来说,直接爬虫是不太方便的。
可能得用一下 python 的 Selenium 框架。
参考书籍:python3 网络爬虫实战
介绍
Selenium 是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击,下拉等操作,同时还可以获取当前呈现的页面的网页源代码。
准备工作
浏览器配置好 ChromeDriver
下载好 http://npm.taobao.org/mirrors/chromedriver / 找与 chrome 浏览器版本相同。
将下载的 chromedriver.exe 放到 Google 浏览器的安装目录下。
配置环境变量
安装 python 的 Selenium 库
测试
如果出现空白页面代表成功了。
初次使用
我们来看一看 Selenium 有一些怎样的功能
看完上面的注释,我们来感受一下过程:运行代码后会自动弹出一个 chrome 浏览器,浏览器会跳转到百度页面,然后在搜索框搜索 python,然后跳转到页面,等待加载完成,控制台会输出 url、cookies 及源代码。
这全程都是程序自动运行的。
所以可以看出,这个 python 可以帮助我们自动执行各个动作,正好可以应对 JavaScript 的动态渲染操作。
过程分析
1. 声明浏览器对象
2. 访问页面
3. 查找节点
找节点基本方法(使用审查元素)
可以看出 id 为 q,name 也为 q 等等信息。
方法函数
根据 name 值获取:
根据 id 值获取:
根据 class 值获取:
根据标签获取:
还有根据 XPath、css 选择器等获取方式
输出为
都获取到了输入框。
如果我们使用了方法,只能获取到第一个节点,如果用方法,则结果是列表类型。
4. 节点交互
在获取到节点后,自然需要执行一些操作,也就是我们通过浏览器模拟执行一些工作。
输入文字用方法;
清空文字用方法;
点击按钮用方法;
非常简单!
想了解更多对节点的操作,可观看官方文档的节点交互介绍:
https://selenium-python.readthedocs.io/api.html
只需要简单的四步骤,就可以轻松让浏览器自动执行简单操作。
5. 动作链
但有时候如果是我们要执行的动作如果是没有特定的节点对象呢?如鼠标拖拽,键盘按键等,这时候我们得利用另外一种方式来进行,那就是动作链。
我们用菜鸟教程的一个拖拽案例
http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable
看看它如何执行的。
由系统自动执行。
6. 执行 JavaScript
有时候如果没有 API 提供,如下拉进度条等,可以直接模拟运行 JavaScript,使用方法即可实现,代码如下:
懂 JavaScript 应该就知道是什么意思啦,通过传递 JavaScript 语句,给到 url 并实行。
在这里我们利用了 方法将进度条下拉到最底部,然后弹出 alert 提示框。
7. 获取节点信息
既然我们可以通过属性获取网页源代码,自然会有方法可以获取到更多详细的信息。
获取属性 `get_attribute()`
输出为
获取文本值
获取节点内的文本信息。相当于 的 get_text() 方法, 的 text() 方法。
我们通过打开 url 的页面,然后获取提问按钮的节点,再将其文本值打印出来。
获取其他的一些属性
节点 id:
节点在页面中的相对位置:
标签名称:
节点大小:
接上
输出为
8. 延时等待
一般打开一个网页都需要一定的时间,网页源代码也是分批呈现出来,如果直接打开 url 就直接获取网页源代码,就容易缺失内容。所以,我们需要一定的延时等待时间来保证完整性。
等待的方式分两种,一种是隐式等待,显式等待
隐式等待
如果使用隐式等待的话,如果 Selenium 没有在 Dom 中找到节点,将继续等待,超出设定时间后则抛出找不到节点的异常。
就是当查找节点而节点没有立即出现的时候,隐式等待将等待一段时间再查找 DOM。
用的是方法。
显式等待
隐式等待指示规定了一个固定时间,页面的加载时间受到网络条件影响。
所以可以用显式等待。
用对象,指定好最长等待时间,调用它的方法,传入要等待条件
我们这样做的效果是,在 10 秒内如果 ID 为 q 的节点加载完成,就返回该节点,如果超过 10 秒还没有加载出来,那就抛出异常。
等待条件可以用多种,有兴趣了解可参考官方文档:
9. 前进后退
可以用和方法。
当运行完这串代码后,自然就能感受到这个函数的作用了。
10.Cookies
Selenium 可方便对 Cookies 进行操作,例如获取,添加,删除 Cookies 等等。
通过,,方法。
11. 选项卡管理
可以通过传递 JavaScript 传递,打开一个新选项卡。
再通过,切换选项卡。
百度 -> 新选项卡 -> 切换到第二个新选项卡 -> 淘宝 -> 切换到第一个 -> 打开知乎
12. 异常处理
异常处理程序是十分重要的。
通过语句来捕获各种异常。
因此,有了 Selenium,处理 Javascript 不再是难事!
已经学习了一段时间python,对这语言有了基础的语言,接下来我应该要做更多的实战,让自己可以真正实践起来,我已经努力转战真正的实战项目做了!!
-not end-
python 学习笔记
领取专属 10元无门槛券
私享最新 技术干货