一篇文章了解爬虫技术现况 岂安高调分享-

优采云 发布时间: 2020-07-04 08:01

  

  那是因为,其实是因为执行js代码动态添加到标签上面的,所以这个时侯内容在js代码上面的,而js的执行是在浏览器端的操作,所以用程序去恳求网页地址的时侯,得到的response是网页代码和js的代码,所以自己在浏览器端能看到内容,解析时因为js未执行,肯定找到指定HTML标签下内容肯定为空,如百度的主页就是这些,这个时侯的处理办法,一般来讲主要是要找到包含内容的js代码串,然后通过正则表达式获得相应的内容,而不是解析HTML标签。B另一种情况是在和用户交互时,JavaScript可能会动态生成一些dom,如点击某个按键弹了一个对话框等;对于这些情况,一般这种内容都是一些用户提示相关的内容,没哪些价值,如果确实须要,可以剖析一下js执行逻辑,但这样的情况极少。Ajax/Fetch异步恳求

  这种情况是现今太常见的,尤其是在内容以分页方式显示在网页上,并且页面无刷新,或者是对网页进行某个交互操作后,得到内容。对于这些页面,分析的时侯我们要跟踪所有的恳求,观察数据究竟是在哪一步加载进来的。然后当我们找到核心的异步恳求的时侯,就只需抓取这个异步恳求就可以了,如果原始网页没有任何有用信息,也没必要去抓取原始网页了。 爬虫技术的现况 01语言

  理论上来说,任何支持网路通讯的语言都是可以写爬虫的,爬虫本身其实语言关系不大,但是,总有相对顺手、简单的。目前来说,大多数爬虫是用后台脚本类语言写的,其中python无疑是用的最多最广的,并且页诞生了好多优秀的库和框架,如scrapy、BeautifulSoup 、pyquery、Mechanize等。但是一般来说,搜索引擎的爬虫对爬虫的效率要求更高,会选用c++、java、go(适合高并发),详情排名前50的开源Web爬虫用于数据挖掘。我在学院时代就用c++实现了一个多线程的框架,但是发觉和python实现的爬虫效率提高并不显著nsf爬虫软件,原因是,对于简单爬虫nsf爬虫软件,瓶颈在于数据剖析及提取,而网路效率和语言关系并不大。值得一提的是,在近几年node发展特别快, 使得javascript遍地开花,有些人也开始尝试用node做爬虫,但是,这也许和其它后台脚本语言没哪些区别,也不如python简单, 因为你仍然不能在node里发起ajax恳求,不能执行原网页的dom。因为node的javascript执行环境和浏览器的执行环境并不相同。那么,难道就真的不能象在浏览器中一样用js写爬虫,用jquery提取内容吗?想法太大胆,我们姑且搁置。 02运行环境

  爬虫本身不分辨究竟是运行在windows还是Linux,又或是OSX,但从业务角度讲,我们把运行在服务端(后台)的,称之为后台爬虫。而如今,几乎所有的爬虫都是后台爬虫。后

  台爬虫的三大问题

  后台爬虫在大行其道的时侯,也有着些许棘手的、到目前也没有哪些好的解决方案问题,而归根结底,这些问题的根本缘由是因为后台爬虫的先天不足造成,在即将讨论之前,我们先思索一个问题,“爬虫和浏览器有哪些优缺?” 01相同点

  本质上都是通过http/https合同恳求互联网数据 02不同点

  爬虫通常为自动化程序,无需用用户交互,而浏览器不是;运行场景不同;浏览器运行在客户端,而爬虫通常都跑在服务端;能力不同;浏览器包含渲染引擎、javascript虚拟机,而爬虫通常都不具备这三者。了解了这种,我们再来瞧瞧后台面临的问题:01问题一:交互问题

  有些网页常常须要和用户进行一些交互,进而能够走到下一步,比如输入一个验证码,拖动一个滑块,选几个汉字。网站之所以如此做,很多时侯都是为了验证访问者究竟是人还是机器。 而爬虫程序遇见这些情况很难处理,传统的简单图片验证码可以通过图形处理算法读出内容,但是随着各种各样,花样百出,人神共愤的、变态的验证码越来越多(尤其是买火车票时,分分钟都想爆脏话),这个问题就越来越严重。

  02问题二:Javascript 解析问题

  如前文所述,javascript可以动态生成dom。目前大多数网页属于动态网页(内容由javascript动态填充),尤其是在移动端,SPA/PWA应用越来越流行,网页中大多数有用的数据都是通过ajax/fetch动态获取后之后再由js填充到网页dom树中,单纯的html静态页面中有用的数据甚少。 目前主要应对的方案就是对于js ajax/fetch恳求直接恳求ajax/fetch的url ,但是还有一些ajax的恳求参数会依赖一段javascript动态生成,比如一个恳求签名,再例如用户登录时对密码的加密等等,如果一昧的去用后台脚本去干javascript原本做的事,这就要清楚的理解原网页代码逻辑,而这除了特别麻烦,而且会使你的爬取代码异常庞大臃肿。 但是,更致命的是,有些javascript可以做的事爬虫程序是很难甚至是不能模仿的,比如有些网站使用拖动滑块到某个位置的验证码机制,这就很难再爬虫中去模仿。 其实,总结一些,这些弊病归根结底,是因为爬虫程序并非是浏览器,没有javascript解析引擎所致。针对这个问题,目前主要的应对策略就是在爬虫中引入Javascript 引擎,如PhantomJS,但是又有着显著的弊病,如服务器同时有多个爬取任务时,资源占用很大。

  还有就是,这些无窗口的javascript引擎好多时侯使用上去并不能象在浏览器环境中一样,页面内部发生跳转时,会导致流程很难控制。03问题三:IP限制

  这是目前对后台爬虫中最致命的。网站的防火墙会对某个固定ip在某段时间内恳求的次数做限制,如果没有超过上线则正常返回数据,超过了,则拒绝恳求,如qq邮箱。 值得说明的是,ip限制有时并非是专门为了针对爬虫的,而大多数时侯是出于网站安全缘由针对DOS攻击的防御举措。后台爬取时机器和ip有限,很容易达到上线而造成恳求被拒绝。目前主要的应对方案是使用代理,这样一来ip的数目都会多一些,但代理ip仍然有限,对于这个问题,根本不可能彻底解决。 作者:lazydu

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线