续上一章 scrapy中的反反爬虫技术
使用selenium模块进行动态爬取
有一些网站的内容是通过js动态加载的,例如使用ajax请求,这样动态加载的内容无法出现在源代码中,我们就无法获取到这部分内容。有时候,这是因为业务逻辑的需求要使用 js 动态加载,但是有时候也是因为防止爬虫而使用 js 加载。
selenium的原理是模仿浏览器访问页面,将动态加载的内容也渲染到页面时候,再获取渲染好的页面代码。从而解决这个问题。
selenium 动态抓取
selenium的基本原理是操作浏览器,selenium支持ie,火狐,谷歌等浏览器,所以对于每一种浏览器,他都有一个driver驱动。
selenium 的安装:
首先在Python安装:
pip install selenium
然后你还要下载相应的浏览器,比如谷歌
那么你要下载谷歌浏览器
同时还要下载谷歌浏览器的driver,没有这个driver就无法再Python中用selenium操作谷歌浏览器。
这个driver是一个exe文件
先百度搜索selenium python api
它里面有selenimu的文档
再在文档找chrome webdriver
他有个链接:http://chromedriver.storage.googleapis.com/index.html
用来下载谷歌浏览器的driver(驱动),这个driver的作用是让selenium控制谷歌浏览器
我们要先在自己的电脑上找到谷歌浏览器的所在安装目录查看版本,再下载相应版本的driver
当你已经下载了这个driver,假如在d盘的D:/chromedriver.exe
这是最简单的一个例子,在运行这段代码的时候,浏览器会自己弹出来,当运行到browser.quit()的时候,浏览器会关闭。
接下来介绍selenium的其他简单用法:
selenium的输入和点击操作:
接下来,使用selenimu登陆知乎
输入用send_keys()方法
点击用click()方法
PS:一定要先调用get方法才可以用find_element_by_xpath来查找元素
有时候使用selenium获取元素是会报错说找不到某元素,这可能是因为页面还会在加载。
此时我们可以在get方法和find_elementby_xpath之间用一个
time.sleep(2)
睡两秒先。
接下来我们介绍一下如何下滑鼠标:
上面的意思是,执行js语句让他下拉鼠标。
设置chromdriver不加载图片:
这是一种很固定的写法
不加载图片可以在爬取的时候加速加载页面
设置了不加载图片,但是页面内容中的img标签并没有消失,所以你依旧可以获取到img中的src
使用selenimu获取cookie信息并存到文件中:
以登陆tswq8为例子
怎么在selenium请求的时候加上header:
要使用add_argument()
将selenium集成到scrapy中:
使用中间件:
如果使用selenium动态获取页面,那么多线程的爬虫会变成单线程的,降低效率。
在Linux中使用selenium的时候,我们要对selenium加几条配置,否则很可能会出现报错