作家
登录

一篇了解爬虫技术方方面面

作者: 来源: 2017-11-20 17:08:40 阅读 我要评论

  • CSS选择器
  • XPATH(这个值灯揭捉?习一下)
  • 正则表达式或通俗字符串查找
  • JavaScript代码加载内容
  • 一般来说有两种情况:一种情况是在请求到html文档瓯,网页的数据在js代铝闼楝而并非在html标签中,之所以我们看到的网页是正常的,那是因为,其实是因为履行js代码动态添加到标签琅绫擎的。

    所以这个时刻内容在js代率攀琅绫擎的,而js的履行是在浏览器端的操作,所以用法度榜样去请求网页地址的时刻,获得的response是网页代码和js的代码,所以本身在浏览器端能看到内容,解析时因为js未履行,肯定找到指定HTML标签下内容肯定为空,如百度的主页就是这种,这个时刻的处理办法,一般来讲主如果要找到包含内容的js代码串,然后经由过程正则表达式获得响应的内容,而不是解析HTML标签。

    另一种情况是在和用户交互时,JavaScript可能会动态生成一些dom,如点击某个按钮弹了一个对话框等;对于这种情况,一般这些内容都是一些用户提示相干的内容,没什么价值,如不雅确切须要,可以分析一下js履行逻辑,但如许的情况很少。

    • Ajax/Fetch异步请求

    这种情况是如今很常见的,尤其是在内容以分页情势显示在网页上,并且页面无刷新,或者是对网页进行某个交互操作后,获得内容。对于这种页面,分析的时刻我们要跟踪所有的请求,不雅察数据到底是在哪一步加载进来的。然后当我们找到核心的异步请求的时刻,就只需抓取这个异步请求就可以了,如不雅原始网页没有任何有效信息,也没须要去抓取原始网页了。

    爬虫技巧的近况

    说话

    理论上来说,任何支撑收集通信的说话都是可以写爬虫的,爬虫本身固然说话关系不大年夜,然则,总有相对顺手、简单的。今朝来说,大年夜多半爬虫是用后台脚本类说话写的,个中python无疑是用的最多最广的,并且页出生了很多优良的库和框架,如scrapy、BeautifulSoup 、pyquery、Mechanize等。

    然则一般来说,搜刮引擎的爬虫对爬虫的效力请求更高,会选用c++、java、go(合适高并发),我在大年夜学时代就用c++实现了一个多线程的框架,然则发明和python实现的爬虫效力晋升并不明显,原因是,对于简单爬虫,瓶颈在于数据分析及提取,而收集效力和说话关系并不大年夜。

    值得一提的是,在近几年node成长异常快, 使得javascript遍地开花,有些人也开端测验测验用node做爬虫,然则,这其实和其它后台脚本说话没什么差别,也不如 python简单, 因为你依旧不克不及在node 里提议ajax请求,不克不及履行原网页的dom。

    因为node的javascript 履行情况和浏览器的履行情况并不雷同。那么,难道就真的不克不及像在浏览器一一样用js写爬虫,用jquery提取内容吗?

    以前我们常须要获取的内容重要来源竽暌冠网页html文档本身,也就是说,我们决定进行抓取的时刻,都是html中包含的内容,然则跟着这几年web技巧飞速的成长,动态网页越来越多,尤其是移动端,大年夜量的SPA应用,这些网站中大年夜量的应用了ajax技巧。

    运行情况

    爬虫本身不区分到底是运行在windows照样Linux,又或是OSX,但大年夜营业角度讲,我妹浇樗行在办事端(后台)的,称之为后台爬虫。而如今,几乎所有的爬虫都是后台爬虫。

    后台爬虫的三大年夜问题

    后台爬虫在大年夜行其道的时刻,也有着些许棘手的、到今朝也没有什么好的解决筹划问题,而归根结底,这些问题的根来源基本因是因为后台爬虫的先天不足导致,在正式评论辩论之前,我们先思虑一个问题,“爬虫和浏览器有什么异同?”。

    雷同点

    这种情况是最轻易解决的,一般来讲根本上是静态网页已经写逝世的内容,或者动态网页,采取模板衬着,浏览器获取到HTML的时刻已经是包含所有的关键信息,所以直接在网页上看到的内容都可以经由过程特定的HTML标签获得。

    本质上都是经由过程http/https协定请求互联网数据

    问题三:IP限制

    懂得了这些,我们再来看看后台面对的问题

    问题一:交互问题

    不合点

    1. 爬虫一般为主动化法度榜样,无需用用户交互,而浏览器不是
    2. 运行场景不合;浏览器运行在客户端,而爬虫一般都跑在办事端
    3. 才能不合;浏览器包含衬着引擎、javascript虚拟机,而爬虫一般都不具备这两者。

    有些网页往往须要和用户进行一些交互,进而才能走到下一步,比如输入一个验证码,拖动一个滑块,选几个汉字。网站之所以这么做,很多时刻都是为了验证拜访者到底是人照样机械。

    问题二: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引擎很多时刻应用起来并不克不及像在浏览器情况一一样,页面内部产生跳转时,会导致流程很难控制。

    这是今朝对后台爬虫中最致命的。网站的防火墙会对某个固定ip在某段时光内请求的次数做限制,如不雅没有跨越上线则正常返回数据,跨越了,则拒绝请求,如qq 邮箱。


      推荐阅读

      IDC:我国65%的省市已建政务云平台

    Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践 咨询机构IDC近日宣布《IDC MarketScape:中国政务云市场厂商评估,2017》。申报显示,经由近十年的成长,>>>详细阅读


    本文标题:一篇了解爬虫技术方方面面

    地址:http://www.17bianji.com/lsqh/39047.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)