打造一条爬虫

作者: odirus | 来源:发表于2016-05-02 14:05 被阅读1648次

    根据知名网站 stackoverflow 调查,被调查者 69% 都是非科班出生。

    很多人学习一门语言的第一件事情不是做一个大的项目,而且用它来写一个爬虫,那么如何写好一条爬虫呢?这也是一个值得探讨的问题,爬虫与反爬虫就是实力的较量。

    比如我们想爬豆瓣的热门书籍,热门电影,或者想把豆瓣的图书数据都爬下来,那我们应该怎么做呢?中间会遇到什么问题呢?

    反爬虫措施一般有哪些呢?

    • 验证码的方式,验证方式多种多样,图片验证码、拖动验证码、更加复杂变态的验证码等等。对于图片验证码,有一些简单的库来识别这些验证码图片,但是效果并不是很好。

    • 频率、IP 限制,比如豆瓣网页,他是允许你少量爬一些资源的,但是如果同一个IP、同一个账号在比较短的时间内爬取大量的内容,他也会通过技术手段阻止你,往往是图片验证码

    • 全局动态加载,要想爬别人的资源,那么首先需要得到网页的内容,但有些网站就是这么牛,网页最开始只加载一个 JS 文件,然后通过 JS 再去加载其他的内容信息,这样对爬虫是非常不友好的。因为爬虫不能像浏览器一样渲染页面啊,臣妾真的做不到。微博就是这样滴,要想爬取微博内容,做好心理准备。

    那我们应该怎样取和这些反爬虫措施做斗争呢?

    • 如果对方是图片验证码的方式、图片滑块的方式,完全可以使用人工打码的方式,就是把图片验证码或者滑块位置信息传输到第三方系统里面,让那些工人人工识别这些验证码,这还是一个产业链哦。

    • 如果对方限制频率,那则可以采取分布式爬虫来工作,在云主机厂商多购买一些廉价的VPS,把任务分散开来,满足爬取频率上的需求。如果对方采取IP限制的方式,那就可以使用代理的方式工作,国内的一些代理网站出售的代理服务器地址非常糟糕,上次以学习为目的购买的代理,质量非常差,几百个IP里面也许只有几个可以正常 work,所以不建议购买,建议使用国外网站提供的,例如这家网站的免费代理质量非常高 freeproxylists

    • 如果对方采取全局动态加载的方式来难为爬虫,那也不怕,selenium,将助你一臂之力,selenium 是一个中间的桥梁,他提供一个浏览器驱动程序,驱动程序能够驱动不同的浏览器达到相同的效果,他把细节封装在内部,对外提供统一的API,是不是很酷?当然搭配上 PhamtomJS 效果会更好,PhamtomJS 是一款无界面浏览器,他能够像 chrome、firefox 那样执行桌面浏览器的功能,适合在服务器端渲染页面,他的作者开发他的目的是用来进行 web 自动化测试的,但是用来做爬虫是灰常不错的哦。

    • 智斗,一定要先分析被爬网站的特点,再不断修正自己的爬虫方案,这样才能让爬虫更加完美。

    实战篇

    看来大家对爬虫的兴趣还是挺高的,决定今天把实战内容加上。

    实战目标是:爬取 freeproxylists 上的内容,并且尝试自动发布到简书上来。目标虽然看起来简单,但是他使用了 Google 验证的,本文主要是讲解如何有条理地制作一条爬虫,以及如何绕过它的验证。

    相关文章

      网友评论

      • 097bf54181f7:实战篇在哪里啊??
      • odirus:各位亲,这几天每天都 “被” 加班到晚上十点左右,所以原计划今天更新的内容暂时无法完成,望谅解,找到空闲时间写好之后,会在第一时间发布的。谢谢关注。
      • 极小光:等待实战 。
        感谢分享,欢迎关注专集:极光。
        互联网内幕、技术、八卦都在这里,快到碗里来。
        我一直在研究怎么把大家的好文章让更多的人看到,也希望你能来投稿我们一起努力传播。
      • 哲人王:干货来的猛烈些
      • 任易:持续关注中
      • 4588e4274830:过这些限制很容易的,比如 伪造Cookie,宽带重拨 等等
      • change_xu:学的前端,也想试试做个爬虫,会继续关注^_^
      • 向日葵的笑:你的爬虫用什么写呀。那种语言?
        向日葵的笑:@odirus 我也是用py做爬虫的↖(^ω^)↗不是很懂坐等你文章更新o(≧o≦)o
        odirus:@抹茶与橙汁 selenium 本身是全平台的,大多数语言都支持,但是为了部署更加方便,我用的Python,免去了环境安装的痛苦
      • moxfen:又长姿势了,谢谢你的思路分享 :smile:
        odirus:@_默枫 不客气,稍后我会个代码版的思路(解决方案)
      • 71739aed572c:以为有技术突破
        odirus:@sebeeven 如果有兴趣的话,欢迎明天再来。
        odirus: @sebeeven 让你失望了。套路都一样,本来是打算写爬某网站数据作为教程的,结果收假回来就在忙。可以提出新思路分享一下

      本文标题:打造一条爬虫

      本文链接:https://www.haomeiwen.com/subject/alllrttx.html