20180814_Scrapy源码第三天——代理ip和useragent

前面说到两个部分,一个是基础的scrapy源码,另一个是scrapy的框架以及其运行过程。说着说着,我开始爬网站。http://xuexi.huize.com/study/list-1-1026.html由于需要,我们爬的是这个保险网站上面的一些数据。

一开始爬的挺顺利

但是!问题来了!!爬了4万条语料之后,你开始登不上网站了。刷新也不行,于是就开始找原因,各种twisted报错,各种request faild。然后就会发现,你再打开之前的网页,就出现网页不能打开了。网上各种找原因,发现是网站发现你重复请求,就把你ban了。怎么办?我的天,问题严重了。。。。

找了半天,找到解决问题的办法,一个是代理ip,一个是更换user_agent

先说代理ip吧,主要思路是,找很多很多ip,最好就是每request一个,换一个IP,那样网站怎么找就找不到了。那样,就出现问题了,首先,ip来源问题,第二,ip质量问题,第三,ip如何嵌入每一个request。

先说来源问题,找了很多网站,也咨询过很多卖ip的,确实比较贵,而且害怕不稳定,好容易找到了一个网站,直接列出来ip的那种,测了一下,每个ip都能用。没用几天,网站给封了,所以在这儿推荐一个大神找的网站列表:【爬虫】免费代理IP地址列表与部分抓取源码

目前自己只尝试了西刺,89ip等几个网站。西刺的策略是,遍历所有的网页,爬存在时长超过半年的ip,再测试每个ip的可用性。

最后发现,数量虽然多,大概遍历2000个网页,能得到几百个ip,然后测试可用大概也就小几十个左右。而且非常耗时。于是放弃,另寻他路。

然后就找到了这个89ip,感觉贼好用,只爬了前20页ip,但是测试可用也有几十个,省时省力。

好了,有人就会问了,怎么测ip可用性?你想啊,ip可用不可用,你是要干嘛的?爬虫啊?那不就对了,用这个ip装爬虫上,请求网页,请求到就可用,请求不到就不可用啊?所以,答案来了:

然后再写一个deleteip的方法:

遍历完了ip,测试了可用性之后,再想要用ip的时候,随机再数据库中抽一个就好。

ok这个思路明了了,怎么把这个ip加入爬虫呢?那就要用到我们之前讲的知识了。爬虫代理ip在哪儿?第二张说过,在downloadmiddleware中。所以,我们在middleware层引入这个包和方法。

再在setting里面配置一下middleware的东西:

好了,大功告成。这边一个注意的小点,上面拿一张图的request["proxy"]="......."这个是必须的。而且一定要是proxy?为啥?因为你的爬虫request拥有的是proxy属性啊。

ok,有了这个ip之后,那我们可以大概知道useragent怎么做了,找了useragent列表,享用的时候就取。

标箭头的地方注意,这个也是要写到middleware层面的,不要解释了吧?但是我这边是在setting里面加了一个名字叫my_user_agent的代理列表,你要爬的话,可以参照这个网站:爬虫user_agent里面,爬取芝麻代理的列表,进行遍历和试用,原理跟ip差不多。当然,setting里面也要添加:

这边原理以及具体爬虫怎么调用的,还不是特别清楚,希望这周可以把它搞懂,争取再更一篇,看一下源码,说一下原理。

你可能感兴趣的:(20180814_Scrapy源码第三天——代理ip和useragent)