我是如何高效写爬虫的?

爬虫是大多数 Python 学习者在初学时的第一个项目,也是一个很好的连接点。 为了给新手提供一份入门指南,在这里分享一下高效写爬虫的几个步骤。

第一步:观察

这里需要用到一个人人都用过的工具:Chrome 浏览器。

我是这样使用的:在 Chrome 里,打开检查元素去观察网站

* 判断前端渲染还是后端渲染(网页元素含有 data-xx 的属性一般就是,如果不确定那就关闭 JS 加载看看网页还能出得来么)

* 提前发现一些特征奇怪的元素(比如一个标签故意没闭合,要是解析出问题了先找它)

* 找到目标元素的集体特征(位置、名称、命名规则)

* 使用浏览器自带的 Search 和 Console 来确定问题

这样做的目的,是先在浏览器测试一遍,元素定位的描述是否准确

好处显而易见,先在浏览器中把调查的工作做足,理解了网页结构和数据规则,再去用代码实现。代码是为了我所发现的原理而服务的。如果在这一步没有八分把握,就别先去写代码,写了也是浪费时间。

第二步:遵循正确的爬虫升级开发模式

任何一个爬虫,无论它看起来多复杂多牛逼,无非是这四步模式:请求-解析-反爬-效率,这样一个模式走下来。而对于新手、高阶初学者、熟手,不同能力阶段的人,要掌握的技巧是不同的。

新手阶段的爬虫开发模式

请求:大多数新手教程会使用 Requests,但是在2019年已经很难仅仅使用它就成功爬取了。所以这里我建议新手直接上 Selenium, Pyppeteer(PuppeteerJS) 这类框架去模拟浏览器访问网站,最大程度的避免爬虫被识别出来,这是最省事的方法。

解析:在这个阶段先解析 html,使用 BeautifulSoup 就很好,也许有人会告诉你用 Pyquery ,但是如果你从来没用过 JQuery 那么你还是老老实实的用 BeautifulSoup 吧。

反爬:你要知道作为一个网站,去反爬是分几个阶段的:

验证 header ——看你是不是人

验证 cookie ——看你是不是浏览网页行为正常的人

验证 ip 访问频率——看你是不是一个来爬我的人

验证 auth——你光是人不行,还得是我的用户才行

其他更高级的反爬措施

而在新手阶段,最容易遇到的是频率限制,除了控制访问频率,「现在即使是最菜的新手,也知道用 ip 代理池了」。

效率:在新手阶段先不考虑效率提升了,就先用自己的电脑爬取,一般来讲常见的爬虫都是阻塞型的,也就是一行没运行完就不执行下一行,先跑通流程了,后面再提升效率。数据存储也先用最简单的方式,直接下载到电脑,或者是存成 txt  csv 都够用了。

完整走完这一个循环,可以先搞明白爬虫的整个流程是怎样的。这个阶段可以爬取一些简单的网站,爬取到100万内的数据。

高阶初学者的爬虫开发模式

请求:在请求中使用 header ,这样在请求的时候就提升爬取成功率和 ip 损失。

解析:BeautifulSoup 虽然使用简单但是慢。这个阶段可以换成 XPath 或者正则,去提升解析效率。更推荐 XPath ,性能高、还容易维护。

反爬:你接触的网站多了,就会遇到各类问题需要解决,验证码识别、设置 cookie 模拟登录、处理动态加载,都是这个阶段要解决的问题。

效率:这时候可以使用异步请求,效率至少提升 2~3倍。另外可以使用多进程爬虫,这样就不是利用电脑的单核cpu,而是加上多核多进程,效率就完全上了一个大的台阶。基本上完全可以达成一台电脑1天爬取百万级别的速度。Excel 最多支持 1,048,576 行,所以超过百万级数据存储就需要上数据库了,选择 MongoDB 或者 MySQL 都可以,懒一点 sqlite 也是没什么大问题的。

到了这个阶段,你能达到能爬取80%网站,爬取到500万以内数据量的一个水平。

不过还是有解决不了的问题,App爬不了怎么办?爬下来的是假数据怎么办?想爬更多数据量怎么办?

