博主写在前面的话:

早就有了搭建自己的动态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=Falseif 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_portproxies={'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:passelse:print('********************被墙*************************')

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

#用来测试代理池里面代理IP是否可用
import redis
import requests
import time
class test:def test_IP(r):# 从列表的尾部取出一个ipwhile 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 testif __name__ == '__main__':count_1=16count_2=17R =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_2count_2+=1test.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,谢谢观看,如有疑问欢迎留言。

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

  1. python房子代码_基于python的链家小区房价爬取——仅需60行代码!

    简介 首先打开相关网页(北京链家小区信息). 注意本博客的代码适用于爬取某个城市的小区二手房房价信息. 如果需要爬取其他信息,可修改代码,链家的数据获取的基本逻辑都差不多. 效果展示 因为只需要60行 ...

  2. python爬取南京市房价_基于python的链家小区房价爬取——仅需60行代码

    简介 首先打开相关网页(北京链家小区信息). 注意本博客的代码适用于爬取某个城市的小区二手房房价信息. 如果需要爬取其他信息,可修改代码,链家的数据获取的基本逻辑都差不多. 效果展示 因为只需要60行 ...

  3. python爬虫代码1000行-最精简的爬虫 --仅需4行代码(python)

    最精简的爬虫 --仅需4行代码(python) 刚刚整理了下爬虫系列,于是乎就开始了第一次的技术分享 今天,我们主要讲述的是思路,思路,思路. 相比起,直接贴代码,思路显的更为重要 当初,自己的坑,希 ...

  4. python加密敏感信息_仅需10行代码,使用python加密用户敏感数据

    原标题:仅需10行代码,使用python加密用户敏感数据 数据分析师必须要遵守的一个规则就是数据保密,但在跨部门沟通的时候,难免会有数据泄露的情况,所以,对于用户的姓名.手机号.地址等敏感信息,一般需 ...

  5. 最简单的爬虫代码 python_最精简的爬虫 --仅需4行代码(python)

    最精简的爬虫 --仅需4行代码(python) 刚刚整理了下爬虫系列,于是乎就开始了第一次的技术分享 今天,我们主要讲述的是思路,思路,思路. 相比起,直接贴代码,思路显的更为重要 当初,自己的坑,希 ...

  6. python简单爬虫代码-最精简的爬虫 --仅需4行代码(python)

    最精简的爬虫 --仅需4行代码(python) 刚刚整理了下爬虫系列,于是乎就开始了第一次的技术分享 今天,我们主要讲述的是思路,思路,思路. 相比起,直接贴代码,思路显的更为重要 当初,自己的坑,希 ...

  7. Python生成动态二维码,只需几行代码,这也太有意思了~

    兄der们,今天我们试试只用几行代码,生成动态二维码! 来吃够~ 模块相关 我们要用到的是,MyQR这个库, 当然,最直接的方式,就是pip install pip install MyQR 参数讲解 ...

  8. 电子木鱼这么火?Python仅需50行代码实现(附代码,及素材)

    背景 效果展示 代码 素材 背景 最近在刷某音的时,发现一款电子木鱼非常的火爆.这款软件可以说是积功德的神器,敲一下功德+1,敲一下+1.成功的吸引了我的注意,便有了这个迷你项目.成功的复刻了其加功德 ...

  9. 干货案例!Python实现视频批量加水印,仅需50行代码

    最近由于工作安排,同事需要经常大批量给视频添加水印,昨天反馈给我说,用的某软件批量添加水印过程真的很繁琐,效率也很低,加一个水印要好几分钟时间,你能不能帮我开发一个小工具直接达到"一键添加& ...

最新文章

  1. ActiveMQ入门系列二:入门代码实例(点对点模式)
  2. 从零单排学Redis【铂金一】
  3. [蓝桥杯] 连号区间数
  4. 如何检测C语言中的内存漏洞(leak)?
  5. 厦门one_理想ONE真是“500万内最好的车”?
  6. pcl如何设置colorbar_突然加更 | 子图、colorbar和标题
  7. (192)FPGA上电后IO的默认状态(Vivado软件默认为1)
  8. (五)深度学习和ResNet50的COVID-19诊断结果
  9. php输出内容到页面,php实时输出内容
  10. Atitit 切入一个领域的方法总结 attilax这里,机器学习为例子
  11. HCIE-Security Day6:5个实验深入浅出理解源NAT
  12. 记一次在广州看牙医经历
  13. Kali Linux破解WiFi密码完整步骤
  14. 接口测试 如何编写接口测试用例
  15. 鸿蒙os系统使用技巧,鸿蒙OS 应用权限管理
  16. java项目笔记 - 第18章:坦克大战2.1
  17. shell输出标准时间格式
  18. python爬新闻并保存csv_Python简单爬虫导出CSV文件的实例讲解
  19. 港交所拟修改科技公司上市规则;日本打造出世界首款可载人机器人;芯片巨头花费610亿美元收购云计算产业 | 每日大事件...
  20. 我们精心设计的CAD图纸怎么转换为JPG格式

热门文章

  1. “德阳造”水上智能清污机器人 一次可收集500公斤垃圾
  2. 泛函分析——内积空间定义的概念
  3. 跟相亲对象微信聊什么?聊天绝学四步走一试便知有没有
  4. 路由器刷机解决学校无线上网问题(小米4A千兆版)
  5. 关于Java双大括号{{}}
  6. 微信公众号的Api 一些说明 关于 WeixinJSBridge API
  7. 商业模式新生代_免费商业模式——《商业模式新生代》读书笔记之五
  8. 英语好不好,不影响做外贸
  9. 基于android的智慧停车app
  10. 用计算机计算的定义,计算(数学用语)_百度百科