爬虫脚本代理池调度

news2025/1/13 7:30:18

爬虫脚本代理池调度

有时在使用爬虫或者使用脚本需要频繁访问一个网站,这种时候很容易被服务器给ban掉ip,这种情况就可以使用代理池。从代理池中进行调度获取新的ip进行访问。

使用的是开源免费的python项目地址如下:
https://github.com/jhao104/proxy_pool

除了python还需要安装Redis

启动

启动redis

redis-server.exe redis.windows.conf

在这里插入图片描述
启动proxy_pool

启动调度程序

python proxyPool.py schedule

在这里插入图片描述启动webApi服务

python proxyPool.py server

在这里插入图片描述
在这里插入图片描述

爬虫使用代理池

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

apimethodDescriptionparams
/GETapi介绍None
/getGET随机获取一个代理可选参数: ?type=https 过滤支持https的代理
/popGET获取并删除一个代理可选参数: ?type=https 过滤支持https的代理
/allGET获取所有代理可选参数: ?type=https 过滤支持https的代理
/countGET查看代理数量None
/deleteGET删除代理?proxy=host:ip

示例demo:

import requests

def get_proxy():
    return requests.get("http://127.0.0.1:5010/get/").json()

def delete_proxy(proxy):
    requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy))

# your spider code

def getHtml():
    # ....
    retry_count = 5
    proxy = get_proxy().get("proxy")
    while retry_count > 0:
        try:
            print(proxy)
            html = requests.get('https://www.baidu.com', proxies={"http": "http://{}".format(proxy)})
            # 使用代理访问
            return html
        except Exception:
            retry_count -= 1
    # 删除代理池中代理
    delete_proxy(proxy)
    return None

if __name__ == '__main__':
    while(True):
        print(getHtml().text)

sqlmap使用代理池

获取所有的代理ip存入文件ips.txt(其他脚本同理)

import requests

def get_proxy():
    return requests.get("http://127.0.0.1:5010/all/").json()

def delete_proxy(proxy):
    requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy))

def get_proxyCount():
    return requests.get("http://127.0.0.1:5010/count").json()

count = get_proxyCount().get('count').get('total')
print("代理池中共计:%s个代理." % count)


f = open("ips.txt", "w")
for i in range(count):
    b = get_proxy()[i].get('proxy')
    print(b)
    f.write(b + "\n")

print("over!")
f.close()

本地代理转发

借用前人的成果,实现的效果是启用本地192.168.3.17:9999服务,将ips.txt内的代理转发给本地客户端

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import socket
from socket import error
import threading
import random
import time

localtime = time.asctime(time.localtime(time.time()))


class ProxyServerTest:
    def __init__(self, proxyip):
        # 本地socket服务
        self.ser = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.proxyip = proxyip

    def run(self):
        try:
            # 本地服务IP和端口
            self.ser.bind(('192.168.3.17', 9999))
            # 最大连接数
            self.ser.listen(5)
        except error as e:
            print("[-]The local service : " + str(e))
            return "[-]The local service : " + str(e)

        while True:
            try:
                # 接收客户端数据
                client, addr = self.ser.accept()
                print('[*]accept %s connect' % (addr,))
                data = client.recv(1024)
                if not data:
                    break
                print('[*' + localtime + ']: Accept data...')
            except error as e:
                print("[-]Local receiving client : " + str(e))
                return "[-]Local receiving client : " + str(e)

            while True:
                # 目标代理服务器,将客户端接收数据转发给代理服务器
                mbsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                iplen = len(self.proxyip)
                proxyip = self.proxyip[random.randint(0, iplen - 1)]
                print("[!]Now proxy ip:" + str(proxyip))
                prip = proxyip[0]
                prpo = proxyip[1]
                try:
                    mbsocket.settimeout(3)
                    mbsocket.connect((prip, prpo))
                except:
                    print("[-]RE_Connect...")
                    continue
                break

            #                   except :
            #                       print("[-]Connect failed,change proxy ip now...")
            #                      pass

            try:
                mbsocket.send(data)
            except error as e:
                print("[-]Sent to the proxy server : " + str(e))
                return "[-]Sent to the proxy server : " + str(e)

            while True:
                try:
                    # 从代理服务器接收数据,然后转发回客户端
                    data_1 = mbsocket.recv(1024)
                    if not data_1:
                        break
                    print('[*' + localtime + ']: Send data...')
                    client.send(data_1)
                except socket.timeout as e:
                    print(proxyip)
                    print("[-]Back to the client : " + str(e))
                    continue

            # 关闭连接

            client.close()
            mbsocket.close()


