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

Python爬取高隐藏代理IP(再也不用担心进小黑屋了)

时间:2023-03-26 13:54:09 Python

为什么要使用代理IP很多数据网站对反爬虫都有一定的限制。如果写过一些爬虫程序的小伙伴应该都深有体会。其实主要是IP进入了小黑屋,所以为了安全,不能用自己的实际IP去爬别人的网站。这时候就需要使用代理IP来做这些事情了...为什么要使用高匿名代理我们可以比较一下不同类型代理的区别。根据代理的匿名程度,代理可以分为以下几类:高度匿名代理:会原封不动地转发数据包,看起来真的是普通客户端访问,记录的IP就是IP代理服务器。普通匿名代理:会对数据包做一些改动。服务器可能会发现这是一个代理服务器,有一定的机会追查到客户端的真实IP。透明代理:不仅改变数据包,还把客户端的真实IP告诉服务器。间谍代理:指组织或个人创建的代理服务器,用于记录用户传输的数据,进而进行研究、监控等。运行环境Python运行环境:Windows+python3.6使用的模块:requests,bs4,json如果没有安装该模块,请使用pipinstatllxxxxxx安装,例如:pipinstallrequests爬取这里的西瓷代理IP,我仅关于爬取西瓷高尼代理50页的数据,当然爬取100页,全部爬取都是可以的,就不多说了;defrun(self):"""执行入口"""page_list=range(1,51)withopen("ip.json","w")aswrite_file:forpageinpage_list:#分页抓取数据print('开始爬取页面IP数据'+str(page)+'')ip_url=self.base_url+str(page)html=self.get_url_html(ip_url)soup=BeautifulSoup(html,'html.parser')#IP列表ip_list=soup.select('#ip_list.odd')forip_trinip_list:#单个IP信息td_list=ip_tr.select('td')ip_address=td_list[1].get_text()ip_port=td_list[2].get_text()ip_type=td_list[5].get_text()info={'ip':ip_address,'port':ip_port,'type':ip_type}#先检查IP的合法性,然后存储check_res=self.check_ip(info)ifcheck_res:print('IPisvalid:',info)self.json_data.append(info)else:print('IPisinvalid:',info)json.dump(self.json_data,write_file)检查代理IP是否有效爬取到的代理IP可能不可用。为了使用方便,不会报太多异常错误,所以需要检查IP是否可以正常使用,是否是有效的代理IP。我这里列一下三个网站都可以很方便的检测IP地址是否可以有效使用http://icanhazip.com/这个网站可以直接返回代理的IP地址https://www.ip.cn/查询代理的IP地址和位置信息http://ip.chinaz.com/站长工具也可以定位IP地址和位置信息defcheck_ip(self,ip_info):"""测试IP地址是否有效"""ip_url=ip_info['ip']+':'+str(ip_info['port'])proxies={'http':'http://'+ip_url,'https':'https://'+ip_url}res=Falsetry:request=requests.get(url=self.check_url,headers=self.header,proxies=proxies,timeout=3)ifrequest.status_code==200:res=True除了Exceptionaserror_info:res=FalsereturnresstoreproxyIP我这里就不搞那些花里胡哨的东西了,我直接把所有有效代理IP的json格式的数据存到文件里,当然也可以存到MongoDB或者MySQL数据中在数据库中,不管怎么存,使用时随机选择一个IP,更方便快捷完整的code代码我已经上传到GitHub(GitHub源码地址),但是,作为一个热心搬瓦工,为了方便一些想偷懒的人不要直接去交友网站查看,我也会在这里发布源代码。如果有什么问题,最好在约会网站上找我,请接受代码...#!/usr/bin/envpython#-*-coding:utf-8-*-"""Userequests+bs4爬取国内高隐代理IPAuthor:gxcuizydate:2020-06-19"""importrequestsfrombs4importBeautifulSoupimportjsonclassGetIpData(object):"""爬取50页国内高隐代理IP"""header={'User-Agent':'Mozilla/5.0(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/83.0.4103.106Safari/537.36'}base_url='https://www.xicidadaili.com/nn/'check_url='https://www.ip.cn/'json_data=[]defget_url_html(self,url):"""请求页面html"""request=requests.get(url=url,headers=self.header,timeout=5)html=Falseifrequest.status_code==200:html=request.contentreturnhtmldefcheck_ip(self,ip_info):"""测试IP地址是否有效"""ip_url=ip_info['ip']+':'+str(ip_info['port'])proxies={'http':'http://'+ip_url,'https':'https://'+ip_url}res=Falsetry:request=requests.get(url=self.check_url,headers=self.header,proxies=proxies,timeout=3)ifrequest.status_code==200:res=True除了Exceptionaserror_info:res=Falsereturnresdefrun(self):"""Executionentry"""page_list=range(1,51)withopen("ip.json","w")aswrite_file:forpageinpage_list:#按页抓取数据print('开始抓取'+str(page)+'页面IP数据')ip_url=self.base_url+str(page)html=self.get_url_html(ip_url)soup=BeautifulSoup(html,'html.parser')#IP列表ip_list=soup.select('#ip_list.odd')forip_trinip_list:#单个IP信息td_list=ip_tr.select('td')ip_address=td_list[1].get_text()ip_port=td_list[2].get_text()ip_type=td_list[5].get_text()info={'ip':ip_address,'port':ip_port,'type':ip_type}#在存储check_res之前先检查IP的合法性=self.check_ip(info)ifcheck_res:print('IPisvalid:',info)self.json_data.append(info)else:print('IPisinvalid:',info)json.dump(self.json_data,write_file)#Programmainentryif__name__=='__main__':#Instantiateip=GetIpData()#executethescriptip.run()最后的老规矩,有问题可以留言或者通过各种渠道,大家可以互相学习交流,共同成长……