java如何建立爬虫代理ip池
发表于:2025-01-30 作者:千家信息网编辑
千家信息网最后更新 2025年01月30日,这篇文章主要介绍了java如何建立爬虫代理ip池,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。步骤说明1、要从提供代理ip的网站上抓取
千家信息网最后更新 2025年01月30日java如何建立爬虫代理ip池
这篇文章主要介绍了java如何建立爬虫代理ip池,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
步骤说明
1、要从提供代理ip的网站上抓取ip。
2、初步过滤捕获的ip。例如,从一开始就过滤IP类型不是HTTPS,IP链接速度超过2秒。
3、对于符合要求的IP,进行质量检查,判断是否可用。这一步是检查IP的质量,也就是说这一步刷掉了很多IP。
4、将符合要求的ip写入Redis数据库,并以List形式存储在Redis中。
5、设置一个抓取周期来更新您的IP代理池(抓取并处理新的IP后,我们清空原始数据库,并将新的IP写入其中)
实例
#!/usr/bin/env python3# -*- coding: utf-8 -*-import requests,threading,datetimefrom bs4 import BeautifulSoupimport random """1、抓取代理网站的代理ip2、并根据指定的目标url,对抓取到ip的有效性进行验证3、最后存到指定的path""" # ------------------------------------------------------文档处理--------------------------------------------------------# 写入文档def write(path,text): with open(path,'a', encoding='utf-8') as f: f.writelines(text) f.write('\n')# 清空文档def truncatefile(path): with open(path, 'w', encoding='utf-8') as f: f.truncate()# 读取文档def read(path): with open(path, 'r', encoding='utf-8') as f: txt = [] for s in f.readlines(): txt.append(s.strip()) return txt# ----------------------------------------------------------------------------------------------------------------------# 计算时间差,格式: 时分秒def gettimediff(start,end): seconds = (end - start).seconds m, s = divmod(seconds, 60) h, m = divmod(m, 60) diff = ("d:d:d" % (h, m, s)) return diff# ----------------------------------------------------------------------------------------------------------------------# 返回一个随机的请求头 headersdef getheaders(): user_agent_list = [ \ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1" \ "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11", \ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6", \ "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6", \ "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1", \ "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5", \ "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5", \ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", \ "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", \ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", \ "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", \ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", \ "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", \ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", \ "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", \ "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3", \ "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24", \ "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24" ] UserAgent=random.choice(user_agent_list) headers = {'User-Agent': UserAgent} return headers# -----------------------------------------------------检查ip是否可用----------------------------------------------------def checkip(targeturl,ip): headers =getheaders() # 定制请求头 proxies = {"http": "http://"+ip, "https": "http://"+ip} # 代理ip try: response=requests.get(url=targeturl,proxies=proxies,headers=headers,timeout=5).status_code if response == 200 : return True else: return False except: return False #-------------------------------------------------------获取代理方法----------------------------------------------------# 免费代理 XiciDailidef findip(type,pagenum,targeturl,path): # ip类型,页码,目标url,存放ip的路径 list={'1': 'http://www.xicidaili.com/nt/', # xicidaili国内普通代理 '2': 'http://www.xicidaili.com/nn/', # xicidaili国内高匿代理 '3': 'http://www.xicidaili.com/wn/', # xicidaili国内https代理 '4': 'http://www.xicidaili.com/wt/'} # xicidaili国外http代理 url=list[str(type)]+str(pagenum) # 配置url headers = getheaders() # 定制请求头 html=requests.get(url=url,headers=headers,timeout = 5).text soup=BeautifulSoup(html,'lxml') all=soup.find_all('tr',class_='odd') for i in all: t=i.find_all('td') ip=t[1].text+':'+t[2].text is_avail = checkip(targeturl,ip) if is_avail == True: write(path=path,text=ip) print(ip) #-----------------------------------------------------多线程抓取ip入口---------------------------------------------------def getip(targeturl,path): truncatefile(path) # 爬取前清空文档 start = datetime.datetime.now() # 开始时间 threads=[] for type in range(4): # 四种类型ip,每种类型取前三页,共12条线程 for pagenum in range(3): t=threading.Thread(target=findip,args=(type+1,pagenum+1,targeturl,path)) threads.append(t) print('开始爬取代理ip') for s in threads: # 开启多线程爬取 s.start() for e in threads: # 等待所有线程结束 e.join() print('爬取完成') end = datetime.datetime.now() # 结束时间 diff = gettimediff(start, end) # 计算耗时 ips = read(path) # 读取爬到的ip数量 print('一共爬取代理ip: %s 个,共耗时: %s \n' % (len(ips), diff)) #-------------------------------------------------------启动-----------------------------------------------------------if __name__ == '__main__': path = 'ip.txt' # 存放爬取ip的文档path targeturl = 'http://www.cnblogs.com/TurboWay/' # 验证ip有效性的指定url getip(targeturl,path)
感谢你能够认真阅读完这篇文章,希望小编分享的"java如何建立爬虫代理ip池"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
代理
文档
篇文章
类型
线程
时间
检查
爬虫
有效
数据
数据库
有效性
目标
网站
质量
处理
验证
原始
普通
也就是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
如何做网络共享服务器
数据库与web技术
打开访客网络安全吗
互联网科技巨头股价
苹果系统出现无法连接服务器
软件开发部门的职责
明日之后哪个服务器好卖东西
异地灾备网络安全技术
戴尔高性价比服务器
c 数据库编程入门经典
数据库生成图形走势图
不同的数据库用的语言相同么
东西湖区网络安全学院招标
安徽网络技术服务供应商
共和党数据库
百单网互联网科技有限公司规模
六代蜂窝网络技术
软件开发微服务
软件开发第九讲
奉贤区网络技术哪家好
与数据库交互技术有哪些
交易软件开发工程师
玖萌互联网科技有限公司
福建二代数据库
计算机3级网络技术贴吧
网络安全红蓝军对抗演练
软件开发项目的税率是多少
网络安全等级最高的是几级
ntc计算机网络技术考卷
腾讯云自己服务器ip