资讯专栏INFORMATION COLUMN

极简爬虫攻防战纪要

elliott_hu / 571人阅读

摘要:极简爬虫攻防战纪要爬虫是构建搜索引擎的基础负责抓取网页信息并对网页识别分类及过滤。爬虫方终于锁定了第一场战役的胜局由于断崖式技术的出现,反爬方在浏览器识别战役上望风披靡。经过反爬方的精心运作,逐渐有效削弱了敌方的攻势。

极简爬虫攻防战纪要
        爬虫是构建搜索引擎的基础, 负责抓取网页信息并对网页识别、分类及过滤。我们熟识的电商、搜索、新闻及各大门户网站都有强大的爬虫集群在每天高负荷运转: 京东 v.s. 淘宝 v.s. 拼多多相互之间"友好地"价格监控, 头条 v.s. 网易 v.s. 腾讯相互之间"和谐地"新闻消息聚合借鉴, Google / 百度 / 搜狗纷纷尽职地做网页信息的搜索优化以及各大研究机构卖力地进行数据集构建。
    然而, 各大网站是不太会对非搜索引擎的爬虫网开一面、任其予取予求的,毕竟无论什么时候,内容的价值都是显而易见的,所以就有了下面的爬虫方与反爬方的混战大戏~
    各个巨头之间的爬虫与反爬虫的攻防战斗没有一刻放松, 反爬网站要想制定反爬策略, 就要根据爬虫的特性针对性选择方案, 那么爬虫有什么特点? 脚本 + 自动化。因此反爬方的毁灭性大招无非两个:

非脚本访问 => 浏览器真实性检测

非自动化访问 => 访问用户真实性检测

惨烈的战斗即将打响! 非战斗人员迅速撤离!