这就需要进入下一阶段深入学习。

熟手的爬虫开发模式

请求:当你理解了网页背后的原理的时候,你就可以放开使用各种非浏览器的库去模拟真实请求。这时候需要再去观察网站时候,你就要同时考虑到如何构造一个可信的请求,

解析:在这个阶段开始解析 json, xml, 甚至是 GraphQL。把这些数据格式和 Python 的数据将结构互转。这些数据格式的传输,在 App 手机端是最常见的,这时候就需要抓包并分析 ,破解接口的鉴权。

反爬:接触的网站多了,你会遇到「数据投毒」的情况,你在爬的时候以为自己都爬到了,但其实到手的是真假混淆的数据,毫无意义。这时候最重要的是通过分析发现被投毒了,然后换请求方式,让自己更像真人用户。

效率:当处理500万以上量级的数据,就需要用到分布式爬虫了,使用多台电脑或主机爬取。这时候还需要考虑一个可复用的好的工程结构的爬虫设计。 其实到了这个阶段,开发模式变成了:请求-解析-调度-存储-展示-反爬-效率。

调度就是怎么调配你的下载器和解析器然后入库,对资源的一个协调作用,一般大型爬虫都会设计到。也是提升效率的一种方式。

这时候你可以达到能爬取99%的网站和app,获得千万级数据的一个水平。

基本上,没有爬不到的数据了。但不要做违法的事情哦(爬取公民公积金社保信息、个人淘宝交易记录、版权内容等均为非法)。

为什么提出这3种不同的模式呢?因为这样可以逐渐的去升级你学习的难度。 有些人干什么都事情一窝抓, 他想一下就干所有事情,但是从经验上来讲,你要想有效率的干好这一件事情,你必须按照客观规律来。相当于你要想学得快,你必须要把问题简化。 如果一个新手一上来就接触分布式,可能就夭折在这里了,需要先掌握的是整体的流程,有了成果、有了成就感,然后再循序渐进的提升难度。

第三步:写更多爬虫

看过这样一句话,

在编程领域你每天都会遇到不明白的词,你需要习惯。

遇到不认识的东西特别正常,关键就在于要怎么处理。如何有效率的写代码,在于什么时候你该了解什么事情。比如说你现在这代码跑不通了,肯定是先解决手头着急的问题,理论方面的事情有空了再慢慢研究。

我的建议是多写点小项目,快速练习,今天解决一个登录问题,明天解决一个验证问题,靠小型项目来弥补你在网络知识上的欠缺。

因为爬虫技术,靠实际项目去学是最快的。真的没办法系统去学,如果谁要说爬虫的知识你被系统学下来了,它几乎指的是我要学习前端+后端+系统运维+黑客技术。

总结

最后总结成三个重点,

第一步:观察,先在浏览器中把调查的工作做足,理解了网页结构和数据规则,再去用代码实现。

第二步:遵循正确的爬虫升级开发模式,掌握四步一体的模式:请求-解析-反爬-效率。

第三步:写更多爬虫,靠实际项目去学。

与大家共勉。

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

推荐阅读更多精彩内容

  • 爬虫是一个比较容易上手的技术,也许花5分钟看一篇文档就能爬取单个网页上的数据。但对于大规模爬虫,完全就是另一回事,...
    真依然很拉风阅读 9,662评论 5 114
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,490评论 1 45
  • 这个项目也是初窥python爬虫的一个项目,也是我的毕业设计,当时选题的时候,发现大多数人选择的都是网站类,实在是...
    梦航韩语阅读 3,005评论 2 37
  • 1 前言 作为一名合格的数据分析师,其完整的技术知识体系必须贯穿数据获取、数据存储、数据提取、数据分析、数据挖掘、...
    whenif阅读 18,074评论 45 523
  • 陪二宝看“婴儿画报”,每次看到小老鼠偷吃药的时候,我都反复强调:“你看小老鼠偷吃药,眼冒金星晕倒了,被救护车送...
    幸福人生云阅读 289评论 1 1