这几天在家里面一直在做一个爬虫,前天突然发现ip由于过于频繁的访问被禁用了,所以在这里搞一个免费的ip代理池供大家使用,当然了,我们就不爬网站了,有现成的网站,要自己想爬也可以,我们用到的网址是
IP列表
https://raw.githubusercontent.com/fate0/proxylist/master/proxy.list
还有用到一个可以获取访问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)
写作不易,希望大家给点个赞。