Round One: Are you Really a Browser?
        浏览器由于其运行环境及运行原理, 会自带一些特有的属性: 存在Headers用于协议negotiation、可执行JavaScript代码片段。那么反爬方的第一个堡垒就基于浏览器的真实性检测开始构建。
    战役伊始, 反爬虫方率先祭出User-Agent, Content-Type, Application/*,iAccept-Encoding, Accept-Language, X-Forwarded-For, Referer等headers电网, 第一批与正常浏览器headers不同的爬虫纷纷触发, 瞬间毙命。然而, 爬虫方也不是吃素的! 他们用了一招漂亮的瞒天过海, 迅速通过伪造headers的方式突破防线!
    反爬方丝毫不慌, 在html中添加了一段JavaScript脚本地雷, 己方浏览器由于提前知道了地雷的位置,可以安全绕过, 不会影响正常的网页显示, 爬虫方却不明就里, 纷纷中招, 非死即伤,直到大杀器Node.js出现,可以直接执行JavaScript,爬虫方终于奋起反击,再下一城!![image.png](https://intranetproxy.alipay.com/skylark/lark/0/2019/png/88875/1565271756288-b128de6c-0efa-42bb-9b56-8fdc09caaf77.png#align=left&display=inline&height=178&name=image.png&originHeight=178&originWidth=984&size=194086&status=done&width=984)
    反爬方一计不成又生一计, 采用了迷宫式防御 — 单页应用 — 的方式重铸了堡垒,爬虫方费尽了心机却由于单页应用巧妙的构筑方式而解析不到任何数据,一时间被绕得晕头转向,束手无策,单页应用统治了战场!反爬方开始了单方面的屠杀,爬虫方的士气一蹶不振…...**千军坐镇,百将舍身,十年磨剑,一鸣惊人!**终于,这场战役的终结者出现了,他就是,Headless Chrome技术!新技术一出现,爬虫方的武器库焕然一新:Selenium,Puppeteer, PhantomJS, CasperJS等重装攻城杀器不断建功,反爬方一溃千里。爬虫方终于锁定了第一场战役的胜局!

Round Two:Are you Really a Human?
        由于断崖式技术Headless Chrome的出现,反爬方在浏览器识别战役上望风披靡。然而胜败乃兵家常事,东方不亮西方亮。在数据保卫战生死存亡的关头, 反爬方偶然发现了一个现象,浏览器虽然很难识别,但是人性是贪婪的!人类能做到很多脚本做不到的事!甚至人类的行为也是有固定的规律的!就这样,反爬方卧薪尝胆了许久,终于再次踏上了战场!这一役的制高点,是一个灵魂兼哲学的双层拷问:**你到底是不是人?!**
    第一层防线直指爬虫方的要害 — 贪欲(访问频率)!每秒钟请求10次这种高频访问,怎么可能发生在一个人类的身上,斩!爬虫方不得不大幅降低了攻击频率,反爬方终于缓了一口气。
    第二层防线指向爬虫方的痛处 — 懒惰(固定IP)!最近的几百次请求,都是同一个IP发出来的,世间哪有这么无聊的人?斩!爬虫方为此不得不付出巨大的代价来购买代理ip,即使是这样,反爬方依然可以通过封禁公网IP的方式来紧掉大量的代理地址。经过反爬方的精心运作,逐渐有效削弱了敌方的攻势。
    战役再次升级,反爬方请出了大国重器:验证码!大国重器上线不久即大获成功,爬虫方立刻损失惨重,仿佛一夜之间,所有的攻城器械都告无效,攻坚战陷入了僵局……直到爬虫方积年的技术积累取得的OCR重剑技术破土而出,才逐渐扭转颓势,但是依然不能压制攻下的城池内地下党的反扑, 尤其是爬虫方主力Google的反水技术:
![image.png](https://intranetproxy.alipay.com/skylark/lark/0/2019/png/88875/1565271766680-40f3be34-fcb7-4122-b998-bbc725706240.png#align=left&display=inline&height=110&name=image.png&originHeight=110&originWidth=424&size=14653&status=done&width=424)
甫一投战,反爬方立即大获全胜!
    最后,反爬方乘胜追击,祭出了终极防御:模式识别。爬虫毕竟不是人类,在请求的时候只能机械地设置目标资源的请求id和请求参数,这就导致请求参数和请求顺序必定是一致的。利用这一规律,反爬方通过设置阈值的方式对请求进行统计和识别,终于彻底杜绝了爬虫伪装成人类的进攻!第二场战役,反爬方胜利!

两场战役下来, 双方互有胜负,激烈的战斗仍在继续。恭祝双方战出友谊, 战出激情!
-- 一个曾经亲历过爬虫与反爬虫之战的老兵为您现场报导, 感谢您的收看, 再见!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/110063.html

相关文章

  • Tomcat和搜索引擎网络爬虫攻防

    摘要:而搜索引擎如百度和微软搜索,搜索等通过什么方式才能收录我们的个人网站呢答案是搜索引擎的网络爬虫。网络爬虫是一个很形象的名词,是属于搜索引擎的工具,只有被这些网络爬虫爬过的内容才有机会出现在对应搜索引擎的搜索结果中。 不知道广大程序员朋友们注意到一个现象么?使用百度是无法搜索到淘宝网的网页。为什么会造成这种现象?这就要从网络爬虫说起了。 咱们程序员假如自己搭设个人网站,在上面分享少量自己...

    cheukyin 评论0 收藏0
  • 爬虫攻防实践

    摘要:之前在学校曾经用过的方法做过一些爬虫脚本来玩,从正式转前端之后,出于兴趣,我对爬虫和反爬虫又做了一些了解,并且做了一些爬虫攻防的实践。爬虫脚本通常会很频繁的进行网络请求,比如要爬取豆瓣排行榜的电影,就会连续发送个网络请求。 之前在学校曾经用过request+xpath的方法做过一些爬虫脚本来玩,从ios正式转前端之后,出于兴趣,我对爬虫和反爬虫又做了一些了解,并且做了一些爬虫攻防的实践...

    wanglu1209 评论0 收藏0
  • 爬虫攻防实践

    摘要:之前在学校曾经用过的方法做过一些爬虫脚本来玩,从正式转前端之后,出于兴趣,我对爬虫和反爬虫又做了一些了解,并且做了一些爬虫攻防的实践。爬虫脚本通常会很频繁的进行网络请求,比如要爬取豆瓣排行榜的电影,就会连续发送个网络请求。 之前在学校曾经用过request+xpath的方法做过一些爬虫脚本来玩,从ios正式转前端之后,出于兴趣,我对爬虫和反爬虫又做了一些了解,并且做了一些爬虫攻防的实践...

    xiangzhihong 评论0 收藏0
  • Jsoup爬虫获取自己网站在百度搜索中的实时排名

    摘要:没有结果返回百度搜索的可以指定页码,最多一页个,使用后有效减少了连接次数。但亲测下来设置过以后的结果与实际用户在百度搜索的结果排序和个数都有出入。 showImg(https://segmentfault.com/img/bVbnA0I?w=1280&h=787); 一直有一个需求,希望看到自己网站在百度的实时的排名用过一些工具,要么反应迟钝,要么结果不准确或不实时于是打算用jsoup...

    陈伟 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<