最近在做爬虫,需要用到ip代理以防止爬虫被ban,在这里写一篇文章来为自己备份也希望能给大家带来帮助。
1.关于IP代理
上网用的协议是TCP/IP协议,网络中的身份之一就是IP,也就是说你必须有一个IP地址才能访问互联网,上网所需要的每个人的IP地址是唯一的。代理IP就是换个身份,就是说你的本机先访问代理IP,然后通过代理IP地址去访问互联网,比如,我们身在墙内,想要访问google、u2b、fb等,直接访问是404,所以要换个不会被墙的IP,比如国外的IP等。这个就是简单的代理。
在爬虫中,有些网站可能为了防止爬虫或者DDOS等,会记录每个IP的访问次数,比如,一些网站(xicidaili)一分钟一个ip只能访问5次,我的ip已经被ban了,嘤嘤嘤。
那么ip,从哪里来呢。百度一下,发现由ip代理网站这一说法,我们就可以直接从IP代理网站上面爬取了,当然也要注意一下这些网站防爬虫~~不要像我一样被ban了。。。
2.爬虫
自己写完代码的时候还觉得自己还行啊,美滋滋的,但截图的时候觉得变量命名没有章法,语句写的也很丑。。。。。。
爬取对象的页面截图(自己的IP被ban了,先盗图了,图来自参考文章第一个):
爬取结果截图:
当然,虽然这些代理IP好像存活时期还有很久的样子(百度了半天还是没搞懂存活时间),但并不都是能用的,这就需要我们去验证IP的可用性,在可用的情况下,再提供给爬虫使用。
3.验证IP
验证代理IP是否可用。原理是使用代理IP访问一些网站,如果返回状态为200,表示这个代理是可以使用的,但愚蠢的我竟然是这样来验证的:
request.get(url = 咱验证的IP),然后久久没有结果,我开始怀疑人生,大概是上天给予我的恩赐,百度到了一篇:使用python验证代理ip是否可用,大彻大悟,话不多说上代码:
使用request的ip验证:
使用telnet的ip验证:
耶,搞定啦!!!
5.升级
在验证IP的时候,我发现速度并不是很快,可以考虑添加多线程,此处留个念想。