注意: IP精灵代理仅提供国内ip网络节点,不提供境外网络节点,不能用于任何非法用途或访问境外封闭网站,不能跨境联网,只能用于合法的国内网络加速。

您好,请登录 没有账号?

首页 > 新闻资讯 > python开源IP代理池--IPProxys

python开源IP代理池--IPProxys

来源:互联网 作者:admin 时间:2019-03-19 15:56:21

突破反爬虫机制的一个重要举措就是代理ip。拥有庞大稳定的ip代理,在爬虫工作中将起到重要的作用,但是从成本的角度来说,一般稳定的ip池都很贵,因此我这个开源项目的意义就诞生了,爬取一些代理网站提供的免费ip(虽然70%都是不好使的,但是扛不住量大,网站多),检测有效性后存储到数据库中,同时搭建一个http服务器,提供一个api接口,供大家的爬虫程序调用。



好了,废话不多说,咱们进入今天的主题,讲解一下我写的这个开源项目IPProxys。


下面是这个项目的工程结构:

python开源IP代理池--IPProxys

api包:主要是实现http服务器,提供api接口(通过get请求,返回json数据)


data文件夹:主要是数据库文件的存储位置和qqwry.dat(可以查询ip的地理位置)


db包:主要是封装了一些数据库的操作


spider包:主要是爬虫的核心功能,爬取代理网站上的代理ip


test包:测试一些用例,不参与整个项目的运行


util包:提供一些工具类。IPAddress.py查询ip的地理位置


validator包:用来测试ip地址是否可用


config.py:主要是配置信息(包括配置ip地址的解析方式和数据库的配置)


接下来讲一下关键代码:


   首先说一下apiServer.py,主要是产生一个http服务器。


class WebRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):



    def do_GET(self):

        """

        """

        dict={}


        parsed_path = urlparse.urlparse(self.path)

        try:

            query = urllib.unquote(parsed_path.query)

            print query

            if query.find('&')!=-1:

                params = query.split('&')

                for param in params:

                    dict[param.split('=')[0]]=param.split('=')[1]

            else:

                    dict[query.split('=')[0]]=query.split('=')[1]

            str_count=''

            conditions=[]

            for key in dict:

                if key =='count':

                    str_count = 'lIMIT 0,%s'% dict[key]

                if key =='country' or key =='area':

                    conditions .append(key+" LIKE '"+dict[key]+"%'")

                elif key =='types' or key =='protocol' or key =='country' or key =='area':

                    conditions .append(key+"="+dict[key])

                    

 从代码中可以看出是对参数的解析,参数包括 count(数量), types(模式),protocol(协议),country(国家),area(地区),(


types类型(0高匿名,1透明),protocol(0 http,1 https http),country(国家),area(省市))


例如访问http://127.0.0.1:8000/?count=8&types=0.返回json数据。如下图所示:

python开源IP代理池--IPProxys

SQLiteHelper.py(主要是对sqlite的操作)



HtmlPraser.py(主要是对html进行解析):


使用lxml的xpath进行解析



IPAddresss.py(通过读取纯真qqwry.dat,对ip地址进行定位),读取的方式可以参考:http://ju.outofmemory.cn/entry/85998;https://linuxtoy.org/archives/python-ip.html


最后看一下validator.py,由于使用的是python2.7,所以要使用协程采用了gevent。


具体代码,请点击最后的阅读原文了解,



最后咱们看一下运行效果: 切换到工程目录下,cmd中执行python IPProxys.py:


python开源IP代理池--IPProxys

这个时候咱们在浏览器中输入请求,就会返回响应的结果:


python开源IP代理池--IPProxys

执行流程是每隔半小时检测一下数据库中ip地址的有效性,删除无效的代理ip。如果ip地址数量少于一个数值,爬虫将会启动,进行新一轮的爬取。当然检测时间和数据量都可以在config.py中配置。



整个项目的代码很简单,大家如果想深入了解的话,就详细的看一下我的这个开源项目IPProxys代码,代码写的有点粗糙,日后再继续优化。


最新资讯

推荐阅读

  1. 22

    2019-02

    网站反爬虫和爬虫的应对方法

    网站反爬虫比较多,robots限制是最基本的,告诉爬虫们哪些是不可以爬取的。还有其他的限制,比如常见的有IP限制,验证码限制,还有User-Agent检测,JS脚本等等,不同的反爬虫可以起到不同的

  2. 18

    2019-01

    爬虫可以从哪里获得海量IP资源

    使用过网络爬虫来爬取数据的人都知道,爬虫在爬取网站信息时,是真的需要海量IP资源,看项目的需求,有些一天可能要用到上百万的IP,那么这些IP资源如何来的?爬虫可以从哪里获得海量IP

  3. 22

    2019-04

    怎样识别客户端是否使用了代理IP

    随着互联网的迅速发展,代理IP的使用也越来越广泛,人们对于代理IP的需求也越来越大。我们时常会有这样的疑问,该怎样识别客户端是否使用了代理IP呢?说到这里就有必要先说下代理IP的匿

  4. 12

    2019-02

    抖音是怎么做营销?可以借助代理养号吗?

    有流量的地方就有营销,现在网络营销传播范围广,许多商家都选择在网络上做营销,比如近一两年比较火的抖音,也是有许多商家入驻的,那么这抖音是怎么做营销的呢?需要注意哪些事情?

  5. 22

    2018-11

    怎么突然爬虫被封了?爬虫被封常见原因

    新手做爬虫问题不断,这本来还好好的,怎么突然爬虫被封了,这怎么回事?究竟是哪里有问题呢?真心累,还只是采集小数据!!!

  6. 16

    2018-11

    纯干货!如何在线刷网站ip访问量提高权重?

    ​怎样提高网站的浏览量和点击率?这是很多互联网工作者迫切想要知道的吧!开发出来一个网站,但苦苦没有人来访问,这时候刷ip软件就显得至关重要啦!

在线客服
大客户VIP渠道
点击这里给我发消息
讨论QQ群
HTTP代理IP爬虫
客服电话
13318873961