查看原文
其他

一只爬虫的旅途

州的先生 简说Python 2019-05-25

点击上方“简说Python”,选择“置顶/星标公众号”

福利干货,第一时间送达!

本文转自:州的先生

作者:州的先生


1、开始

在过去的很长一段时间里,经常有小伙伴加我微信或者在群里发一个截图,然后问,为什么我按照XXX的代码运行没有结果啊?

没有结果肯定是不正常的结果,面对不正常结果首先要分析问题,要分析问题,首先当然要解剖问题和定位问题。

然而很多小伙伴刚刚接触数据采集写爬虫,用上几个库和框架就开干,顺利则好,不顺利,就一脸懵逼了。

这和你第一次开汽车,踩上油门汽车确实就能走,要是一条直路到达目的地,相安无事。

要是快撞树了不知道减速、不知道刹车、不知道转弯,撞树了还不知道倒车,有什么区别?

下面,通过比喻的手法,简单介绍一下,一个爬虫完成一次数据采集任务,所走过的路,所干过得事。


2、探路(分析目标)

我是一只爬虫,我即将前往我的目的地——花果山果园搬水果。

在出发之前,我派出了我的探子前往目的地了解果园的具体情况。(分析网页)

前往果园的道路是否通畅(请求是否可达)

果园有没有门卫(是否可以直接访问)

进去是否需要查验证件(是否需要认证)

果子还在树上(HTML数据)

还是已经装进了水果篮中(JSON/XML数据)……

待探子探明情况,我就可以上路了。


3、上路(HTTP请求)

前往果园我有很多种交通工具可选,比如一辆小单车(Selenium)、一辆小摩托(urllib)、一辆汽车(requests),或者是先乘高铁然后再租车(使用多种请求方式)。

我还能叫上我的几个兄弟(并发),一起去搬水果,这样可以搬得多搬得快。

正常情况下,我开了一辆小汽车驶上了高速公路。如果没有特殊情况,我可能顺顺利利全程高速,然后出了收费站,就到花果山。

但是有可能,想着果园满满的水果,我就兴奋,嗨了起来,油门自然给得也足。(请求速度快且频繁)花果山下道路限速40km/h,而我直接开了120km/h,被花果山交警大队的交警抓了,直接吊销驾照(IP被封)……game over


4、进果园(获取响应)

有惊无险下地进入了花果山果园镇。花果山里有些果园是公益开放的免费果园,所以我就直接开车进去。

有些果园是需要实名登记,我就老老实实去登记了,拿了个“已登记”的牌牌然后再进去。(登录认证后cookie

有些果园虽然免费进入,但是特别变态,竟然只让外A牌的小车进入(限制部分地区IP访问),无奈,只得换上准备好的外A套牌(代理IP),再次进入。

进入果园后,果园的负责人为我们送上了一个大礼包(HTTP响应),大礼包是什么呢?肯定是水果啊。拿到这个水果大礼包之后,我们此行最重要的目的就完成了。接下来,把水果大礼包放到车子,班师回朝!


5、摘果子(解析响应)

有些果园只管种树,送的水果大礼包里面是连枝带叶一起塞进来的(返回的HTTP响应是HTML源码),想要果子,还得自己去摘。

准备好剪刀、手套、塑料袋,一个一个,果子剪摘下来(HTML解析)。要是你手艺不好,可能一枝也没有一个果子,也可能把果子剪坏了。

有些果园就比较厚道了,把已成熟的果子采摘下来,放在一个个准备好的塑料箱里,最后打包到水果大礼包里面(返回JSON数据)。有需要哪种水果的,直接取对应的塑料箱就行了。真是中国好果园!

更有些果园,水果摆在不远处,但是面前一条弯弯的河(反爬机制),只要你过得去,水果大礼包就是你的了。


6、处理果子(数据存储)

果子分拣出来之后,怎么办呢?有些小伙伴把水果整整齐齐码在一起,拍个照发到朋友圈就完了,水果也直接扔了(直接print)。

当然,我们运回来的水果是有目的的。可能会稍微处理一下,直接拿到市场上去售卖。有可能挑出一些水果来把皮削了,用来做水果罐头(数据清洗)。

少量的水果,我们可以直接放在小冰箱的冷藏室里面保存(文本存储),大量的水果会放入保鲜库中进行保鲜,有一些水果则会脱水烘干后进行仓库(数据库存储)。

7、最后

我是一只爬虫,水果入库之后,我又该上路了,你呢?


踏实的人更容易过好生活,本文完。



/今日留言主题/

留言说说你还有哪些忘记的旅途?

(留言格式:Dayxx:blahblah

字数要求:30字以上


点点在看,少点Bug

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存