redis+Python实现小型动态IP池的搭建,仅需90行代码

您所在的位置:网站首页 python微服务动态代理 redis+Python实现小型动态IP池的搭建,仅需90行代码

redis+Python实现小型动态IP池的搭建,仅需90行代码

2024-07-09 19:26:34| 来源: 网络整理| 查看: 265

博主写在前面的话:

早就有了搭建自己的动态IP池的想法,怎奈技术不够,看过好多大佬的动态IP池,觉得大佬们写的IP池太成熟了,不适合我们这些菜鸟入门。这篇博客的受众是想搭建自己动态IP池的初学者,大佬级别的自动跳过本文。

搭建思路分析:

我的IP池是用Python和redis数据库搭建的,这里只演示了抓取http协议的IP,抓取动态IP选取的对象为快代理,网站为:https://www.kuaidaili.com/free/inha/,抓取之后将可用的IP存入redis中,并实时监测redis中的IP是否可用,若可用留下,若不可用就剔除。用flask写了一个接口API,将redis中的IP以网页的暴露出来以便调用。

代码如下:首先我写了一个爬取快代理IP的crawl_IP.py文件如下:

import requests from bs4 import BeautifulSoup from fake_useragent import UserAgent import time import bs4 class crawl: def page_kuai(page,r): ua = UserAgent() headers={'User-Agent':ua.random} html=requests.get('https://www.kuaidaili.com/free/inha/'+str(page),headers=headers)#删除作者参数 ,verify=False if html.status_code == 200: Soup=BeautifulSoup(html.text,'lxml') tbody=Soup.find('tbody') if isinstance(tbody,bs4.element.Tag): tr_list=tbody.find_all('tr') for tr in tr_list: try: IP_adress=tr.find('td').get_text() IP_port=tr.find('td',attrs={'data-title':"PORT"}).get_text() IP="http://"+IP_adress+":"+IP_port proxies={'http':IP} #print(proxies) try: response = requests.get('http://www.baidu.com', proxies=proxies,timeout=6)######### r.lpush('IP',IP) print("可yong+1"+IP) except : print("false") except Exception: pass else: print('********************被墙*************************')

然后我写了一个test.py文件用来检测redis中的IP是否可用,代码如下:

#用来测试代理池里面代理IP是否可用 import redis import requests import time class test: def test_IP(r):# 从列表的尾部取出一个ip while r.llen('IP') >12 : try: ip=str(r.rpop('IP'),encoding='utf-8')# redis导出的数据都是bytes类型的,所以我们必须将其str化,必须加enconding参数 proxies = {'http': ip}# 测试ip有没有用 try: html=requests.get("http://www.baidu.com",proxies=proxies,timeout=6) if html.status_code == 200: r.lpush('IP',ip) print('valid IP') except : print('丢弃无用的ip') time.sleep(3) except : print("IP池枯竭") #time.sleep(20)

然后就写了一个run.py来运行这个代理池,代码如下:  

from crawl_IP import crawl import redis import time from tester import test if __name__ == '__main__': count_1=16 count_2=17 R =redis.Redis(host='localhost',port=6379,db=2,password="") while 1 : while R.llen('IP') < 15 : for i in range(count_1,count_2): crawl.page_kuai(i,R) time.sleep(2) count_1=count_2 count_2+=1 test.test_IP(R)

最后写了一个接口文件api.py来暴露IP,值得注意的是在我另外一篇文章里写过关于api.py运行的问题https://mp.csdn.net/postedit/88383011,代码如下:

# coding:utf-8 # 用于做接口,使其他的程序能够获得这个程序的开发出来的有用的IP from flask import Flask import redis __all__ = ['app'] app = Flask(__name__) @app.route('/') def get_proxy(): R =redis.Redis(host='localhost',port=6379,db=2,password="") ip=R.rpop('IP') R.lpush('IP',ip) return ip app.run() # 当你运行这段代码时,在浏览器中输入localhost:5000,就会出现ip

源码在我github里:https://github.com/coder23263/IP_Proxy,谢谢观看,如有疑问欢迎留言。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