一般来说有两种情况:一种情况是在请求到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限制
懂得了这些,我们再来看看后台面对的问题
问题一:交互问题
不合点
- 爬虫一般为主动化法度榜样,无需用用户交互,而浏览器不是
- 运行场景不合;浏览器运行在客户端,而爬虫一般都跑在办事端
- 才能不合;浏览器包含衬着引擎、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 邮箱。
推荐阅读
Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践 咨询机构IDC近日宣布《IDC MarketScape:中国政务云市场厂商评估,2017》。申报显示,经由近十年的成长,>>>详细阅读
本文标题:一篇了解爬虫技术方方面面
地址:http://www.17bianji.com/lsqh/39047.html
1/2 1