代理池的维护(一)

介绍代理池的维护

一、准备工作

安装redis数据库并启动服务,另外还需安装atihttp,requests, redis-py,pyquery,flask

二、代理池的架构

分为4个模块:存储模块,获取模块,检测模块,借口模块、

1、存储模块:使用Redis的有序集合,用来做代理的去重和状态标识,同时也是中心模块和基础模块,将其他模块串联起来

2、获取模块:定时从代理网站获取代理,将获取的代理传递给存储模块,并保存到数据库

3、检测模块:定时通过存储模块获取所有代理,对代理进行检测,根据不同的检测结果对代理设置不同的标识

4、接口模块:通过Web API 提供接口服务,连接数据库通过Web形式返回可用的代理

下面是存储模块的代码

 1 # -*- coding: utf-8 -*-
 2 from random import choice
 3
 4 import redis
 5
 6 MAX_SCORE = 100
 7 MIN_SCORE = 0
 8 INITIAL_SCORE = 10
 9 REDIS_HOST = ‘localhost‘
10 REDIS_PORT = 6379
11 REDIS_PASSWORD = None
12 REDIS_KEY = ‘proxies‘
13
14
15 class RedisClient(object):
16     def __init__(self, host=REDIS_HOST, port=REDIS_PORT, password=REDIS_PASSWORD):
17         """
18         初始化
19         :param host:Redis地址
20         :param port: Redis端口
21         :param password: Redis密码
22         """
23         self.db = redis.StrictRedis(host=host, port=port, password=password, decode_responses=True)
24
25     def add(self, proxy, score=INITIAL_SCORE):
26         """
27         添加代理,设置分数为最高
28         :param proxy: 代理
29         :param score: 分数
30         :return: 添加结果
31         """
32         if not self.db.zscore(REDIS_KEY, proxy):
33             return self.db.zadd(REDIS_KEY, score, proxy)
34
35     def random(self):
36         """
37         随机获取有效代理,首先尝试获取最高分数代理,如果最高分数不存在,则按照排名获取,否则异常
38         :return: 随机代理
39         """
40         result = self.db.zrangebyscore(REDIS_KEY, MAX_SCORE, MIN_SCORE)
41         if result:
42             return choice(result)
43         else:
44             result = self.db.zrevrange(REDIS_KEY, 0, 100)
45             if result:
46                 return choice(result)
47             else:
48                 raise Exception
49
50     def decrease(self, proxy):
51         """
52         代理值减一分, 分数小于最小值,则代理删除
53         :param proxy:代理
54         :return: 修改后的代理分数
55         """
56         score = self.db.zscore(REDIS_KEY, proxy)
57         if score and score > MIN_SCORE:
58             print(‘代理‘, proxy, ‘当前分数‘, score, ‘减1‘)
59             return self.db.zincrby(REDIS_KEY, proxy, -1)
60         else:
61             print(‘代理‘, proxy, ‘当前分数‘, score, ‘移除‘)
62             self.db.zrem(REDIS_KEY, proxy)
63
64     def exists(self, proxy):
65         """
66         判断代理是否存在
67         :param proxy:代理
68         :return: 是否存在
69         """
70         return not self.db.zscore(REDIS_KEY, proxy) == None
71
72     def max(self, proxy):
73         """
74         将代理设置为MAX_SCORE
75         :param proxy: 代理
76         :return: 设置结果
77         """
78         print(‘代理‘, proxy, ‘可用, 设置为‘, MAX_SCORE)
79         return self.db.zadd(REDIS_KEY, MAX_SCORE, proxy)
80
81     def count(self):
82         """
83         获取数量
84         :return:数量
85         """
86         return self.db.zcard(REDIS_KEY)
87
88     def all(self):
89         """
90         获取全部代理
91         :return: 全部代理列表
92         """
93         return self.db.zrangebyscore(REDIS_KEY, MIN_SCORE, MAX_SCORE)

原文地址:https://www.cnblogs.com/yzet/p/9452422.html

时间: 2024-08-30 12:44:30

代理池的维护(一)的相关文章

爬虫技术:代理池的维护

一:代理池维护的模块 1. 抓取模块Crawl,负责从代理网站上抓取代理 ---------------抓取模块 2. 获取代理Getter,负责获取抓取模块返回的值,并判断是否超过存储模块的最大容量.---------------获取模块 3.存储模块Redis,负责将抓取的每一条代理存放至有序集合中.---------------存储模块 4.测试模块Tester,负责异步测试每个代理是否可用.---------------测试模块 5.调度模块Schedule,负责测试,获取,和对外api

python爬虫-代理池的维护

