使用proxy_pool来为爬虫程序自动更换代理IP

news2024/11/17 21:29:30

文章目录

  • 1. 前言
  • 2. 教程
  • 3. 官网
  • 4. 在线demo
    • 4.1. 本地部署
    • 4.2. 安装
      • 4.2.1. Python源码构建安装
        • 4.2.1.1. 安装redis数据库
          • 4.2.1.1.1. 下载redis源码
          • 4.2.1.1.2. 启动redis服务
          • 4.2.1.1.3. 安装redis服务
          • 4.2.1.1.4. 再次通过命令启动redis服务
          • 4.2.1.1.5. 测试redis服务是否可用
        • 4.2.1.2. 下载proxy_pool源码
        • 4.2.1.3. 安装依赖
        • 4.2.1.4. 更新配置
          • 4.2.1.4.1. 配置参数
          • 4.2.1.4.2. 配置参数案例
        • 4.2.1.5. 启动项目
        • 4.2.1.6. 测试API的调用
          • 4.2.1.6.1. 直接打开网页版
          • 4.2.1.6.2. 代码测试
      • 4.2.2. docker安装
      • 4.2.3. API调用
  • 5. 报错

1. 前言

  • 之前做爬虫的时候,经常会遇到对于一个网页,使用同一个IP多次会被禁掉IP的问题,我们可以自己手动更换代理IP再继续这个问题但多少会有点麻烦,我对于一个懒人来说,手动更换IP太麻烦,而且也不符合程序员懒惰的美德,于是便有了下面的故事。
  • proxy_pool 是一个开源的代理池,聚合了各大免费ip 代理池。当自己的爬虫因为爬的太快了 ip 被封了的时候,代理池就可以派上用场啦
  • 爬虫代理IP池项目,主要功能为定时采集网上发布的免费代理验证入库,定时验证入库的代理保证代理的可用性,提供API和CLI两种使用方式。同时你也可以扩展代理源以增加代理池IP的质量和数量。

2. 教程

  • 部署自己的代理池 - idealclover

3. 官网

  • GitHub - jhao104/proxy_pool: Python爬虫代理IP池(proxy pool)

4. 在线demo

  • demo.spiderpy.cn/

4.1. 本地部署

4.2. 安装

  • python爬虫添加代理ip池ProxyPool (Windows) - 灰信网(软件开发博客聚合)

4.2.1. Python源码构建安装

4.2.1.1. 安装redis数据库

4.2.1.1.1. 下载redis源码
  • Windows下安装Redis图文教程_喵代王-香菜的博客-CSDN博客_windows安装redis
  • windows首先下载安装Redis安装包,并解压到合适位置(放哪都行)
4.2.1.1.2. 启动redis服务
  • cmd进入文件位置
  • redis-server.exe redis.windows.conf
4.2.1.1.3. 安装redis服务
  • 再打开一个cmd窗口,输入下面的命令,将Redis安装到Windows服务中
  • redis-server --service-install redis.windows.conf
  • 查看是否添加进去了服务
  • services.msc
4.2.1.1.4. 再次通过命令启动redis服务
  • 关闭第一个“启动服务”cmd窗口,另开一个cmd窗口,启动服务
  • redis-server --service-start
  • 关闭服务命令
  • redis-server --service-stop
4.2.1.1.5. 测试redis服务是否可用
  • redis-cli.exe -h 127.0.0.1 -p 6379
  • 如果没报错,并且显示下面的界面的话,就表示这个redis服务现在可用

4.2.1.2. 下载proxy_pool源码

git clone git@github.com:jhao104/proxy_pool.git
  • 如果无法通过这种方法克隆的话,就手动下载吧
  • 或者直接下载特定的release版本
  • Releases · jhao104/proxy_pool · GitHub

4.2.1.3. 安装依赖

pip install -r requirements.txt

4.2.1.4. 更新配置

  • 配置文件 setting.py 位于项目的主目录下:
4.2.1.4.1. 配置参数
  • 配置参考 — ProxyPool 2.1.0 文档
  • 配置参数说明
  • 服务配置
  • HOST
  • API服务监听的IP, 本机访问设置为 127.0.0.1, 开启远程访问设置为: 0.0.0.0
  • PORT
  • API服务监听的端口.
  • 数据库配置
  • DB_CONN
  • 用户存放代理IP的数据库URI, 配置格式为: db_type://[[user]:[pwd]]@ip:port/[db]
  • 目前支持的db_type有: ssdb 、 redis.
  • DB_CONN配置示例
