Python如何爬取免费爬虫ip

news2024/10/2 20:31:59

做过大数据抓取的程序员应该都知道,正常市面上的爬虫ip只分为两种,一种是API提取式的,还有一种是账密形式隧道模式的。往往因为高昂费用而止步。对于初学者觉得没有必要,我们知道每个卖爬虫ip的网站有的提供了免费IP,可是又很少,写了个爬虫ip池 。学习应该就够了。

爬虫ip池:
1,在各大网站爬取免费爬虫ip
2,检查ip可用 可用存入数据库1和2
3,在数据库1中拿出少量爬虫ip存入数据库2(方便维护)
4,定时检查数据库1和数据库2的爬虫ip数量,以及是否可用
5,调用端口

1、各大网站爬取免费爬虫ip

 1 def IPList_61():
 2   for q in [1,2]:
 3       url='http://www.66ip.cn/'+str(q)+'.html'
 4       html=Requestdef.get_page(url)
 5       if html!=None:
 6           #print(html)
 7           iplist=BeautifulSoup(html,'lxml')
 8           iplist=iplist.find_all('tr')
 9           i=2
10           for ip in iplist:
11              if i<=0:
12                  loader=''
13                  #print(ip)
14                  j=0
15                  for ipport in ip.find_all('td',limit=2):
16                      if j==0:
17                         loader+=ipport.text.strip()+':'
18                      else:
19                          loader+=ipport.text.strip()
20                      j=j+1
21                  Requestdef.inspect_ip(loader)
22              i=i-1
23       time.sleep(1)

多写几个这样的方法

2,检查ip可用 可用存入数据库1,和2。

3,在数据库1中拿出少量爬虫ip存入数据库2(方便维护)。

def inspect_ip(ipprot):
 2     time.sleep(1)
 3     herder={
 4         "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36",
 5         'Accept-Encoding':'gzip, deflate',
 6         'Accept-Language':'zh-CN,zh;q=0.9',
 7         'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
 8         'Upgrade-Insecure-Requests':'1'
 9
10     }
11
12     url='https://www.baidu.com'
13     proxies = { "http": "http://"+str(ipprot) }
14     request=requests.get(url,headers=herder,proxies=proxies)
15     if request.status_code==200:
16         print('可用爬虫ip'+ipprot)
17         if Db.r.llen('Iplist')<=50:
18            Db.add_ip(ipprot)
19         #Alt.iplist.append(ipprot)
20
21         else:
22            Db.add_ips(ipprot)
23     else:
24         print('不可用爬虫ip'+ipprot)

我这里是用的www.baidu.com检测的 给主IP的数据库长度是50 (太多了不好维护)。

4、定时检查数据库1和数据库2的爬虫ip数量,以及是否可用

#检查ip池数量
def time_ip():
 
    while True:
        time.sleep(5)
        Db.act_lenip()
 
#检查备用池数量
def time_ips():
    while True:
        time.sleep(30)<br>        #当备用池数量小于100 再次获取
        if Db.len_ips()<100:
            print('填数据')
            Acting_ip.iplist()
#程序入口
if __name__ == '__main__':
 
  t1=threading.Thread(target=time_ip)
  t1.start()
  t2=threading.Thread(target=time_ips)
  t2.start()
  t1.join()
  t2.join()

给他2个线程
Db.py

1 #coding:utf-8
 2 import redis
 3 import Requestdef
 4 r = redis.Redis(host='127.0.0.1', port=6379)#host后的IP是需要连接的ip,本地是127.0.0.1或者localhost
 5 #主ip池
 6 def add_ip(ip):
 7      r.lpush('Iplist',ip)
 8 #备用ip池
 9 def add_ips(ip):
10      r.lpush('Iplists',ip)
11 #备用ip池第一个开始取出
12 def app_ips():
13      i=str(r.lindex('Iplists',1),encoding='utf-8')
14      r.lrem('Iplists',i,num=0)
15      return i
16 def len_ips():
17     return r.llen('Iplists')
18 def len_ip():
19     return r.llen('Iplist')
20 #第一个开始取出
21 def app_ip():
22      i=str(r.lpop('Iplist'),encoding='utf-8')
23      return i
24 #取出从最后一个开始
25 def rem_ip():
26     i=str(r.rpop('Iplist'),encoding='utf-8')
27     return i
28 #检查主ip池
29 def act_db():
30     for i in range(int(r.llen('Iplist')/2)):
31        Requestdef.inspect_ip(rem_ip())
32
33 #如果ip池数量少于25个 则填满
34 def act_lenip():
35     if r.llen('Iplist')<25:
36         print('填ip')
37         while r.llen('Iplist')<=50:
38           Requestdef.inspect_ip(app_ips())

