自己搞一个免费的IP代理池

这几天在家里面一直在做一个爬虫,前天突然发现ip由于过于频繁的访问被禁用了,所以在这里搞一个免费的ip代理池供大家使用,当然了,我们就不爬网站了,有现成的网站,要自己想爬也可以,我们用到的网址是

IP列表
https://raw.githubusercontent.com/fate0/proxylist/master/proxy.list

还有用到一个可以获取访问ip的网址,

验证ip’

http://icanhazip.com/

话不多说,我们直接上代码,

import telnetlib
import requests
import random
import json
proxy_url = 'https://raw.githubusercontent.com/fate0/proxylist/master/proxy.list'
def verify(ip,port,type):
    '''
    验证后写入文件中
    :param ip:
    :param port:
    :param type:
    :return:
    '''
    proxies = {}
    try:
       '''
       验证方式,这里我看了网上都是用的都是用的都是telnet或者是用的我上面说的那个网址,
       返回当前的访问ip,差不多都是这样的,所以我就写了这两个验证的方法,后话啊,当然这
       是后话,我感觉应该把这两个方法都用上去,那样ip质量会不会比较好
       '''
        verify2(ip,port,type)
    except:
        print('unconnected')
    else:
        #print('connected successfully')
        # proxyList.append((ip + ':' + str(port),type))
        proxies['type'] = type
        proxies['host'] = ip
        proxies['port'] = port
        proxiesJson = json.dumps(proxies)
        with open('proxy_ip.json','a+') as f:
            f.write(proxiesJson + '\n')
        print("已写入:%s" % proxies)
def verify1(ip,port):
    '''
    验证IP是否可用
    :param ip:
    :param port:
    :return:
    '''
    #这里写的时间越小,我们得到的ip越少,质量可能会高一点
    telnet = telnetlib.Telnet(ip, port=port, timeout=3)
def verify2(ip,port,type):
    '''
    验证ip是否可用
    :param ip:
    :param port:
    :param type:
    :return:
    '''
    requests.adapters.DEFAULT_RETRIES = 3
    thisProxy = str(type)+'://' + str(ip)+':'+str(port)
    #这里时间写的越小我们的所获取的ip越少,当然了他的质量也就越高
    res = requests.get(url="http://icanhazip.com/", timeout=8, proxies={type: thisProxy})
    
    proxyIP = res.text.replace("\n", "")
    if (proxyIP == ip):
        print('ip:'+ip+'有效')
    else:
        raise Exception('代理IP无效')
def getProxy(proxy_url):
    '''
    获取ip,port ,type
    :param proxy_url:
    :return:
    '''
    response = requests.get(proxy_url)
    #拆分开返回的数据
    proxies_list = response.text.split('\n')
    print(len(proxies_list))
    print(proxies_list)
    for i in range(len(proxies_list)):
        print(str(i)+proxies_list[i])
        proxy_json = json.loads(proxies_list[i])
        host = proxy_json['host']
        port = proxy_json['port']
        type = proxy_json['type']
        verify(host,port,type)


if __name__ == '__main__':
    getProxy(proxy_url)

写作不易,希望大家给点个赞。

你可能感兴趣的:(自己搞一个免费的IP代理池)