# SSDB IP: 127.0.0.1  Port: 8888 
DB_CONN = 'ssdb://@127.0.0.1:8888' 
# SSDB IP: 127.0.0.1  Port: 8899  Password:  123456 
DB_CONN = 'ssdb://:123456@127.0.0.1:8888' 
 
# Redis IP: 127.0.0.1  Port: 6379 
DB_CONN = 'redis://@127.0.0.1:6379' 
# Redis IP: 127.0.0.1  Port: 6379  Password:  123456 
DB_CONN = 'redis://:123456@127.0.0.1:6379' 
# Redis IP: 127.0.0.1  Port: 6379  Password:  123456  DB: 15 
DB_CONN = 'redis://:123456@127.0.0.1:6379/15'
         - 我这里没有密码,所以直接就设置成了
         - DB_CONN = 'redis://@127.0.0.1:6379/0'
         - ![](https://img-blog.csdnimg.cn/img_convert/1f5a0a730e71f0290c6a6f68f1f9b37e.png) 
         - 
  • TABLE_NAME
  • 存放代理的数据载体名称, ssdb和redis的存放结构为hash.
  • 采集配置
  • PROXY_FETCHER
  • 启用的代理采集方法名, 代理采集方法位于 fetcher/proxyFetcher.py 类中.
  • 由于各个代理源的稳定性不容易掌握, 当某个代理采集方法失效时, 可以该配置中注释掉其名称.
  • 如果有增加某些代理采集方法, 也请在该配置中添加其方法名, 具体请参考 /dev/extend_fetcher.
  • 调度程序每次执行采集任务时都会再次加载该配置, 保证每次运行的采集方法都是有效的.
  • 这里需要实时进行更新
  • 校验配置
  • HTTP_URL
  • 用于检验代理是否可用的地址, 默认为 http://httpbin.org ,可根据使用场景修改为其他地址.
  • HTTPS_URL
  • 用于检验代理是否支持HTTPS的地址, 默认为 https://www.qq.com ,可根据使用场景修改为其他地址.
  • VERIFY_TIMEOUT
  • 检验代理的超时时间, 默认为 10 , 单位秒. 使用代理访问 HTTP(S)_URL 耗时超过 VERIFY_TIMEOUT 时, 视为代理不可用.
  • MAX_FAIL_COUNT
  • 检验代理允许最大失败次数, 默认为 0, 即出错一次即删除.
  • POOL_SIZE_MIN
  • 代理检测定时任务运行前若代理数量小于 POOL_SIZE_MIN, 则先运行抓取程序.
4.2.1.4.2. 配置参数案例
# Config.ini 为项目配置文件 
# 配置DB 
type = SSDB       # 如果使用SSDB或redis数据库,均配置为SSDB 
host = localhost  # db host 
port = 6379       # db port 
name = proxy      # 默认配置 
 
# 配置 ProxyGetter 
freeProxyFirst  = 1  # 这里是启动的抓取函数,可在ProxyGetter/getFreeProxy.py 扩展 
freeProxySecond = 1 
.... 
 
# 配置 HOST (api服务) 
ip = 127.0.0.1       # 监听ip,0.0.0.0开启外网访问 
port = 5010          # 监听端口 
# 上面配置启动后,代理api地址为 http://127.0.0.1:5010
  • 第一个port是你数据库端口号, 第二个是api端口号
  • 目标计算机积极拒绝 · Issue #118 · jhao104/proxy_pool · GitHub

4.2.1.5. 启动项目

  • 如果已配置好运行环境, 具备运行条件, 可以通过 proxyPool.py 启动. proxyPool.py 是项目的CLI入口. 完整程序包含两部份: schedule 调度程序server API服务, 调度程序负责采集验证代理, API服务提供代理服务HTTP接口.
  • 通过命令行程序分别启动 调度程序API服务:
  • 启动调度程序:python proxyPool.py schedule
  • 可以看到,正在采集对于IP,有的成功,有的失败
  • 最终稳定下来
  • 再开一个命令号,启动webApi服务:python proxyPool.py server
python proxyPool.py schedule
python proxyPool.py server

4.2.1.6. 测试API的调用

4.2.1.6.1. 直接打开网页版
  • 127.0.0.1:5010/get/
  • http://127.0.0.1:5010/get/
  • 这里需要注意的是,网址端口应该改成自己之前定义的端口
  • 每一次刷新上面的代理IP地址都会发生改变
4.2.1.6.2. 代码测试
import requests 
  
def get_proxy(): 
    #5000:settings中设置的监听端口,不是Redis服务的端口 
    return requests.get("http://127.0.0.1:5000/get/").json() 
  
def delete_proxy(proxy): 
    requests.get("http://127.0.0.1:5000/delete/?proxy={}".format(proxy)) 
  
# 主代码 
def getHtml(): 
    retry_count = 5 
    proxy = get_proxy().get("proxy") 
    print(proxy) 
    while retry_count > 0: 
        try: 
            html = requests.get('http://www.baidu.com', proxies={"http": "http://{}".format(proxy)}) 
            print(html.text) 
            break 
        except Exception: 
            retry_count -= 1 
    # 删除代理池中代理 
    delete_proxy(proxy) 
    return None 
  
getHtml()

4.2.2. docker安装

安装

docker pull jhao104/proxy_pool 
 
docker run --env DB_CONN=redis://:password@ip:port/0 -p 5010:5010 jhao104/proxy_pool:latest
  • 运行
docker-compose up -d

4.2.3. API调用

启动web服务后, 默认配置下会开启127.0.0.1:5010/ 的api接口服务:
参数

5. 报错

### APScheduler
werkzeug
Flask
requests
click
gunicorn
lxml
redis
  • pip uninstall -r requirements.txt

  • pip install -r requirements.txt

  • 运行出错! · Issue #663 · jhao104/proxy_pool · GitHub

之后就正常了

  • requests.exceptions.ConnectionError: HTTPConnectionPool(host=‘127.0.0.1’, port=5000): Max retries exceeded with url: /get/ (Caused by NewConnectionError(‘<urllib3.connection.HTTPConnection object at 0x000001AF5F88EAD0 Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。’))

  • 很简单,端口不匹配,更改即可

ctionPool**(host=‘127.0.0.1’, port=5000): Max retries exceeded with url: /get/ (Caused by NewConnectionError(‘<urllib3.connection.HTTPConnection object at 0x000001AF5F88EAD0 Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。’))

  • 很简单,端口不匹配,更改即可
    [外链图片转存中…(img-nAUDtJec-1671896468370)]

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

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

相关文章

node.js+uni计算机毕设项目基于微信小程序的车位共享系统LWPPT(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

C语言程序设计--银行管理系统

主界面 登入界面 #include <stdio.h> #include <malloc.h> #include <conio.h> #include <time.h> #include <windows.h> #define MB_ICONINFORMATION MB_ICONASTERISK //对 错误 struct account_information /…

腾讯云轻量应用服务器使用Matomo 应用镜像搭建网站流量统计系统!

Matomo 是一款开源的网站数据统计软件&#xff0c;可以用于跟踪、分析您的网站的流量&#xff0c;同时充分保障数据安全性、隐私性。该镜像基于 CentOS 7.6 64位操作系统&#xff0c;已预置 Nginx、MariaDB、PHP 软件。本文介绍如何使用 Matomo 快速搭建您的网站流量统计系统。…

【文本检测】2、DBNet++ | 为 DBNet 引入多级特征图聚合模块 ASF

文章目录一、背景二、方法2.1 Adaptive Scale Fusion (ASF) 模块2.2 Binarization2.3 Adaptive Threshold2.4 Deformable Convolution2.5 Label Generation2.6 Optimization三、效果论文&#xff1a;Real-Time Scene Text Detection with Differentiable Binarization and Adap…

Hadoop综合项目——二手房统计分析(可视化篇)

Hadoop综合项目——二手房统计分析&#xff08;可视化篇&#xff09; 文章目录Hadoop综合项目——二手房统计分析&#xff08;可视化篇&#xff09;0、 写在前面1、数据可视化1.1 二手房四大一线城市总价Top51.2 统计各个楼龄段的二手房比例1.3 统计各个城市二手房标签的各类比…

人工智能轨道交通行业周刊-第27期(2022.12.12-12.25)

本期关键词&#xff1a;虚拟中台、智轨、数字员工客服、钢轨光带异常、小目标检测 1 整理涉及公众号名单 1.1 行业类 RT轨道交通中关村轨道交通产业服务平台人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨…

4、前端笔记-JS-数据类型

1、数据类型简介 1.1为什么需要数据类型 不同的数据占用的存储空间不同&#xff0c;为了充分利用存储空间&#xff0c;便于把数据分成所需内存大小不同的数据&#xff0c;定义了不同的数据类型 1.2变量的数据类型 js是弱类型&#xff08;动态语言&#xff09;的语言&#x…

这12类Oracle日期函数,全都给你总结了

在使用Oracle数据库过程中&#xff0c;对日期的使用不可避免&#xff0c;那Oracle中的日期函数有哪些呢&#xff1f;本篇就日期函数进行整理了&#xff0c;不一定全部了解记住&#xff0c;但是要做到心中有数&#xff0c;以后在写脚本的时候就不会绕弯子了。 1、sysdate、curr…

大话设计模型 Task05 状态、适配、单例

目录一、状态模式问题描述问题分析模式定义代码实现二、适配器模式问题描述问题分析模式定义代码实现三、单例模式问题描述问题分析模式定义代码实现一、状态模式 问题描述 假设我们要描述一名员工一天不同时间的工作状态&#xff0c;正常来看是比较简单的&#xff0c;直接从…

卡塔尔世界杯半自动越位识别技术(SAOT)的工作原理

随着卡塔尔世界杯的深入举行&#xff0c;半自动越位识别技术 (Semi-automated offside technology&#xff0c;简称为 SAOT) 这项数字技术正在被越来越多的国内外球迷所熟知。 作为 VAR(Video Assistant Referee&#xff0c;视频助理裁判) 的扩展&#xff0c;SAOT 的引入是为了…

腾讯云轻量应用服务器使用 OpenFaaS 部署云函数!

OpenFaaS 是开源的流行 FaaS&#xff08;Function-as-a-Service&#xff0c;函数即服务&#xff09;框架&#xff0c;OpenFaaS 让开发者聚焦业务代码的编写&#xff0c;无需过多关注语言框架、部署、配置等其他步骤。 轻量应用服务器 Lighthouse 为您提供了 OpenFaaS 应用镜像…

C语言程序设计--个人账簿管理系统

目的在于&#xff1a; 为编码人员提供依据&#xff1b;为修改、维护提供条件&#xff1b;项目负责人将按计划书的要求布置和控制开发工作全过程&#xff1b;项目质量保证组将按此计划书做阶段性和总结性的质量验证和确认。 本说明书的预期读者包括&#xff1a; 项目开发人员&…

车用DC-DC模块 1224V转5V2A过认证大塑料外壳

名称&#xff1a;车用12V转5V2A电源转换器 型号&#xff1a;LM40J5V2A3S 性质&#xff1a;非隔离型的BUCK电源转换器&#xff0c; 特点&#xff1a;采用集成IC设计&#xff0c;具有转换效率高&#xff0c;体积小&#xff0c;稳定可靠的特点&#xff0c;采用灌胶工艺&#xf…

Arcgis使用教程(十三)ARCGIS地图制图之地图输出参数设置详解

目录 1.加载数据 2.页面大小设置 2.1 根据页面大小设置地图 2.2 根据固定比例尺设置页面大小 1.加载数据 在Arcmap中加载中国矢量图层数据&#xff08;中国省级行政区图&#xff0c;国界线两个图层&#xff09;&#xff0c;切换到Layout View窗口&#xff0c;设置地图符号要…

jvm-sandbox-repeater环境搭建

引流回放这个技术现在真的越来越成为了很多公司测试同学必备的一个工具了。当然引流回放的技术有很多&#xff0c;比如下来会提到的jvm-sandbox-repeater。 当然你也可以通过日志分析解析的方式去获取到请求返回的信息等。因为刚听过testerhome开发者大会&#xff0c;好几个主题…

不愧是阿里内部的「排序和数据结构学习笔记」面面俱到、太全了

算法——成为程序员强者的必经之路 算法到底有多重要不必多说&#xff0c;说「算法正在统治世界」也不为过。 在编程行业内&#xff0c;有句话是这么说的「薪资越高、算法越重要」&#xff0c;互联网头部企业花费了大量的时间和金钱&#xff0c;用来研究新算法&#xff0c;不…

Python pandas有几千个库函数,你用过几个?(6)

上一篇链接&#xff1a; Python pandas有好几百个库函数&#xff0c;你都用过吗&#xff08;5&#xff09;_Hann Yang的博客-CSDN博客 DataFrame 类方法&#xff08;211个&#xff0c;其中包含18个子类、2个子模块&#xff09; >>> import pandas as pd >>&g…

详解c++---string的介绍(下)

这里写目录标题前言string的Modifiersoperatorappendpush_backassigninserterasereplaceswappop_backString的operationsc_strcopyfindrfindfind_first_offind_last_offind_first_not_of和find_last_not_of前言 本片文章我们将继续介绍string的使用&#xff0c;点击&#xff1…

从IP V4 向IP V6 过渡(计算机网络-网络层)

目录 从IP V4 向IP V6 过渡 用双协议栈进行从 IPv4 到 IPv6 的过渡 使用隧道技术从 IPv4 到 IPv6 过渡 从IP V4 向IP V6 过渡 向 IPv6 过渡只能采用逐步演进的办法&#xff0c;同时&#xff0c;还必须使新安装的 IPv6 系统能够向后兼容 IPv6 系统必须能够接收和转发 IPv4 分…

node.js+uni计算机毕设项目基于微信小程序停车系统(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…