5、调用端口 使用flask库创建接口

1 from flask import Flask
 2 import Db
 3
 4 app = Flask(__name__)
 5
 6 @app.route('/', methods=['GET'])
 7 def home():
 8     return 'What is?'
 9
10 @app.route('/get', methods=['GET'])
11 def homsse():
12     return Db.app_ip()
13 #线程池数量
14 @app.route('/count', methods=['GET'])
15 def homsssse():
16     return str(Db.len_ip())
17 app.run(debug=True)

就完成了
在这里插入图片描述
在这里插入图片描述

运行api
在这里插入图片描述

数据库里面的 Iplist为主Ip池 iplist 为备用ip池。

用get调用 用一次就删一个。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/7392.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于CentOS使用宝塔+Nginx搭建个人小H站

本文目录前言第一步 - 购置服务器第二步 - 连接服务器第三步 - 安装宝塔第四步 - 部署网站总结前言 最近心血来潮&#xff0c;恰逢帅地老哥在公众号搞活动&#xff0c;白嫖了一台服务器&#xff0c;于是打算搭一个小网站玩玩。其实早有此念头&#xff0c;只是因为懒(●ˇ∀ˇ●…

项目实战——实现注册和登录模块

目录 一、整体框架 二、实现JwtToken验证 1、添加依赖 2、编写、修改相关类 三、实现后端 API 四、实现前端的登录&#xff0c;注册界面 ps&#xff1a;本篇文章篇幅较长&#xff0c;且难度有所提升&#xff0c;希望大家耐心看完&#xff0c;种一棵树最好的时间是十年前&…

ヾ(⌐ ■_■)— HTML-CSS常用属性

目 录 1.文字的设置 (1)文字的基本属性&#xff08;font&#xff09; (2)文字的排版以及添加文字的修饰 2.颜色的设置 3.背景的设置&#xff08;background&#xff09; 4.边框的相关设置 (1)边框样式的设置&#xff08;border-style&#xff09; (2)边框宽度的设置…

操作系统4小时速成:操作系统发展和分类,运行环境:运行机制和内核,用户态非特权,核心态特权,中断技术,访管指令

操作系统4小时速成&#xff1a;操作系统发展和分类&#xff0c;运行环境&#xff1a;运行机制和内核&#xff0c;用户态非特权&#xff0c;核心态特权&#xff0c;中断技术&#xff0c;访管指令 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂…

有趣的 Go HttpClient 超时机制

hello&#xff0c;大家好呀&#xff0c;我是既写 Java 又写 Go 的小楼&#xff0c;在写 Go 的过程中经常对比这两种语言的特性&#xff0c;踩了不少坑&#xff0c;也发现了不少有意思的地方&#xff0c;今天就来聊聊 Go 自带的 HttpClient 的超时机制。 Java HttpClient 超时底…

Ubuntu22.04中root用户下依然权限不够,执行不了可执行文件

文章目录先看现象解决方法什么情况下会遇到这样的错误先看现象 provider是一个C语言编译得到的可执行文件。 开始&#xff0c;我直接运行它&#xff0c;告诉我权限不够然后我加上sudo运行&#xff0c;告诉我找不到命令最后我进入root用户运行&#xff0c;竟然还告诉我权限不够…

PraNet: Parallel Reverse Attention Networkfor Polyp Segmentation

Tittle:用于息肉分割的并行反向注意力网络 摘要 准确的息肉分割主要面临着两个难点&#xff1a;1&#xff09;相同类型的息肉有不同的大小&#xff0c;颜色和纹理。2&#xff09;息肉与周围粘膜的边界模糊不清晰。 为了解决这些挑战本文提出了一种并行反向注意网络ParNet。具…

10、MySQL——子查询

目录 一、子查询 1、子查询出现的位置 2、子查询结果集的形式 二、实例演示 1、查询工资高于JONES的员工 1.1 分析 1.2 代码 2、查询与SCOTT同一部门的员工 2.1 分析 2.2 代码 3、工资高于30号部门所有人的员工信息 3.1 分析 3.2 代码 4、查询工作和工资…

mannose-OH|甘露糖-羟基|mannose-PEG-OH|甘露糖-聚乙二醇-羟基

mannose-OH|甘露糖-羟基|mannose-PEG-OH|甘露糖-聚乙二醇-羟基 羟基&#xff08;oxhydryl&#xff09;是一种常见的极性基团&#xff0c;化学式为-OH。羟基与水有某些相似的性质&#xff0c;羟基是典型的极性基团&#xff0c;与水可形成氢键&#xff0c;在无机化合物水溶液中以…

