当前位置:首页 > Python爬虫 > Python爬虫策略的重要性

Python爬虫策略的重要性

作者:二营长 发布时间:2016-12-07 点击:

会写点Python爬虫总要爬点东西来展示下自己(装装逼),今天说说爬虫策略的重要性,写爬虫没有策略不行,在确定目标url以后爬取、分析、存储的策略要大概先在自己脑瓜儿里过一遍。

貌似爬虫爱好者都喜欢爬豆瓣的东西,无论是电影、音乐还是小组等等。所以豆瓣网在反爬方面也是煞费苦心。当你的爬虫没什么策略可言时,很容易就会返回403错误。经过一些实验以及Google的结果,大体可以看出豆瓣的反爬策略:

当你不使用Cookie进行抓取时,连续的多请求几次就会被封,而且是封IP地址,即无论你怎么换UA都会返回403错误。

当你使用Cookie时,第一次请求豆瓣页面会返回一个名为bid的Cookie,以后的请求都会带此Cookie,但当你请求过于频繁时,此Cookie也会被封。但是此时不会封IP地址。

当你不是很频繁(至于这个频率具体是多少,不太清楚)的请求豆瓣时,即使不带Cookie,豆瓣每次都会返回一个bid。

基于以上3点,可以大体得出我们的爬虫策略:

(1)不带Cookie先请求一次,并将返回的Cookie进行保存,下边的所有请求都带此Cookie(用浏览器的调试工具也能拿到cookie)。

(2)请求一段时间被封后,清除所有Cookie后,再次进行请求,返回可用Cookie,依次循环。此策略应该有效,但没有经过验证。我在试验过程中,尝试random获取豆瓣需要的bid值,发现竟然也可用,即bid不需要通过请求获得,直接随机即可。此时策略就更简单了:随机bid值,并加入到Cookie中进行页面请求,当发现被封时,清除Cookie,随机更换bid值。

关键代码:

"Cookie": "bid=%s" % "".join(random.sample(string.ascii_letters + string.digits, 11))

平时在和其他技术人员交流爬虫的时候,很多人喜欢把“分布式”挂在嘴边。其实我玩爬虫那么久了,也算是个老司机了,真正遇到需要分布式抓取的情况还真不多。个人觉得除非是很大型的爬虫,比如抓取淘宝某一大类商品信息(总量大概在几千万级别以上),否则真的很少用到分布式爬虫。

当爬虫需要爬的URL特别多时,此时有两个瓶颈:

1、对方封爬虫请求,即封IP或者利用Cookie、账号等封请求。

2、自己服务器解析比较慢,即爬虫的瓶颈在于解析慢,特别是对于Python爬虫。后者可能需要分布式集群,来提高解析能力,顺便提高抓取速度。而前者可能就需要一点策略了。比如我们上边提高的爬豆瓣的策略。当你不断试验,返现对方服务器的反爬策略时,你就可以根据对方的策略,去选择自己爬虫的策略。但道高一尺魔高一丈,爬虫、反爬、反反爬是一个双方不断博弈、不断斗争的过程,有时候想想也挺有意思。

作者:笑虎
链接:https://zhuanlan.zhihu.com/p/24035574
来源:知乎

邮箱:techseo.cn@gmail.com,欢迎交流。
上一篇:Python爬虫代理ip      下一篇:Python爬虫浏览器useragent大全