2018年我涉猎极深的技术——爬虫技术

        爬虫技术是我今年涉猎极深的技术,今年很多时间都在实践该技术(也就是单纯挂机罢了)。在我看来,爬虫是一个比较实用的工具,它可以采集数据,可以定向提取信息,整合下载后可以进行定向资源获取。当然,使用爬虫让我有一种作弊的感觉,毕竟是盗用别人的数据来丰富自己的信息。

       爬虫从我本身的理解,从技术上可以分为前端爬虫与后台爬虫。两种爬虫实现技术不同,实现策略也不同。前端爬虫一般使用JS或python进行处理,实现策略是模拟人的行为。前端爬虫一般是依据人的行为来定制脚本(甚至录制脚本),利用脚本的重复执行来解析网站信息,实现爬取的效果。这种前端爬虫的优点是容易理解、易上手,缺点是无法越界,由于前端爬虫是模拟人的行为,所以,前端要获取的数据或者要实现的功能必须是页面中有触发点的功能,如果功能没有触发点,前端爬虫就会很无力。例如:我们要下载在线播放的视频,但是视频在页面上本身没有下载功能,那么如果只是基于前端处理,是绝对无法实现该动作的。与前端爬虫相对的后端爬虫,处理技术一般使用C++、Java等后台编程语言,后端爬虫的实现策略是页面结构分析。后台爬虫会将页面整个提取到后台后,进行整体结构解析,提取需要的信息。相对于前端爬虫,后台爬虫需要有一定网页基础与网络基础,处理模式上可能需要更多的逻辑处理。后台爬虫的优点是信息的透明性,这点让可以获取的数据可以随心所欲的解析与使用,但是后台爬虫的缺点也很明显,无法处理过于复杂的JS处理页面。比如,某个页面的链接a,我们要获取跳转地址,如果跳转地址使用的href属性,那么我们可以解析结构获取,如果使用的是js绑定方法,那么就麻烦了很多,如果这部分方法被封入某个引入的JS文件或者设置了js变量,那么要解析就更加麻烦。能够将前端爬虫与后台爬虫结合使用的人是很厉害的,我目前到不了这个程度,这个阶段我只是使用过后台爬虫。

       后台爬虫我是使用的底层框架是htmlunit与jsoup,其中htmlunit实现了浏览器的功能。Jsoup实现了页面解析的功能。这里可能大家会有疑问,直接使用httpclient之类的工具获取页面信息不就可以了吗,为什么还要使用htmlunit?实际上,现在很多html页面都使用了延迟加载技术,在第一次访问页面的时候只加载结构,之后通过js加载数据,渲染页面,如果只是使用httpclient,碰到这种情况,就只能获取页面结构,而htmlunit内部模拟了一个浏览器机制,也就是说,可以支持js与css的处理,它可以设置一个响应时间,在响应时间内等待页面响应完全,这样就可以获取到完整的页面内容。Jsoup框架实现了类似jquery的方式定位元素的方法,对于熟悉前端的人来说,可以快速定位页面元素,解析数据,非常方便,有了这两个框架,基本的爬虫处理就可以进行。

       在这段时间的爬虫处理中,我总结了一个基本的爬虫处理模型,这个模型在很多网站中都适用。模型的结构为入口-分页-明细 三层结构。在很多网站中,都有数据列表页面,展示的信息采用分页+标签(或类别)的方式,而列表中的每条数据都会有一个明细页面,从这点来看,如果我需要网站的全部数据的话,这里就是网站的一个最佳的提取入口,我可以定制两种爬虫,一种爬取分页的结构,一种爬取明细页面的结构,爬取分页结构的爬虫可以爬取页面中所有明细页面的连接,然后每个连接构造各自的明细爬虫进行爬取,这样如果在入口中实现分页的循环调用,就可以一口气爬取网站的全部数据,这个模型在目前的使用中,非常好用,适用性很广。

       在很多情况下,我们不可能一直开启爬虫,我们一旦关机,爬虫肯定会停止,那么当我们下次再次开启的时候,我们不能录入重复数据,可以的话,我们也希望可以从上次停止的位置继续向下爬取,这也就是断点续传的问题了。断点续传是一个比较麻烦的问题,要完全自动化难度比较大,所以这次,我使用的是半自动化的处理方式,首先,将已经解析过的页面地址记录进明细信息中存储数据库,在解析明细页面的时候,首先查询该页面是否解析过,解析过则直接跳过。在入口中提供解析固定范围页面的功能,在停止爬虫前,手动记录停止页面索引,写入程序,控制下次爬虫起始位置,这样,就基本解决了断点续传问题。

       关于下载整合的问题在之前已经说过,这里就不做过多说明了。下面来介绍一下反爬策略。所谓道高一尺,魔高一丈,很多网站为了防止被爬取,采用了各种非常恶心的反爬策略。这些策略中有些涉及安全,有些涉及风控,有些涉及业务。目前我简单提一下我遇到的策略。

       策略1:登录验证。这种在很多论坛与后台管理系统中非常常见,本质上,在浏览器访问的时候服务器会验证session中是否包含用户信息,无用户信息则必须登录,平台中也支持这种机制。实际上,这种机制很容易破解,服务器中的session是依赖浏览器送上来的cookie进行查找的,那么,只要我先登录一次,然后,将本次的cookie信息添加到爬虫请求头信息中即可,虽然每次登录都要调整,但是却并不麻烦。

       策略2:IP封杀。这是一个比较麻烦的策略,很多互联网上的网站都有这种策略,当同一个IP在固定时间段内访问次数过多,则对该IP进行封杀,禁止该IP继续访问网站。由于IP封杀会封杀运营商提供的IP信息,也就是说,一旦IP封杀,要彻底解决,只能找运营商换IP,这个是非常头疼的。当然,对于这种情况,还有其他策略,网上有很多IP代理工具,可以利用其他代理IP访问网络,不过需要花钱,一般包月15左右,可以在上千IP间随意调换,比较便宜,很多封IP之后采用的策略都是这种。

       策略3:有偿访问。这种策略是引入固定规则,例如:浏览帖子1小时只能浏览10次,下载资源需要积分等策略,这种几乎无解,触非你可以破解网站的运作机制,否则…..

       策略4;来源验证。这个策略在很多访问页面与下载功能中经常使用,在网络请求中,通过页面触发通讯的时候,通讯包中会包含一个Refer字段,该字段自动设置为当前页面地址,很多网站防止爬取的时候会验证该字段信息是否准确,解决的策略其实非常简单,只是需要在需要的时候添加该字段即可。需要注意的是,这种策略在漫画类网站和PHP下载类的网站被广泛使用。

       策略5:多次跳转。这种策略下,网站往往会在通讯中设置一个字段作为跳转字段,在调用该地址后,自动根据跳转字段,跳转其他地址,层数多的情况,可能会涉及多次跳转。遇到这种情况,只能根据实际情况重新定义地址,由于字段名称的不确定性,所以在处理前往往需要在网络中先拦截包查看分析后再处理(不过,就目前遇到的情况,大部分时候该字段名称为Location)。

       策略6:无限循环。这种情况出现在几种网站爬取中,说实话,原因不明,在访问的过程中出现了程序死循环,内存不断上升,无响应结果的情况。推测可能是在js中对某些因素有判断条件,依据条件情况判断是否进入死循环(有可能是页面反复调用的死循环)。

       策略7:不明结构。有些HTML元素是无法解析结构的,例如Canvas,如果一个HTML全部由Canvas绘制,那么我们根本没办法看到页面结构,这种更不用提解析了。这种情况后台爬虫是无法处理的,如果是前端爬虫,可以获取页面js对象,从对象结构考虑解决策略。

       策略8:随机变化。调用同一页面地址,页面内部结构会随机发生变化。这种情况在解析广播剧页面的时候出现过,页面随机发生过4种不同的变化。这种情况最简单的处理策略是穷举,只针对固定的一种结构进行处理,当不是该种结构的时候,便重新调用页面地址。

       上面的8种情况是目前遇到的反爬处理,说实话,很恶心,很多问题都花费了很长时间才解决,这里汇总一下,也算是一点经验了。


  最后,非常感谢耐心读完这篇日志的人。在新的一年里,在新的每一天,请让我们不断挑战,即使无人喝彩,也请为自己加冕!!!!!!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容

  • 33款可用来抓数据的开源爬虫软件工具 要玩大数据,没有数据怎么玩?这里推荐一些33款开源爬虫软件给大家。 爬虫,即...
    visiontry阅读 7,318评论 1 99
  • HTTP基本原理 URI、URL、URN(Uninform Resource) URI(Identifier):统...
    GHope阅读 2,076评论 2 26
  • 2018年11月4日星期日 本周IPO暂停,这周次新是热点。但要注意前排一字,后排不买炸板。 本周重点是次新。 手...
    龙之想阅读 89评论 0 0
  • 她一个人要怎么坚持,会觉得疼啊。连吃饭睡觉都没办法缓解的疼啊。 下午在班群里知道系里的谢老师出车祸,但是我能想到最...
    他一定很爱你z阅读 201评论 0 0
  • 著名教育家陶行之先生曾对教师说过一句名言:“你的教鞭下有瓦特,你的冷眼里有牛顿,你的讥笑中有爱迪生。”教育是一种爱...
    大名102闫新闪阅读 137评论 0 0