自动化爬虫框架selenium

selenium中文文档: https://selenium-python-zh.readthedocs.io/en/latest/getting-started.html




java爬虫开源框架有哪些 java爬虫框架使用排行_selenium官方中文文档


selenium可以模拟真实浏览器进行自动化测试的工具,支持多种浏览器,主要来解决js渲染的问题。使用selenium也可以很好的应对很多网站的反爬措施,一些网站的跳转url并不会直接放到审查元素中,而是通过js嵌入其他特征来阻止requests类爬虫,而使用selenium可以解决大部分的问题,但是selenium的效率整体来说要比requests低。

前言

今天的实战案例就是通过搜狗微信模块来爬取大学公众号最近文章,本次实战会使用requests+bs4和selenium两种方式来爬取。选择搜狗微信的原因在于搜狗微信的反爬做的比较好,请求时会在计算机中存储cookie以及一些sessionid和token等相关信息,想使用day2学的基础爬虫远远不够,需要了解一些web后端的相关知识,这就给初学者带来了很大的挑战。下边开始分别介绍两个例子。

案例

案例一:使用requests+bs4爬取最近文章

1.问题:首先使用普通爬虫尝试爬取网站(即day2所学的爬虫方法)


java爬虫开源框架有哪些 java爬虫框架使用排行_selenium官方中文文档_02


人机验证的页面源码


java爬虫开源框架有哪些 java爬虫框架使用排行_selenium 页面跳转_03

人机验证页面

2.分析:很明显这是一个反爬虫的页面,大概的原因是由于直接对链接发起请求的时候Referer是空的,Referer是标识从哪个网站跳转过来的,如果是空的很明显就被识别为爬虫,当然也有其他的原因,包括一些session或者cookie的原因,session生存周期是浏览器打开到关闭浏览器这个时间,同时也含有一些token和uuid等的拼接。

3.爬取目标分析:我们需要获的是最近文章的真实链接,即红色边框内的内容


java爬虫开源框架有哪些 java爬虫框架使用排行_selenium 页面跳转_04

审查元素中的链接

但是我们看一下爬取的源码发现,源码中的链接和审查元素中的链接是不一样的。


java爬虫开源框架有哪些 java爬虫框架使用排行_selenium官方中文文档_05


源码中的链接

4.目标:我们通过爬虫返回的数据是源代码中的内容,因此我们只要在源代码中找到类似审查元素的真实链接,任务就完成了。因此,这次使用requests+bs4爬取的难点就是在于寻找真实的链接。

在浏览器点击最近文章会先跳转到类似a中的href之后再跳转到推文的链接


java爬虫开源框架有哪些 java爬虫框架使用排行_java爬虫开源框架有哪些_06


推理大概是因为js的缘故,有类似点击事件的方法,回到源代码寻找之后发现果然存在一个方法重新构造了url


java爬虫开源框架有哪些 java爬虫框架使用排行_java爬虫开源框架有哪些_07

js中重构url的方法

这个重构的url与href中的url相比较多了一个&k和一个&h,k就是一个随机数字,而h是在href中获取一个字符。通过这个重构便可以得出真正的url。


java爬虫开源框架有哪些 java爬虫框架使用排行_java爬虫开源框架有哪些_08


构造真链接代码

之后再次发起请求测试


java爬虫开源框架有哪些 java爬虫框架使用排行_java爬虫开源框架有哪些_09


1处是构建的新的url;2处出现人机验证,估计是cookie出现了问题。

只要解决cookie的拼接就能完成,下期仔细介绍该部分的拼接问题。

案例二:使用selenium爬取最近文章

通过上述案例一可以看出使用requests+bs4来爬取该类网站非常的麻烦,难点主要在与url的构造和cookie等的拼接,而使用selenium就不会出现类似的问题,下边开始实例操作。

操作步骤就是打开网页,之后点击最近的推文,获取推文的源码。


java爬虫开源框架有哪些 java爬虫框架使用排行_selenium官方中文文档_10


通过selenium自动打开之后自动点击


java爬虫开源框架有哪些 java爬虫框架使用排行_selenium 页面跳转_11


定位点击


java爬虫开源框架有哪些 java爬虫框架使用排行_selenium 页面跳转_12


打开后的内容


java爬虫开源框架有哪些 java爬虫框架使用排行_selenium 页面跳转_13


推文的源代码

通过Xpath定位以及各种事件的触发就可以比较轻松地获取到数据。

总结

通过以上两个案例可以看出来对于反爬做的比较好的网站使用selenium要比普通的爬虫方便的多,普通爬虫涉及到js的加密以及各种数据url的拼接解决起来比较麻烦,而selenium可以非常轻松地绕过数据加密、网站验证等等。但是在爬取效率上selenium是远不如requests+bs4组合的,并且selenium也并非识别不出来,在自动化下的浏览器中会暴露webdriver的相关特征。因此遇到不同的网站使用不同的工具非常重要。对于效率要求不高、数据量不大、网站反爬做的比较好的网站可以使用selenium,对效率要求中等并且反爬措施做得一般的网站可以使用requests+bs4的方法,对于超大量数据可以使用scrapy框架,对于数据量巨大并且网站做反爬做的比较好的可以使用scrapy+selenium组合的方法来爬取,在之后的文章中将会介绍scrapy框架的使用方法。