钙尔奇30周年以行动,力挺中国骨骼健康发展

启动行动力赋能新旅程 近日&#xff0c;2022年度西普会于中国海南博鳌盛大举行。以“构筑患者价值同心圆——二元发展驱动健康产业新增长”为主题&#xff0c;本届西普会的会议内容和参会主体全面升维&#xff0c;从全球视野到中国特色聚合优质资源、拓宽产业边界&#xff0c;…

vue项目中实际构建echarts拓扑关系图业务

vue项目中实际构建echarts拓扑关系图业务前言一、关系拓扑是什么&#xff1f;二、需求梳理三、封装关系图组件1.父组件引用2.测试数据引入3.封装关系子组件4.关系组件完整代码总结前言 由于现在echarts的利用率增强&#xff0c;需要用到拓扑图的设计&#xff0c;如果单纯针对e…

Ubuntu虚拟机安装

文章目录VMware添加虚拟机等待开机&#xff08;需要一些时间安装系统&#xff09;检查网络环境设置 Ubuntu 中文支持一些基础设置VMware添加虚拟机 文件——>新建虚拟机 下一步&#xff1a;安装程序光盘映像文件&#xff08;iso&#xff09; 设置主机名&#xff0c;用户名及…

reportportal 集成 robotframework 自动化执行及结果可视化

最近领导想了个需求&#xff0c;想把目前组内在linux平台上执行的自动化脚本搞成可视化&#xff0c;如果是web站点相关日志可视化倒是简单了&#xff0c;ELK就是不错的选择&#xff0c;大部分可视化项目这种的&#xff0c;可以做的开起来很炫。 我们这边是自己写的脚本&#x…

机器学习西瓜书-1-2章

学习目标&#xff1a; 概览机器学习西瓜书 1、2章 学习内容&#xff1a; 第一章 绪论 1.1 基本术语 1.2 假设空间 1.3 归纳偏好 1.4 发展历程 第二章 模型评估与选择 2.1 经验误差与过拟合 2.2 评估方法 2.3 性能度量 学习时间&#xff1a; 两天 学习产出&#xff1a; 第…

爱了爱了,20个好用到爆的 Python 函数

大家好&#xff0c;今天分享20个日常工作中必不可少的Python函数&#xff0c;这些函数平时看到的不多&#xff0c;但是它们使用起来倒是非常的方便&#xff0c;它们可以大幅度地提高工作效率。内容较长&#xff0c;欢迎收藏学习&#xff0c;喜欢点赞支持。 文章目录技术提升isi…

你以为的Java面试只是背答案?跳槽涨薪不还是得靠自己的技术

前言 Java面试当然不能只靠背答案&#xff0c;为了应付面试背完答案拿到offer只是进入了这个行业&#xff0c;后面的实操还是得看自己的技术&#xff01;技术的挂钩当然和技术底层也是挂钩的。 这是我在工作、面试中学习并总结到的一些知识点&#xff0c;都是一些比较典型的、…

Kafka 消息过期策略(时间相关参数)

Kafka 消息过期策略&#xff08;时间相关参数&#xff09; 标记delete时效 (CDH配置项)log.retention.ms &#xff08;Kafka offset配置&#xff09;retention.ms 标记delete的真删底层文件 delete.delay.ms log.segmetn.delete 背景&#xff1a;在不需要重启kafka的情况下&a…

QA特辑|剪得断,理不乱,一场直播解开关联网络与反团伙欺诈谜团

11月 10 日下午15:00 第九期《关联网络技术在业务安全中的应用》正式开讲。顶象数据科学家翼龙详尽的介绍了关联网络在反团伙欺诈中的作用&#xff0c;深度剖析了关联网络的技术框架、关联网络的图谱构建以及关联网络的复杂算法&#xff0c;为反团伙欺诈提供了重要的参考。 直播…

6.jeecg的pom结构

1.父pom parent为springboot 1.子模块部分 包括base-core、demo、system三个 air为自己新建 2.maven仓库部分 3.dependencies 这个是主动引入的依赖&#xff0c;子pom会继承 4.dependencyManagement 这个有点多&#xff0c;主要作用是先把依赖添加进来&#xff0c;但是…

python安装 learn2learn库 || 在线安装方式或者本地安装

文章目录1. 去github下载完整安装包&#xff08;或本文的百度网盘&#xff09;2. 安装C依赖库3 本地安装4 在线安装&#xff08;不想本地安装 看这儿&#xff01;&#xff09;1. 去github下载完整安装包&#xff08;或本文的百度网盘&#xff09; github连接 https://github.c…