朋友们,你在使用爬虫获取数据时,是否总会遇到动态页面,而不得不去分析get或post请求包信息、手动构造请求、配置大量的参数信息等,来获取动态加载后的数据?在此过程中,代码量变得庞大而臃肿,小伙伴儿们可谓是饱受困扰。

达康书记心里苦

何以解忧?

唯有“ISEC”!

本期邱老师

送大家一个动态页面应对利器:

selenium模块

助大家轻松解除困扰!

开心到飞起

Selenium原本是一个用于Web应用程序测试的工具,主要测试应用程序与浏览器的兼容性。而我们编写爬虫工程时,利用Selenium,就可以通过代码来控制浏览器、模拟真实用户的操作,将复杂的request请求完全交给浏览器来实现,代码本身只需关注页面解析和数据提取即可。

安仔课堂

1.操作必备

系统: Windows7 64 bit

模块:Py + Scrapy + Selenium

IDE :PyCharm

注意:在使用pip安装scrapy模块时,可能会因为PYPI服务器或网络不给力,在安装依赖库时出现timeout异常。此类问题,大家可尝试使用miniconda或者Anaconda来搭建Python集成开发的环境。Selenium除了安装相应的Python模块外,还需安装Chrome浏览器(本文操作,在Chrome浏览器上进行), 同时需下载对应的c, 并复制到系统盘内system32目录下。

2.操作步骤

本文以爬取知乎网站用户为例,来具体介绍 Scrapy + Selenium的使用方法。Selenium的作用主要在于开启一个浏览器加载网页并获取网页源代码数据,Scrapy使用Pipeline技术实现数据的存储。

1. 首先,新建一个scrapy工程,并在工程目录下的spiders文件夹下生成一个z脚本文件。

在ZhihuUserSpider爬虫类中进行一些简单的初始化设置,在parse() 函数中使用selenium模块启动一个浏览器,并加载知乎登录界面URL。

图1. 程序源代码

图2. 运行效果图

2. 成功驱动浏览器并加载页面后,需要定位账号、密码输入框,登录按钮在网页中的元素标签,并获取标签对应的句柄,从而操作句柄实现输入和点击功能。

图3. 页面源代码定位输入框和按钮

Webdriver提供了一系列元素定位方法, 使用较多的定位方式是通过id 、name 、xpath等,其中xpath比较灵活和强大,甚至支持布尔逻辑运算,建议大家可使用xpath进行元素定位,

图4. 定位输入框和按钮

(只需编写三行代码,可实现自动输入和点击······)

图5. 成功输入了账号和密码

图6. 登录成功

3. 使用Selenium模块成功实现登录功能后,我们来看看如果使用一般的爬虫思路来实现登录功能。通过分析登录过程中浏览器发生的请求信息,我们发现了实现登录操作的post请求信息:

图 7. 登录请求包

其中发现一个 “_xsrf” 参数,通过查看、分析登录界面的源代码,可以找到此参数所在位置:

图8. _xsrf参数位置

图9. 普通爬虫实现登录代码

相比使用Selenium模块,短短两三行代码就可以完成登录功能,而一般的爬虫需要增加近乎一倍的代码量。

4. 登录成功后,就可以开始爬取知乎上的用户信息。这里采用一个简单的爬取策略:选择一个关注者数量比较大的用户,然后每个关注者又有自己的关注列表,就这样一路爬取下去……这里 “Python爱好者”这个公众号为测试起点(URL为: )

图10. 实现跳转到特定页面

图11. 页面数据提取和跳转

5. 爬虫的页面跳转和数据提取就基本完成了。可以使用scrapy框架的pipeline技术实现数据的保存,这里就不细讲。运行一定时间后,查看数据库数据:

图12. 爬取的数据

Selenium爬虫的优势在于,只需要关注页面解析方面,对于如何动态请求、构造参数等均可忽略;而不足点则是它需要一个界面程序来运行浏览器,这对于windows系统用户不是什么问题,而Linux用户、尤其是没有界面程序的用户,会麻烦些,需要安装一个虚拟的桌面程序,将浏览器重定向显示到虚拟桌面中运行。

欢迎关注公众号ISEC安全e站

原来这么简单

1.《注册好的网站如何登录会员和密码》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《注册好的网站如何登录会员和密码》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/3244902.html