当前位置: 首页 > 后端技术 > Python

【源码】Python3使用Requests抓取检测电光代理API,查询ip代理是否成功

时间:2023-03-25 19:33:01 Python

原文地址注:源码原生支持Linux,Windows可能无法区分字体颜色,整体质量处于市面上开放代理第一梯队)请获取属于你的代理API,比如我的是https://api.super.xyz/oNtl30618YdXol/1000-china-0-http-high_anonymous-json(测试链接,请以实际链接为准)点击下载github仓库源码下载源码后运行程序如下使用方法(以未安装Python3虚拟环境的Windows为例)进入命令窗口1.安装虚拟环境pipinstallvirtualenv(Linux和MacOS使用pip3installvirtualenv)2.在项目目录下创建虚拟环境virtualenvvenv3.激活虚拟环境venv\Scripts\activate(Linux和MacOS使用.venv/bin/activate)4.激活后安装需要的依赖pipinstall-rrequirements.txt(Linux和MacOS使用pip3install-rrequirements.txt)5.编辑ip.py文件,将64-行链接到您获得的代理API地址(这里的API是电光代理返回的JSON格式,如果你没有修改过代码,暂时只能使用电光代理https://www.cyberlight.xyz/ip)(如果你是一个开发者,代码可以自己编辑,可以请求任何类型的API)6.运行程序可以使用pythonip.py(Linux和MacOS使用python3ip.py)7.运行程序后,如果你的API设置返回http代理,请选择1,如果设置返回https代理,请选择2运行示例并完成第一个5第一步后,运行程序。由于我设置的代理类型是http,这里输入1,程序会自动运行。上半部分显示电光代理提取次数和有效ip数。下半部分是随机测试30个ips是否代理成功,并查询对应的地址(这里只能检测到http代理的地址,如果是https代理请替换129行的测试源地址带有https可用的检测地址)如果大家在使用本源码测试代理的过程中有任何问题,欢迎在评论区留言!项目源码importrequestsimportrandomimporttelnetlibimportthreadingimporttime#Browser请求头,用于请求访问user_agent=["Mozilla/5.0(Macintosh;U;IntelMacOSX10_6_8;en-us)AppleWebKit/534.50(KHTML,likeGecko)Version/5.1Safari/534.50","Mozilla/5.0(Windows;U;WindowsNT6.1;en-us)AppleWebKit/534.50(KHTML,likeGecko)Version/5.1Safari/534.50","Mozilla/5.0(WindowsNT10.0);WOW64;rv:38.0)Gecko/20100101Firefox/38.0","Mozilla/5.0(WindowsNT10.0;WOW64;Trident/7.0;.NET4.0C;.NET4.0E;.NETCLR2.0.50727;.NETCLR3.0.30729;.NETCLR3.5.30729;InfoPath.3;rv:11.0)likeGecko”,“Mozilla/5.0(兼容;MSIE9.0;WindowsNT6.1;Trident/5.0)”,“Mozilla/4.0(兼容;MSIE8.0;WindowsNT6.0;Trident/4.0)”,“Mozilla/4.0(兼容;MSIE7.0;WindowsNT6.0)”,“Mozilla/4.0(兼容;MSIE6.0;WindowsNT5.1)”,“Mozilla/5.0(Macintosh;IntelMacOSX10.6;rv:2.0.1)Gecko/20100101Firefox/4.0.1,"Mozilla/5.0(WindowsNT6.1;rv:2.0.1)Gecko/20100101Firefox/4.0.1","Opera/9.80(Macintosh;IntelMacOSX10.6.8;U;en)Presto/2.8.131Version/11.11","Opera/9.80(WindowsNT6.1;U;en)Presto/2.8.131Version/11.11","Mozilla/5.0(Macintosh;IntelMacOSX10_7_0)AppleWebKit/535.11(KHTML,likeGecko)Chrome/17.0.963.56Safari/535.11","Mozilla/4.0(兼容;MSIE7.0;WindowsNT5.1;Maxthon2.0))","Mozilla/4.0(兼容;MSIE7.0;WindowsNT5.1;TencentTraveler4.0)","Mozilla/4.0(兼容;MSIE7.0;WindowsNT5.1)”,“Mozilla/4.0(兼容;MSIE7.0;WindowsNT5.1;TheWorld)”,“Mozilla/4.0(兼容;MSIE7.0;WindowsNT5.1;Trident/4.0;SE2.X)MetaSr1.0;SE2.XMetaSr1.0;.NETCLR2.0.50727;SE2.XMetaSr1.0)”,“Mozilla/4.0(兼容;MSIE7.0;WindowsNT5.1;360SE)”,“Mozilla/4.0(兼容;MSIE7.0;WindowsNT5.1;Avant浏览器)”,“Mozilla/4.0(兼容;MSIE7.0;WindowsNT5.1)”,“Mozilla/5.0(iPhone;U;CPUiPhoneOS4_3_3likeMacOSX;en-us)AppleWebKit/533.17.9(KHTML,likeGecko)Version/5.0.2Mobile/8J2Safari/6533.18.5","Mozilla/5.0(iPod;U;CPUiPhoneOS4_3_3likeMacOSX;en-us)AppleWebKit/533.17.9(KHTML,likeGecko)Version/5.0.2Mobile/8J2Safari/6533.18.5","Mozilla/5.0(iPad;U;CPUOS4_3_3,如MacOSX;en-us)AppleWebKit/533.17.9(KHTML,如Gecko)Version/5.0.2Mobile/8J2Safari/6533.18.5”,“Mozilla/5.0(Linux;U);Android2.3.7;en-us;NexusOneBuild/FRF91)AppleWebKit/533.1(KHTML,likeGecko)Version/4.0MobileSafari/533.1","MQQBrowser/26Mozilla/5.0(Linux;U;Android2.3.7);zh-cn;MB200Build/GRJ22;CyanogenMod-7)AppleWebKit/533.1(KHTML,likeGecko)Version/4.0MobileSafari/533.1","Opera/9.80(Android2.3.4;Linux;OperaMobi/build-1107180945;U;en-GB)Presto/2.8.149Version/11.10","Mozilla/5.0(Linux;U;Android3.0;en-us;XoomBuild/HRI39)AppleWebKit/534.13(KHTML,像Gecko)Version/4.0Safari/534.13","Mozilla/5.0(BlackBerry;U;BlackBerry9800;en)AppleWebKit/534.1+(KHTML,likeGecko)Version/6.0.0.337MobileSafari/534.1+","Mozilla/5.0(hp-tablet;Linux;hpwOS/3.0.0;U;en-US)AppleWebKit/534.6(KHTML,likeGecko)wOSBrowser/233.70Safari/534.6TouchPad/1.0","Mozilla/5.0(SymbianOS/9.4;Series60)/5.0NokiaN97-1/20.0.019;Profile/MIDP-2.1Configuration/CLDC-1.1)AppleWebKit/525(KHTML,likeGecko)BrowserNG/7.1.18124","Mozilla/5.0(compatible;MSIE9.0;WindowsPhoneOS)7.5;Trident/5.0;IEMobile/9.0;HTC;Titan)","UCWEB7.0.2.37/28/999","NOKIA5700/UCWEB7.0.2.37/28/999","Openwave/UCWEB7.0.2.37/28/999","Mozilla/4.0(compatible;MSIE6.0;)Opera/UCWEB7.0.2.37/28/999",#iPhone6:"Mozilla/6.0(iPhone;CPUiPhoneOS8_0likeMacOSX)AppleWebKit/536.26(KHTML,likeGecko)Version/8.0Mobile/10A5376eSafari/8536.25",]#多线程锁lock=threading.Lock()#arr是被分割的列表,n是每个chunk包含n个元素。defchunks(arr,n):return[arr[i:i+n]foriinrange(0,len(arr),n)]classIp:#构造方法def__init__(self,proxy_type):#初始化electro-opticProxyAPI(JSON格式)#该API只是一个测试链接,需要输入实际有效的APIself.api_json='https://api.super.xyz/oNtl30618YdXol/1000-china-0-http-high_anonymous-json'自我。ips=[]#存储有效ip列表self.proxy_type=proxy_type#代理类型#抓取测试ip的方法defget_api(self):temporary=requests.get(self.api_json).json()['proxy']#获取API的ipproxy_lists=chunks(temporary,20)#将大列表拆分成小列表,每个列表包含20个元素#多线程检测ipprint('Detectingproxy')ts=[]#新建列表,用于将proxy_list的所有线程存储在proxy_lists中:#遍历每个ip列表t=threading.Thread(target=self.test,args=(proxy_list,))#createthreadt.start()#threadrunts.append(t)#ts添加线程#等待线程结束fortints:#遍历每个线程t.join()#等待线程结束print('代理检测结束,检测总数:'+str(len(temporary))+',有效数量:'+str(len(self.ips)))#ip测试方法deftest(self,proxy_list):#Detectvalidipforipinproxy_list:#遍历每个ip地址,port=ip.split(':')#splitip和porttry:telnetlib.Telnet(address,port,timeout=0.4)#检查代理ip是否有效,0.4秒超时print("\033[32m"+str(ip)+"\033[0m")#输出绿色字体#Linux只有效self.ips.append(ip)#Addtothelistexcept:print("\033[31m"+str(ip)+"\033[0m")#输出红色字体#Linux只有效#多线程操作select_ip_imformationmethoddefselect_start(self):ts=[]#Newlistforstoringallthreadsforiinrange(30):#随机查询30个ipt=threading.Thread(target=self.select_ip_imformation,args=())#创建线程t.start()#线程运行ts.append(t)#添加线程到ts#等待线程结束fortints:#遍历每个线程t.join()#等待线程结束print('ipqueryend')#查询代理ip地址方法defselect_ip_imformation(self):ip=random.choice(self.ips)#随机选择一个ip#输出该ip的ip信息e查询,并删除超时ip#proxies是代理ip,他aders为随机请求头,timeout超时时间为10秒self.proxy_type+'://'+ip},headers={'User-Agent':random.choice(user_agent)},timeout=10)exceptExceptionase:r=str(e)pass#Outputthequeriedip信息和查询失败信息ifhasattr(r,'status_code')andr.status_code==200:#如果r对象中有status_code则返回200try:#检查r是否有jsonprint("\033[32m"+''+str(ip)+''+str(r.json())+''+str(r)+"\033[0m")#Outputgreenfont#Linuxonlyvalidexcept:#Ifno返回jsonprint("\033[31m"+''+str(ip)+''+str(r)+"\033[0m")#输出红色字体#只对Linux有效passelse:#如果查询失败print("\033[31m"+''+str(ip)+''+str(r)+"\033[0m")#输出红色字体#只对Linux有效defmain():print('代理API返回类型')print('1.http')print('2.https')in_=input('请输入s选择序列号API返回的代理类型:')ifin_=='1':proxy_type='http'elifin_=='2':proxy_type='https'else:print('你的输入有误')returnmain()ip=Ip(proxy_type)#创建ip实例ip.get_api()#获取并多线程检测ipip.select_start()#多线程查询ip地址if__name__=='__main__':main()