def Loadips():
    print("[*]Loading proxy ips..")
    ip_list = []
    ip = ['ip', 'port']
    with open("ips.txt") as ips:
        lines = ips.readlines()

    for line in lines:
        ip[0], ip[1] = line.strip().split(":")
        ip[1] = eval(ip[1])
        nip = tuple(ip)
        ip_list.append(nip)
    return ip_list


def main():
    print('''*Atuhor : V@1n3R.

*Blog :http://www.Lz1y.cn
*date: 2017.7.17
*http://www.Lz1y.cn/wordpress/?p=643





                         __     __    _       _____ ____    

                         \ \   / /_ _/ |_ __ |___ /|  _ \   

                          \ \ / / _` | | '_ \  |_ \| |_) |  

                           \ V / (_| | | | | |___) |  _ < _ 

                            \_/ \__,_|_|_| |_|____/|_| \_(_) 






    ''')

    ip_list = Loadips()
    #   ip_list = [('118.89.148.92',8088)]
    #   ip_list = tuple(ip_list)
    try:
        pst = ProxyServerTest(ip_list)
        # 多线程
        t = threading.Thread(target=pst.run, name='LoopThread')
        print('[*]Waiting for connection...')
        # 关闭多线程
        t.start()
        t.join()
    except Exception as e:
        print("[-]main : " + str(e))
        return "[-]main : " + str(e)


if __name__ == '__main__':
    main()

sqlmap使用 --proxy进行调用

在这里插入图片描述
免费的代理池,有的ip质量不行会连不上

在这里插入图片描述

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

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

相关文章

【GPGPU编程模型与架构原理】第二章 2.1 计算模型

本章介绍以CUDA和OpenCL 并行编程中的一些核心架构概念来展示GPGPU的计算、编程和存储模型。本章还介绍虚拟指令集和机器指令集&#xff0c;逐步揭开GPGPU体系结构的面纱。 2.1 计算模型 计算模型是编程框架的核心&#xff0c;计算模型需要根据计算核心的硬件架构提取计算的共…

使用TinyPNG API压缩图片

使用TinyPNG API压缩图片 在撰写论文的时候&#xff0c;美观&#xff0c;大气&#xff0c;上档次的图标能够很好地给自己的论文加分&#xff0c;好的可视化结果也能够让审稿人赏心悦目。但是有时候在可视化图片的时候有可能原始图像过大从而很占内存&#xff1b;这时候就希望能…

Python+Numpy+CV2/GDAL实现对图像的Wallis匀色

Wallis匀色原理&#xff1a; # f(x,y)&#xff1a;Wallis匀色后结果 # g(x,y):输入的待匀色影像 # mg:待处理影像的灰度均值 # mf:参考影像的灰度均值 # sg:待处理影像和的标准偏差 # sf:参考影像的标准偏差 f(x,y)(g(x,y)−mg)⋅(sf/sg)mf匀色代码逻辑解释&#xff1…

从阿里云“数字证书管理服务”申请免费的SSL证书

最近网站的SSL证书即将到期&#xff0c;之前是从FreeSSL申请的证书&#xff0c;而且是通过OpenSSL自己生成CSR文件的方式申请的证书&#xff0c;操作还是比较繁琐。&#xff08;具体参考&#xff1a; https://blog.csdn.net/weixin_42534940/article/details/90745452 &#xf…

一、几种常用的设计模式

设计模式分类 创建者模式&#xff1a;对象实例化的模式&#xff0c;创建型模式用于解耦对象的实例化过程。 常用&#xff1a;单例模式、工厂方法模式、抽象工厂模式、建造者模式 。 不常用&#xff1a;原型模式结构型模式&#xff1a;把类或对象结合在一起形成一个更大的结构。…

Tilemap瓦片资源

1、Tilemap Tilemap一般称之为 瓦片地图或者平铺地图&#xff0c;是Unity2017中新增的功能&#xff0c;主要用于快速编辑2D游戏中的场景&#xff0c;通过复用资源的形式提升地图多样性 工作原理就是用一张张的小图排列组合为一张大地图 它和SpriteShape都是用于制作2D游戏的…

