对于HTTP代理池的维护,可以从以下几个方面入手:

1.验证HTTP代理的可用性

可以通过requests库向目标网站发送请求,判断HTTP代理是否能够成功返回响应。如果返回成功,则说明HTTP代理可用,否则说明HTTP代理已失效。可以在代码中设置超时时间,避免长时间等待无响应的HTTP代理。

import requestsdef check_proxy(proxy):try:response = requests.get(url, proxies=proxy, timeout=3)if response.status_code == 200:return Trueexcept:passreturn False

2.更新HTTP代理池

可以通过定期爬取HTTP代理网站或者购买付费HTTP代理服务来获取新的HTTP代理。可以使用requests库向HTTP代理网站发送请求,获取HTML页面,并使用BeautifulSoup库解析HTML页面,从而获取HTTP代理信息。通过一定的筛选规则,可以将新获取的HTTP代理加入到HTTP代理池中。

import requests
from bs4 import BeautifulSoupdef get_proxies():url = 'http://www.xicidaili.com/nn/'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}response = requests.get(url, headers=headers)soup = BeautifulSoup(response.text, 'html.parser')table = soup.find('table', {'id': 'ip_list'})tr_list = table.find_all('tr')proxies = []for tr in tr_list[1:]:td_list = tr.find_all('td')ip = td_list[1].textport = td_list[2].textprotocol = td_list[5].text.lower()proxy = '{}://{}:{}'.format(protocol, ip, port)proxies.append(proxy)return proxies

3.维护HTTP代理的质量

可以通过一些指标来衡量HTTP代理的质量,比如连接速度、响应时间、访问成功率等。可以定时对HTTP代理进行评估,筛选出质量较好的IP,并从HTTP代理池中删除质量较差的IP。

import requests
from multiprocessing import Pool
from functools import partialdef check_proxy_quality(proxy):try:response = requests.get(url, proxies=proxy, timeout=3)if response.status_code == 200:return True, response.elapsed.total_seconds()except:passreturn False, Nonedef evaluate_proxies(proxies):pool = Pool(processes=8)results = pool.map(partial(check_proxy_quality), proxies)pool.close()pool.join()quality_proxies = []for proxy, result in zip(proxies, results):is_valid, response_time = resultif is_valid:quality_proxies.append((proxy, response_time))return quality_proxies

4.监控HTTP代理的使用情况

对于监控HTTP代理的使用情况,一种比较简单的方法是记录每个HTTP代理的使用次数和成功率,以便及时发现哪些HTTP代理不再可用或者质量较差。

可以使用Python内置的shelve模块,将HTTP代理的使用情况保存在一个本地文件中。shelve模块可以提供类似字典的数据存储方式,方便快捷地读取和写入数据。

以下是一个简单的示例代码:

import shelveclass ProxyManager:def __init__(self, filename='proxies.db'):self.filename = filenameself.proxies = shelve.open(filename, writeback=True)if not self.proxies.get('used_proxies'):self.proxies['used_proxies'] = {}def mark_as_used(self, proxy):if proxy in self.proxies:self.proxies[proxy]['used_times'] += 1self.proxies[proxy]['success_rate'] = self.proxies[proxy]['success_times'] / self.proxies[proxy]['used_times']else:self.proxies[proxy] = {'used_times': 1, 'success_times': 0, 'success_rate': 0}self.proxies['used_proxies'][proxy] = Truedef mark_as_success(self, proxy):if proxy in self.proxies:self.proxies[proxy]['success_times'] += 1self.proxies[proxy]['success_rate'] = self.proxies[proxy]['success_times'] / self.proxies[proxy]['used_times']else:self.proxies[proxy] = {'used_times': 1, 'success_times': 1, 'success_rate': 1}self.proxies['used_proxies'][proxy] = Truedef is_used(self, proxy):return self.proxies['used_proxies'].get(proxy)def close(self):self.proxies.close()

在使用HTTP代理进行网络请求时,可以先检查该HTTP代理是否已被使用过。如果该HTTP代理已被使用过,则不再使用该HTTP代理。如果该HTTP代理未被使用过,则使用该HTTP代理进行网络请求,并在请求成功或失败后,更新该HTTP代理的使用情况。

以下是一个简单的示例代码:

def get_page(url, proxy_manager):for i in range(3):proxy = get_proxy(proxy_manager)if proxy:try:response = requests.get(url, proxies={'http': proxy, 'https': proxy}, timeout=3)if response.status_code == 200:proxy_manager.mark_as_success(proxy)return response.textexcept:passproxy_manager.mark_as_used(proxy)return Nonedef get_proxy(proxy_manager):proxies = list(proxy_manager.proxies.keys())for proxy in proxies:if not proxy_manager.is_used(proxy):return proxyreturn None

需要注意的是,shelve模块的写入操作可能比较耗时,如果HTTP代理池较大,可以考虑每隔一段时间将HTTP代理使用情况保存在本地文件中,以提高性能。同时,如果HTTP代理池中存在较多已失效的HTTP代理,证明这个池子的IP可用率已经极低了,还是会更建议大家伙使用优质厂商提供的HTTP代理。

正常情况下,很多人会说随着经济下行,能有使用的就已经不错了,还谈什么自行车,且不谈免费的HTTP代理的连通性,实际上只要选对HTTP代理,采购的成本也会在我们的承受范围内的。例如,此前我们搜集了这几家的动态共享HTTP代理:

注:动态短效代理有按时和按量之分,都已经几种汇总了:

HTTP代理类型

分类

代表厂商

白名单数

基础套餐

(元/月)

平均IP单价

(元/IP)

动态短效HTTP代理

