爬虫IP代理模块介绍及实战

皮卡丘联合爬虫业界大牛FastGets整理一系列文章,介绍python爬虫基础知识、大牛多年反爬经验,有难度网站抓取实战、爬虫系统架构设计、安卓app逆向分析。帮助小白入门,初级工程师成为资深工程师,大神回顾。大家有任何问题可留言交流,欢迎转发分享。

高频率的爬取网站页面会给网站服务器带来巨大压力,网站为了应对爬虫一般会采用一些反爬技术,这就使得我们有时候在爬取网站页面的时候被封了ip,致使我们的ip不能访问网站页面。

遇到这样的网站,我们可以通过降低抓取频率或者设置代理ip来达到抓取数据的目的。降低抓取频率会使我们获取数据的效率降低,在有限的时间里面达不到获取数据的目的。最有效的办法是通过设置代理ip的方式,来获取数据。

一、寻找可用代理ip

我们百度代理ip会出现各种各样的代理ip网站,有免费的,有收费的。

1.免费的:

(2)快代理( https://www.kuaidaili.com/free/ )

这些免费的代理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,用户只要设置一个固定的,阿布云会帮用户切换。

(5)全网代理(http://www.goubanjia.com/buy/high.html)的公开代理ip。

(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教程

(3)Mac系统mongodb安装教程

我们按照教程安装好mongodb后,启动mongodb服务。然后我们就可以使用mongodb了。笔者这里为了python操作方便,推荐使用mongoengine模块来使用mongodb,读者可以先看下简单的使用教程

以下是建立代理池,定时更新代理,代理调度的代码。

以后每篇文章的代码都可以在github的CrawlArticles仓库查看:https://github.com/piweidong/CrawlArticles

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180507G1VHWH00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券