CEAC 之《企业信息化管理》1

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;微微的猪食小窝 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 微微的猪食小窝 原创 收录于专栏 【CEAC证书】 1综合布线是智能建筑的信息高速公路。 A、正确 B、错误A2直通线的一根双绞线的两端执行不同…

Java基础实战项目-------网上订餐系统

目录 前言 项目需求 项目环境准备 技能点 实现思路 ​编辑 项目总结 完整代码&#xff1a; 前言 已学完Java基础部分的内容&#xff0c;如下 理解程序的基本概念&#xff1a;程序、变量、数据类型 会使用顺序、选择、循环、跳转语句编写程序 会使用数组以及Arrays的…

[附源码]SSM计算机毕业设计智慧教学平台JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]java毕业设计生产型企业员工管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

应急响应-账户排查

用户信息排查 在服务器被入侵之后&#xff0c;攻击者可能会建立相关账户&#xff0c;方便进行远程控制。 主要采用一下几种&#xff1a; 直接建立一个新用户&#xff1b;(有时候为了混淆视听&#xff0c;账户名称和系统常用名相似)激活一个系统中的默认用户&#xff0c;但是这…

ArcGIS计算图斑四至坐标原来这么简单!可不要在走弯路哦

时常我们需要去计算图斑的四至坐标 &#xff08;四至与四至点不一样哦&#xff09; 很多朋友会去求个 最小边界几何 在与原始图斑相交得到点来算四至 这种方法有许多问题 是不可以取的&#xff0c;我们今天来介绍一下 一个简单的字段计算就解决这个问题 然后嫌麻烦 我们…

jtag调试ls1012a linux-5.3内核

1、jtag连接 OK1012A-C jtag引脚如下: 如果jlink的VCC对外输出供电&#xff0c;那么需要关闭&#xff0c;VCC对外供电导致jtag连接不上。使用引脚匹配的转接板连接开发板的jtag插座。使用交叉串口线连接开发板。 2、linux-5.3内核编译 -O0编译修改方法与树莓派4b编译修改方法一…

java基于ssm大学生社团管理系统-计算机毕业设计

系统采用了B/S结构&#xff0c;将所有业务模块采用以浏览器交互的模式&#xff0c;选择MySQL作为系统的数据库&#xff0c;开发工具选择My eclipse来进行系统的设计。基本实现了社团管理应有的主要功能模块&#xff0c;本系统有前台与后台两大功能模块&#xff0c;管理员&#…

【图像隐藏】基于小波变换DWT实现数字水印嵌入提取含各类攻击附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

OPT(奥普特)荣摘高工锂电“2022年度创新技术奖”

日前&#xff0c;高工锂电年会暨金球奖颁奖典礼在深圳隆重举行&#xff0c;集结了锂电产业链上下游企业高层领袖&#xff0c;围绕行业新技术、数字工厂、极限智造等共议未来发展之道。 作为锂电行业机器视觉核心供应商&#xff0c;OPT&#xff08;奥普特&#xff09;受邀出席年…

【Java八股文总结】之面向对象

文章目录Java面向对象基础一、面向对象基础1、什么是封装&#xff1f;2、什么是继承&#xff1f;1、子类访问父类2、子类的访问修饰符3、方法重写3、什么是多态&#xff1f;1、Java语言如何实现多态2、什么时候使用多态&#xff1f;4、什么是接口&#xff1f;5、怎么使用接口&a…

Stream

目录 一 函数式接口 1 特点 2 核心函数式接口 1&#xff09; Consumer 2&#xff09; Supplier 3&#xff09; Function 4&#xff09; Predicate 5&#xff09; 扩展&#xff1a;BiFunction 二 Stream 1 stream操作过程 1&#xff09; 中间操作 2&#xff09;终端…

[附源码]java毕业设计汽车票售票系统lunwen

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

太湖“生态度假式”年会,为您的健康守护,为您的相聚喝彩

最近几年经常听到&#xff0c; 有人说今年最大的目标就是活着&#xff0c; 历经风雨&#xff0c;方知岁月静好的可贵&#xff0c; 这特殊的一年又一年里让大家深觉“健康”的重要&#xff0c; 也让我们更热爱彼此、热爱生活。 倏忽间&#xff0c;2022已至尾声&#xff0c; 又到…