1国内外背景环境
自从进入大数据时代以来,企业之间的竞争已从传
统的产品竞争转变成了核心数据之间的竞争。企业拥有数据就拥有了主导地位,因为数据可以创造一切和还原一切,创造更加前沿的科技产品,很多企业把它当成公司的战略目标。企业核心数据的保护是非常重要的一部分,网络安全工程师负责企业的数据保护,对网站信息进行多层防盗保护,伴随着而来的是网络爬虫工程师爬取企业数据的难度增加。目前,可以看到很多网站都使用了高强度的反爬虫手段,防止数据被非法采集,大部分网站实行登录验证浏览数据,比如淘宝网、智联招聘、天眼查等这些拥有大量数据的知名网站。这些措施虽然让用户浏览网站多增加了流程,对公司来说大大提高了数据的安全性,避免公司竞争力下降,让直接获取数据的方式大大减少。由于在登录界面运用大量的JS 防盗链反爬措施和极其复杂的加密算法,使得需要新的方式来获取数据。通常选取Selenium 作为突破手段。
2Python 及网络爬虫背景
Python 是一种面向对象的解释型计算机程序设计语
言,由荷兰人吉多·范罗苏姆(Guido van Rossum)于1989年发明,第一个公开发行版发行于1991年[1]。目前Python 的最新发行版是Python 3.7。我们选用脚本编程语言Python 作为开发语言,源于Python 强大的
内置库、代码简洁、跨平台及高度的可拓展性,并配有专门的框架供开发使用,其中最著名的是Scrapy 框架,为数据采集提供良好的环境。同时,它是最接近人工智能
的语言,也是作为初学者学习网络爬虫最好的语言。当前,由于Python 的强大性以及方便性,搭配比较好用的Pycharm 工具软件写的代码具有非常高效性,能够通过内置界面及时观察我们的爬取运行状态,在数据采集完毕后进行入库处理可建立可视化界面。
网络爬虫,又被称为网页蜘蛛、网络机器人。是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本[2]。运用不同的爬虫算法,爬虫运行的效率不同,爬取的结果也不同。其中按照实现的技术和结构可以分为通用爬虫、聚焦网络爬虫、增量式网络爬虫、深层网
络爬虫等类型[3]。简单介绍通用网络爬虫和聚焦网络爬虫概况。
2.1通用网络爬虫
又名全网爬虫,爬取的目标资源在整个互联网上,
爬取的数据巨大,爬取范围巨大,所以信息量巨大,常用于大型的搜索引擎中,价值非常高。它主要由初始URL 集合、URL 队列、页面爬行模块、页面分析模块、页面数据库、链接过滤模块等构成[3]。它是首先获取初始的URL;然后根据初始的URL 爬取页面去到新的
URL;再将新的URL 放入URL 队列之中;再从URL 队列中读取新的URL,并根据新的URL 爬取网页,同时从新网页中获取新URL,不断地重复这个过程;最后满足爬虫程序设置的停止条件时,就停止爬取。
作者简介:樊涛(1995-),男,本科,研究方向:Python 爬虫开发。
收稿日期:2019-06-12
基于Selenium 的网络爬虫分析与实现
樊涛,赵征,刘敏娟
(郑州升达经贸管理学院信息工程学院,郑州451191)
摘
要:随着大数据时代的普及,各行各业每天会产生大量的数据。掌握核心数据,就掌握了公司的命脉,因此数据占极其重要的地位。如何去采集这些数据,并有效提取其中重要价值的数据并去分析是大数据时代最重要的部分。在网络爬虫中,可以利用各种规则爬取这些数据,但是一些动态网站中往往出现复杂的JavaScript 加密算法反爬虫的安全措施,导致无法正常获取页面数据。通过Python 操作Selenium
登录网页,模拟人工操作浏览器,绕过这些反爬虫障碍,从而去获取页面的信息,完成信息的正常获取,大大节省了分析代码的时间。
关键词:大数据;网络爬虫;JavaScript 脚本语言;反爬虫;Python 语言;Selenium
框架
2.2聚焦爬虫
针对某特定内容写的爬虫程序,即面向主题爬虫,
面向需求爬虫。相比于通用爬虫,聚焦爬虫更侧重方向性,并增加3个步骤,即增加目标的定义、无关链接的过滤、下一步要爬取的URL 地址的选取[3]等,通常写的爬虫程序基本上也都是聚焦爬虫。
3Selenium 研究背景
Selenium,即浏览器自动化测试框架,经常用于网
络爬虫的模拟人工操作自动化中,是基于网络爬虫上研究的一项技术。它支持的浏览器包括IE 浏览器、Google Chrome 浏览器、Safari 浏览器、Opera 浏览器等[4],Sele⁃nium 都是支持浏览器驱动,可以对浏览器的对象元素进行控制。同时,Selenium 支持多种语言开发,比如Java、C、Ruby,还有Python,通常使用Python+Seleni⁃
um+Chrome/Firefox 的组合来解决现有的网络爬虫登录绕
过JS 和滑块问题。目前Firefox 和Chrome 已经完全替代了之前的PhantomJS 无界面浏览器,能完成所有的操作又节省内存。这样Chrome/Firefox 负责渲染解析JavaScript,Selenium 负责驱动浏览器和Python 进行对接,Python 负责做后期的处理,三者构成一个完成的爬虫结构。
这样的结构搭配,可以实现很多的操作,比如点击链接、填写表单、鼠标点击、鼠标拖拽等,为爬虫操作带来极大的方便。能解决一系列人工操作的问题,为网络爬虫通过验证登录信息提供很大的方便。模拟浏览器正常流程如图1所示。
4Selenium 相关API
安装Selenium 命令:pip install selenium (支持
Python2或者3)。安装核心API 后可以进行多种操作,比如表单操作、鼠标操作、浏览器窗口操作、多表单操作、多窗口切换操作等,为实现模拟操作环境提供接口。下面简单介绍Selenium 的核心驱动模块以及定位方式。
4.1核心驱动模块
driver =selenium.webdriver.Chrome()4.2访问网址方式及退出浏览器(“www.baidu”)#访问百度url:
driver.quit()#退出浏览器
4.3元素定位
通过特定的模块方法,定位到需要的页面元素。在
Python 网络爬虫里面,可以通过BeautifulSoup 和Xpath 等方法进行定位页面元素。而Selenium 提供8种方法进行网页元素定位,这里只介绍比较常用的3种。注意
的是,在定位过程中,如果其中一种方法无法定位成功,多测试几种方法,保证能够准确定位所需要的元素对象。
4.3.1find_element_by_id (‘’)
根据标签编号查询标签对象:
<div id="box">...</div>
driver.find_by_element_by_id("box")4.3.2find_elements_by_xpath (‘//input ’)
根据Xpath 语法查询指定的标签
driver.find_elements_by_xpath('//input[id="kw"]')4.3.3find_elements_by_css_seletor (‘#box div ’)
python爬虫开发根据标签的样式名称查询得到标签:
driver.find_elements_by_css_selector("#box >div")4.4网页延时的显示等待和隐示等待
由于网站安全性的提高,越来越多的网站网页运用
了Ajax 技术,这会不确定定位的元素什么时候加载出来,而爬虫程序运行非常快,会造成正常的爬虫程序无法定位元素报错,影响正常的结果判断。Selenium 里面可以设置设置两种网页等待方式,即显式等待和隐式等待,来避免网络爬虫的结果正确性和程序流畅性。显式等待指定某个条件,对其设置最长等待时间。如果在设置的这个时间里面程序没有到目标元素,那么便会抛出异常,不会让爬虫程序就此停止。而隐形等待就是简单地设置一个等待时间,单位为秒。
5使用Selenium 反反爬虫研究与实现
目标url:i.qq/?rd=1
编程环境:Python2.7+Selenium3+Chrome+webdriver 首先引入Selenium 自动化测试模块和Python 的
time 时间模块,为了启动webdriver 和对关键步骤时间图1模拟浏览器进行请求数据
浏览器
浏览器请求服务器
服务器响应数据
服务器
伪装浏览器
Python+Selenium+Chrome/Firefox
服务器响应数据
浏览器请求服务器
(下转第170页)
进行控制,避免采集数据与浏览器请求响应的速度没有达到一致,造成数据丢失;然后定位标签元素,模拟点击事件,进入登录界面;再在登录表单中填写数据,获取登录的用户输入框、密码输入框;再开始登录,模拟点击操作登录;成功进入登录QQ空间界面进行并进行采集数据,以utf-8的编码格式进行保存数据;最后退出浏览器,完成整个数据采集操作。
在这个过程中,发现一个问题,按照流程却无法轻松进行采集数据,甚至连登录界面都进不去。通过调整代码完成操作,主要是增加了一个操作,成功就到定位,后面的都能顺利操作。具体操作:
<("i.qq/?rd=1")
time.sleep(1)
driver.switch_to_frame('login_frame')
driver.find_element_by_xpath('//*[@id="switch⁃er_plogin"]').click()
实际上,这里面是有一个iframe嵌套,需要进行切换iframe里面的页面去。iframe即内联框架,QQ空间运用它将程序与页面分离,在iframe外面用来加载广告,里面加载重要的内容,额外加了一层JS防盗链。在国内,比如淘宝、百度等知名网站也都使用了此技术。QQ空间中的iframe网页结构如下:
…
<!--<iframeid="login_frame"height="100%"…>< /iframe>-->
<script type="text/javascript">…</script>
…6结语
数据的重要性不言而喻,反爬虫操作可以让数据不能被非法用户直接爬取,但是服务器的数据,只要是
正常用户可以访问的,而且通过请求可以提取到的数据,基本上都对数据进行了高度的反爬虫操作。常见的反爬虫措施,有修改请求头、修改爬虫时间间隔、使用代理等[5],而Selenium相当于避免了这些操作,但是在效率上肯定要低于爬虫程序的。
爬取数据的时候会有两种情况,如果条件充足,不计成本的情况下,可以通过反反爬虫操作,破解对方服务器中的反爬虫措施,完成数据的采集。如果条件不足,直接通过Selenium+Chrome/Firefox的方式向服务器发起正常请求获取数据,基本上可以躲避大部分的检测,而这个技术的实现就是Selenium。
参考文献
[1]李宁.Python从菜鸟到高手[M].北京:清华大学
出版社,2018:3-20.
[2]范传辉.Python爬虫开发与项目实战[M].机械工
业出版社,2017:69-72.
[3]韦玮.精通Python网络爬虫[M].机械工业出版
社,2017:23-34.
[4][印度]冈迪察.U(Unmesh,Gundecha,).金鑫,
熊志男,译.Selenium自动化测试—基于Python语言[M].人民邮电出版社,2018:15-28. [5]唐松,陈智铨.Python网络爬虫从入门到实践[M].
机械工业出版社,2017:132-140.
N J,et al.The security of practical quantum key distri⁃bution[J].Review of Modern Physics,2009,81(3): 1301-1350.
[3]王熠,张焰,刘菲,等.量子通信应用于核心金融
信息领域的探讨[J].财经界(学术版),2016, (02):6-7.
[4]童晓阳,王晓茹.乌克兰停电事件引起的网络攻击
与电网信息安全防范思考[J].电力系统自动化, 2016,40(07):144-148.
[5]高德荃,陈智雨,王栋,等.面向电网应用的量子
保密通信系统VPN实测分析[J].电力信息与通信
技术,2017,15(10):38-42.
[6]杨晓朋,陈海涛,梅力宸,等.量子密钥分发技术
在智能变电站中的研究[J].电信科学,2018,34 (10):163-169.
[7]肖磊,吕磊,杨雪,等.量子通信在电力调度系统应
用分析[J].电信科学,2017,33(S1):202-205.
[8]李妮,陈璞,李梦琳,夏行宇.电力IMS行政交换
网新型安全防护体系及技术研究[J].计算机与网络,2019,45(11):62-65.
(上接第156页)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论