按时计费

以IP通道为增量

青果网络

256

29

0.0006

小象代理

5

109

0.0050

以每日IP量为增量

巨量代理

5

155

0.0049

豌豆代理

5

300

0.0025

讯代理

1

210

0.0583

品易代理

20

120

0.0070

芝麻代理

5

360

0.0182

按量计费

/

青果网络

256

30

0.0030

豌豆代理

5

200

0.0200

小象代理

5

100

0.0100

巨量代理

5

75

0.0140

品易代理

20

100

0.0100

芝麻代理

5

420

0.0420

拿青果网络来说,29一个月,均摊到每天也就1块钱,差不多是一瓶水的价格了。从业务结果的表现而言,也算可圈可点:

当然,我们选择HTTP代理厂商都是基于各自业务的场景需求,不同场景所需的HTTP代理产品也不同,但各位可以测试了看看,所有的产品都要最红应用到自身,才能知道效果如何。

python 爬虫 ip池维护思路相关推荐

  1. Python3爬虫教程之ADSL拨号爬虫ip池的使用

    在我之前做爬虫经常需要维护自己的爬虫ip池,他可以挑选出很多有用的爬虫地址,因为不是专业的而且这些爬虫ip通常是公共爬虫ip,所以可用率不是太高,而且这样类型的地址很大情况下都是多人共用的,被封地址概 ...

  2. python搭建ip池

    在爬取网站的时候我们有时候会遭受封ip等显现,因此我们需要搭建自己的ip池用于爬虫. 代码过程简述: 1.爬取代理ip网站信息 2.将获取的信息处理得到ip等关键信息 3.保存首次获取的ip信息并检测 ...

  3. python搭建ip池(多线程)

    之前有讲过怎么搭建ip池,但由于单线程的效率太低,于是我们升级改造一下,将单线程变成多线程来搭建ip池,之前的方法可以参考一下:python搭建ip池 (如果会简单的request和提取文字就可以直接 ...

  4. python爬虫ip proxy_python爬虫ip代理服务器的简要思路

    python爬虫有的时候会遇到被禁ip的情况,这个时候你可以找一下代理网站,抓取一下ip,来进行动态的轮询就没问题了,也可以用别人做好的第三方ip代理平台,比如说crawlera,crawlera是一 ...

  5. python通过ip池爬_Python爬虫 | IP池的使用

    一.简介 爬虫中为什么需要使用代理 一些网站会有相应的反爬虫措施,例如很多网站会检测某一段时间某个IP的访问次数,如果访问频率太快以至于看起来不像正常访客,它可能就会禁止这个IP的访问.所以我们需要设 ...

  6. python通过ip池爬_python爬虫18 | 就算你被封了也能继续爬,使用IP代理池伪装你的IP地址,让IP飘一会...

    我们上次说了伪装头部 ↓ 让自己的 python 爬虫假装是浏览器 小帅b主要是想让你知道 在爬取网站的时候 要多的站在对方的角度想问题 其实 这和泡妞差不多 你要多站在妹纸的角度思考 她的兴趣是什么 ...

  7. Python爬虫-IP代理池和代理池设计

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:小小科 ( 想要学习Python?Python学习交流 ...

  8. python通过ip池爬_python 爬虫 代理ip池(适合初学者)

    初次学习python爬虫的朋友在频繁访问被爬取页面网站时都会被拦截,也就是限制ip.这里教教大家建立代理ip池. #!/usr/bin/env python3# -*- coding: utf-8 - ...

  9. python爬虫cookie池 与ip绑定_Python爬虫防封ip的一些技巧

    在编写爬虫爬取数据的时候,因为很多网站都有反爬虫措施,所以很容易被封IP,就不能继续爬了.在爬取大数据量的数据时更是瑟瑟发抖,时刻担心着下一秒IP可能就被封了. 本文就如何解决这个问题总结出一些应对措 ...

最新文章

  1. 初始化java工具失败,spring初始化失败解决办法
  2. Echarts中柱状图X轴显示时间显示不开倾斜显示的属性
  3. k均值算法原理详细讲解以及matlab代码实现
  4. 第四章 C++数据类型
  5. 深度学习之Batch Normalization
  6. python生成固定长度随机数_python日记——random模块
  7. 数据库原理及应用课程设计
  8. Vue阿里云物流API
  9. Jenkins(03):配置Jenkins自动发送邮件
  10. Firefox的下载处理器:FlashGot v1.0 Final颁发
  11. 一岁半女娃海中“游泳秀” 观众含泪观看
  12. 分体式降噪耳机有哪些?高配置分体式降噪耳机排行榜
  13. c语言堆、栈、数据段、代码段、bss段的疑惑
  14. 保利紫山开启湛江城市墅居新纪元
  15. gazebo进程崩溃处理
  16. Matlab人工智能算法
  17. Oracle 一种简单粗暴的办法解析XML文件的例子
  18. 【实例】Python tkinter 实例 桌面便签
  19. 1056: 幸运数字 ZZULIOJ
  20. 教你如何用拼音输入法怎么打出来不认识的字

热门文章

  1. 一文看懂ArrayList的自动扩容
  2. 详解200行Python代码实现控制台版2048【总有一款坑适合你】【超详细】
  3. git报错-The file will have its original
  4. “好奇号”的火星发展观
  5. Windows 程序设计基础
  6. 数据结构复习 ---- 邻接矩阵
  7. Unity程序框架总结归置系列(2)——对象池
  8. android otg开发笔记
  9. 解决:-bash redis-server 未找到命令
  10. 微信公众平台修改服务器,微信公众平台开发配置及自定义分享