00x01--- 前言
因为爬虫被禁ip这样的反扒真的很凶,但自从建了一个代理ip池以后,反反扒就可以跟的上节奏。当然你也可以上网上各种代理平台自己付费。这些平台当然很方便提供api调用,还不用自己验证。但你不想付费的话,可以看看下面这个国外的开源项目,我是从某网站的评论信息里找到的,下面操作均是基于该网站:https://raw.githubusercontent.com/fate0/proxylist/master/proxy.list
00x02--- 获取代理的json信息
打开网站,不过需要墙,这是一个开源的项目
00x03 --- 分析
很明显每一行是一个json数据,但整个页面你拿到的也不过是字符串而已,每一行末都换行,也就是说每一行末都有"\n",那么思路很清晰,用requests获得整个页面的text(字符串),然后用split('\n') 将每一行分割之后组成的列表,便利这个列表用json.loads()方法,将每一行的字符串转换为json对象,最后取值。
00x04 --- 上代码
1 #!/usr/bin/env python3 2 # coding:utf-8 3 #lanxing 4 5 6 import json 7 import telnetlib 8 import requests 9 import random 10 11 proxy_url = 'https://raw.githubusercontent.com/fate0/proxylist/master/proxy.list' 12 # proxyList = [] 13 14 #定义函数,验证代理ip是否有效 15 def verify(ip,port,type): 16 proxies = {} 17 try: 18 telnet = telnetlib.Telnet(ip,port=port,timeout=3) #用这个ip请访问,3s自动断开,返回tiemout 19 except: 20 print('unconnected') 21 else: 22 #print('connected successfully') 23 # proxyList.append((ip + ':' + str(port),type)) 24 proxies['type'] = type 25 proxies['host'] = ip 26 proxies['port'] = port 27 proxiesJson = json.dumps(proxies) 28 #保存到本地的proxies_ip.json文件 29 with open('proxies_ip.json','a+') as f: 30 f.write(proxiesJson + '\n') 31 print("已写入:%s" % proxies) 32 33 #定义函数,带着url地址去获取数据 34 def getProxy(proxy_url): 35 response = requests.get(proxy_url) 36 #print(type(response)) 37 # 用split('\n') 将每一行分割之后组成的列表,消除换行影响 38 proxies_list = response.text.split('\n') 39 for proxy_str in proxies_list: 40 # 用json.loads()方法,将每一行的字符串转换为json对象,最后取值 41 proxy_json = json.loads(proxy_str) 42 host = proxy_json['host'] 43 port = proxy_json['port'] 44 type = proxy_json['type'] 45 verify(host,port,type) 46 47 48 #主函数,入口 49 if __name__ == '__main__': 50 getProxy(proxy_url)
00x05 --- 效果图
参考文章:https://blog.csdn.net/qq_42776455/article/details/83047883