简介 我们可以从网上或者付费获取大量代理,但是这其中很多依然不可用,那么搭建高效的代理池,对代理ip进行筛选是十分必要的 准备工作: 安装Redis数据库,还需要安装aiohttp.requests.redis-py.pyquery.Flask库,安装流程请百度自行查询 由于文件内容较多,所以就不一一讲解了,直接创建一个Python Package模块包,下次直接调用 创建一个Python Package包,取名为proxypool 一.创建一个setting.py文件,用于存放配置信息.代码如

python3编写网络爬虫18-代理池的维护

一.代理池的维护 上面我们利用代理可以解决目标网站封IP的问题 在网上有大量公开的免费代理 或者我们也可以购买付费的代理IP但是无论是免费的还是付费的,都不能保证都是可用的 因为可能此IP被其他人使用来爬取同样的目标站点而被封禁或者代理服务器突然故障或者网络繁忙 一旦选用了一个不可用的代理,这势必会影响爬虫的工作效率 1.准备工作 需要安装Redis数据库并启动服务 另外还需要安装aiohttp.requests.redis-py.pyquery.flask库 redis数据库安装 下载地址 h

使用redis所维护的代理池抓取微信文章

搜狗搜索可以直接搜索微信文章,本次就是利用搜狗搜搜出微信文章,获得详细的文章url来得到文章的信息.并把我们感兴趣的内容存入到mongodb中. 因为搜狗搜索微信文章的反爬虫比较强,经常封IP,所以要在封了IP之后切换IP,这里用到github上的一个开源类,当运行这个类时,就会动态的在redis中维护一个ip池,并通过flask映射到网页中,可以通过访问 localhost:5000/get/ 来获取IP 这是搜狗微信搜索的页面, 构造搜索url .搜索时会传递的参数,通过firefox浏览器

用Flask+Redis维护代理池

为什么要用代理池? 许多网站有专门的反爬虫措施,可能遇到封IP等问题. 互联网上公开了大量免费的代理,利用好资源. 通过定时的检测维护同样可以得到多个可用的代理. 代理池要求 多站抓取,异步检测 定时筛选,持续更新 提供接口,易于读取 代理池架构 原文地址:https://www.cnblogs.com/carious/p/10101270.html

使用redis+flask维护动态代理池

在进行网络爬虫时,会经常有封ip的现象.可以使用代理池来进行代理ip的处理. 代理池的要求:多站抓取,异步检测.定时筛选,持续更新.提供接口,易于提取. 代理池架构:获取器,过滤器,代理队列,定时检测. 使用https://github.com/Germey/ProxyPool/tree/master/proxypool代码进行分析. run.py里面的代码 from proxypool.api import app from proxypool.schedule import Schedule

Python爬虫之ip代理池

可能在学习爬虫的时候,遇到很多的反爬的手段,封ip 就是其中之一. 对于封IP的网站.需要很多的代理IP,去买代理IP,对于初学者觉得没有必要,每个卖代理IP的网站有的提供了免费IP,可是又很少,写了个IP代理池 .学习应该就够了 ip代理池: 1,在各大网站爬去免费代理ip2,检查ip可用 可用存入数据库1和23,在数据库1中拿出少量代理ip存入数据库2(方便维护)4,定时检查数据库1和数据库2的代理数量,以及是否可用5,调用端口 1,在各大网站爬去免费代理ip 1 def IPList_61

爬虫搭建动态代理池

代理是什么? 代理实际上就是代理服务器, 代理服务器的工作机制很象我们生活中常常提及的代理商,假设你的机器为A机,你想获得的数据由B机提供,代理服务器为C机,那么具体的连接过程是这样的. 首先,A机需要B机的数据,它与C机建立连接,C机接收到A机的数据请求后,与B机建立连接,下载A机所请求的B机上的数据到本地,再将此数据发送至A机,完成代理任务.如图(图片有点丑): 为什么要使用代理? 我们在做爬虫的过程中经常会遇到这样的情况,最初爬虫正常运行,正常抓取数据,一切看起来都是那么美好,然而一杯茶的

scrapy_随机ip代理池

什么是ip代理? 我们电脑访问网站,其实是访问远程的服务器,通过ip地址识别是那个机器访问了服务器,服务器就知道数据该返回给哪台机器,我们生活中所用的网络是局域网,ip是运营商随机分配的,是一种直接访问服务器的方式 代理服务器是一种间接方式,本地机器访问ip代理服务器,ip代理服务器帮我们发起服务请求,然后代理服务器接收数据返回给本机,由于中间有了层ip代理服务器,访问的速度和稳定性取决于代理服务器的性能 常规访问: 用户 >> ip  >> 服务器 代理访问: 用户用户 >