java如何建立爬虫代理ip池
发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,这篇文章主要介绍了java如何建立爬虫代理ip池,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。步骤说明1、要从提供代理ip的网站上抓取
千家信息网最后更新 2024年11月23日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安全错误
数据库的锁怎样保障安全
网络安全规范专业人员怎么规定的
h5循环读取数据库信息
对比两台服务器时间
论文数据库的安全性
团房互联网络科技
电子政务网络安全管理办法
高房服务器
手机软件开发有哪些部门
成都服务器报废公司有哪些
达梦数据库怎么清空表
银行软件开发面试基础知识
春季高考网络技术试题
民政局 网络安全组织领导
如何从数据库读取数据
有网络安全专业的大学排名
知网标准数据库在哪
视频安全接入服务器
河南通用软件开发代理价钱
软件开发技术管理系统研发
宁波第二届网络安全大赛
淮南市网络安全支队
服务器买回来能赚钱吗
重庆嵌入式软件开发定制
软件开发模型各自的适用范围
网络安全责任情况
软件开发者叫什么
投资5g网络安全三线蓝筹股
数据库技术与运用视频教学
怎么同时管理100台服务器
常见计算机网络技术销售公司