皮卡丘联合爬虫业界大牛FastGets整理一系列文章,介绍python爬虫基础知识、大牛多年反爬经验,有难度网站抓取实战、爬虫系统架构设计、安卓app逆向分析。帮助小白入门,初级工程师成为资深工程师,大神回顾。大家有任何问题可留言交流,欢迎转发分享。
高频率的爬取网站页面会给网站服务器带来巨大压力,网站为了应对爬虫一般会采用一些反爬技术,这就使得我们有时候在爬取网站页面的时候被封了ip,致使我们的ip不能访问网站页面。
遇到这样的网站,我们可以通过降低抓取频率或者设置代理ip来达到抓取数据的目的。降低抓取频率会使我们获取数据的效率降低,在有限的时间里面达不到获取数据的目的。最有效的办法是通过设置代理ip的方式,来获取数据。
一、寻找可用代理ip
我们百度代理ip会出现各种各样的代理ip网站,有免费的,有收费的。
1.免费的:
(1)西刺代理( http://www.xicidaili.com/ )
(2)快代理( https://www.kuaidaili.com/free/ )
(3)66免费代理( http://www.66ip.cn/) 等
这些免费的代理ip,大部分都失效了,但是还是有一些有用的,有用率大概在10%左右。如下图:
我们可以将验证时间在1个小时之内的ip和端口抓取下来(大概是第一个页面),然后验证哪些ip可用,代码如下:
运行代码后,可知在西刺免费代理上,筛出了23个可用代理。免费代理适用于需求量较少的情况。以上代码是单线程,在验证代理是否有效的时候,代码运行需要时间比较长,读者可以将其改成多线程,或者到这里
(https://github.com/piweidong/CrawlArticles)
article3/free_proxy_thread.py查看代码。
2.付费的:
(1)云代理(http://www.ip3366.net/pricing/)普通代理
(2)太阳http(http://http.taiyangruanjian.com/newrecharge/)
(3)阿布云代理(https://www.abuyun.com/pricing.html)动态版,不需要用户切换ip,用户只要设置一个固定的,阿布云会帮用户切换。
(4)大象代理(http://www.daxiangdaili.com/)个人版。
(5)全网代理(http://www.goubanjia.com/buy/high.html)的公开代理ip。
(6)ip海(http://www.iphai.com/buy)普通代理。
(7)快代理(https://www.kuaidaili.com/pricing/#ops)的开放代理。
这些付费代理,每家大约一年付费1000元左右,上面的排序是笔者认为的综合排序水平,每家的代理有效率在20%~60%之前,购买一到两家,一般就够了。读者也可以自己测试。或者根据自己的需求购买更贵的私密代理或者独享代理。
购买付费代理之后,读者在代理网站生成提取代理链接后,提取代理,然后验证代理的有效性,步骤和免费代理差不多,只是提取代理的url不同而已,笔记自行尝试。
二、代理调度
要调度代理,我们首先要构建一个代理池。需要实现的功能:
1.定时验证代理的有效性,将无效代理删除。因为免费代理或者购买的代理有效时间不确定,有几分钟,几十分钟,几个小时等,我们要保证我们代理池中的代理基本都是有效的,这样才能使我们抓取成功率高。
2.每个代理都需要记录最后一次访问网站的时间。为了控制一个代理至少隔多少时间才能再次访问。
3.随机选择一个符合上述条件的代理,来作为我们的代理。
代理池,我们一般用数据库的一张表表示。笔者这里在mongodb中建立一张表,作为代理池。笔者百度了几个比较靠谱的教程,来安装mongodb数据库:
(1)Windows系统mongodb安装教程
(https://jingyan.baidu.com/article/d5c4b52bef7268da560dc5f8.html)
(2)Linux(centos)系统安装mongodb教程
(https://blog.csdn.net/wangkai_123456/article/details/50791255)
(3)Mac系统mongodb安装教程
(https://blog.csdn.net/u011642782/article/details/78867985)
我们按照教程安装好mongodb后,启动mongodb服务。然后我们就可以使用mongodb了。笔者这里为了python操作方便,推荐使用mongoengine模块来使用mongodb,读者可以先看下简单的使用教程
(https://blog.csdn.net/u011845833/article/details/51151434)。
以下是建立代理池,定时更新代理,代理调度的代码。
以后每篇文章的代码都可以在github的CrawlArticles仓库查看:https://github.com/piweidong/CrawlArticles