写爬虫很简单但也很难(附某美女站爬虫源码)

技术 作者:余弦 2016-12-05 19:16:36 阅读:732
写作上,我真是个很随性的人,挖再多的坑都不一定会去补上,反正读者也没一直催...正因为随性,我才说过曾经写的那本书的经历实在是痛苦,虽然写完后给我带来的好处还是很多的。也是因为随性,将公众号沉静了个把月,发神经去写博客 evilcos.me,一写还写了好几篇。博客上主要还是技术,这是本,改不了。而公众号,技术点谈太深就不行了,更多还是科普及观点相关的文字。 我的读者们,尤其是收听这么久我公众号(包括本知乎专栏)的读者们,你们估计已经习惯我这样的风格了,那请继续保持习惯...你以为“懒人在思考”这个名字是怎么来的,就是因为懒,说好听点是“随性”:D 回归正题,我填下坑。 前两篇文章大家可以温习下:新人上手 Python 另类建议——被和谐了的答案爬虫 Tip 相关与不相关的几点补充 为什么说写爬虫很简单,你看源码:github.com/evilcos/craw 如果你按我前两篇文章说的,基于 Scrapy 写爬虫,那么我开源的这个小爬虫你可以直接参考:crawl3 目录下可以翻到 rosi.py,专门爬 rosioo.com 这个站的美女图片。这样运行:
1. 按照官方文档安装 Scrapydoc.scrapy.org/en/1.2/i 2. git clone github.com/evilcos/craw 3. 创建个 /data/rosi/ 目录,用于保存下载的图片,当然这个路径可以在 settings.py 里修改 4. 进入 crawl3 目录,运行命令:scrapy crawl rosi 5. 没了
这份代码确实很少,也很简单且粗暴,但我估计能真的领悟深刻的人会很少。 我交代下我的爬虫生涯吧,2008年开始就写爬虫到现在,过程也发现了 Scrapy 等爬虫框架,但那时都太初始了,哪有现在用得这样爽?而我因为后来负责公司的漏洞扫描器引擎的编写,爬虫是我最费力写出来的,从零踏了无数坑,fix 了无数 bugs。回头看看 N 年前自己写的大爬虫,复杂到我想吐,估计后来那些参与维护我写的那个大爬虫的同学会恨死我...其实这不完全怪我呀,爬虫本就是个非常复杂的玩意,因为其面对的 Web 环境复杂度太高,我随便罗列些必定会踏到的坑吧:
字符集编码 HTML/XML不规范 链接伪协议及不规范 各种文件类型 网页跳转:服务端、客户端(Meta、JavaScript、Flash等) Cookie/认证会话维护 代理维护 GPC(Cookie/Post/Get)参数提取 HTTP多种请求 超时:连接超时/读取超时 JavaScript动态出来的链接 AJAX请求 链接爬取去重算法 广度深度算法 并发:进程/线程/协程 调度:同步/异步 各种内存优化 各种异常维护 灵活配置 灵活扩展 优秀的文档...
我可以肯定是我现在由于赶时间,并没都罗列全面。经历过这些的人才会感慨:工程化能力的重要性啊... 你看,我上面开源的那个 Scrapy 小爬虫是多么的简单,然而,我强烈建议:
当你在享受这种快感的时候,去深度理解理解下,这种快感的由来吧。
我愿意花钱去赞助一些优秀开源甚至花高价钱去买一些优秀工具,虽然我没钱。促使我这样做,以及不断学习的本质是:我感受到那种敬畏。 赶时间,这篇先这样,有空继续。如果你跟上了,欢迎邮件我:evilcos@gmail.com,邮件肯定看,由于精力问题,我不一定回复,请理解。 ----------------- 微信公众号「Lazy-Thought」 几个黑客在维护,都很懒,都想改变点什么

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:http://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

图库
关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接