如何利用爬虫技术从HTTP代理池中筛选出高质量IP?

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


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


1.验证HTTP代理的可用性

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

importrequestsdefcheck_proxy(proxy):
try:
response=requests.get(url, proxies=proxy, timeout=3)
ifresponse.status_code==200:
returnTrueexcept:
passreturnFalse

2.更新HTTP代理池

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

importrequestsfrombs4importBeautifulSoupdefget_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= []
fortrintr_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)
returnproxies

3.维护HTTP代理的质量

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

importrequestsfrommultiprocessingimportPoolfromfunctoolsimportpartialdefcheck_proxy_quality(proxy):
try:
response=requests.get(url, proxies=proxy, timeout=3)
ifresponse.status_code==200:
returnTrue, response.elapsed.total_seconds()
except:
passreturnFalse, Nonedefevaluate_proxies(proxies):
pool=Pool(processes=8)
results=pool.map(partial(check_proxy_quality), proxies)
pool.close()
pool.join()
quality_proxies= []
forproxy, resultinzip(proxies, results):
is_valid, response_time=resultifis_valid:
quality_proxies.append((proxy, response_time))
returnquality_proxies

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

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

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

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

importshelveclassProxyManager:
def__init__(self, filename='proxies.db'):
self.filename=filenameself.proxies=shelve.open(filename, writeback=True)
ifnotself.proxies.get('used_proxies'):
self.proxies['used_proxies'] = {}
defmark_as_used(self, proxy):
ifproxyinself.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] =Truedefmark_as_success(self, proxy):
ifproxyinself.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] =Truedefis_used(self, proxy):
returnself.proxies['used_proxies'].get(proxy)
defclose(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.text
            except:
                pass
            proxy_manager.mark_as_used(proxy)
    return None
def get_proxy(proxy_manager):
    proxies = list(proxy_manager.proxies.keys())
    for proxy in proxies:
        if not proxy_manager.is_used(proxy):
            return proxy
    return 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块钱,差不多是一瓶水的价格了。从业务结果的表现而言,也算可圈可点:

并发数.png

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

相关文章
|
3月前
|
数据采集 存储 C#
C# 爬虫技术:京东视频内容抓取的实战案例分析
C# 爬虫技术:京东视频内容抓取的实战案例分析
|
1月前
|
数据采集 存储 数据挖掘
深入探索 Python 爬虫:高级技术与实战应用
本文介绍了Python爬虫的高级技术,涵盖并发处理、反爬虫策略(如验证码识别与模拟登录)及数据存储与处理方法。通过asyncio库实现异步爬虫,提升效率;利用tesseract和requests库应对反爬措施;借助SQLAlchemy和pandas进行数据存储与分析。实战部分展示了如何爬取电商网站的商品信息及新闻网站的文章内容。提醒读者在实际应用中需遵守法律法规。
186 66
|
20天前
|
数据采集 Web App开发 iOS开发
如何利用 Python 的爬虫技术获取淘宝天猫商品的价格信息?
本文介绍了使用 Python 爬虫技术获取淘宝天猫商品价格信息的两种方法。方法一使用 Selenium 模拟浏览器操作,通过定位页面元素获取价格;方法二使用 Requests 和正则表达式直接请求页面内容并提取价格。每种方法都有详细步骤和代码示例,但需注意反爬措施和法律法规。
|
20天前
|
数据采集 存储 Web App开发
利用Python 的爬虫技术淘宝天猫销量和库存
使用 Python 爬虫技术获取淘宝天猫商品销量和库存的步骤包括:1. 安装 Python 和相关库(如 selenium、pandas),下载浏览器驱动;2. 使用 selenium 登录淘宝或天猫;3. 访问商品页面,分析网页结构,提取销量和库存信息;4. 处理和存储数据。注意网页结构可能变化,需遵守法律法规。
|
1月前
|
数据采集 Web App开发 JavaScript
Selenium爬虫技术:如何模拟鼠标悬停抓取动态内容
本文介绍了如何使用Selenium爬虫技术抓取抖音评论,通过模拟鼠标悬停操作和结合代理IP、Cookie及User-Agent设置,有效应对动态内容加载和反爬机制。代码示例展示了具体实现步骤,帮助读者掌握这一实用技能。
Selenium爬虫技术:如何模拟鼠标悬停抓取动态内容
|
2月前
|
数据采集 中间件 定位技术
新手爬虫er必刷!如何使用代理IP全攻略!
在爬虫开发中,代理IP是规避IP封锁和请求频率限制的重要工具,通过分散请求压力并模拟不同地理位置,提高数据抓取稳定性和成功率。本文详细介绍了代理IP的基本概念、选择服务的关键因素、获取及使用方法,包括Python中的Requests库和Scrapy框架的具体应用,以及IP管理与轮换策略,帮助新手掌握代理IP的使用技巧。
|
3月前
|
缓存 负载均衡 安全
|
2月前
|
数据采集 机器学习/深度学习 搜索推荐
Python爬虫技术基础与应用场景详解
本文介绍了爬虫技术的基本概念、原理及应用场景,包括数据收集、价格监测、竞品分析和搜索引擎优化等。通过一个实战案例展示了如何使用Python爬取电商网站的商品信息。强调了在使用爬虫技术时需遵守法律法规和道德规范,确保数据抓取的合法性和合规性。
|
3月前
|
安全 Java Shell
【内网—内网转发】——http协议代理转发_reGeorg代理转发
【内网—内网转发】——http协议代理转发_reGeorg代理转发
106 3
|
3月前
|
数据采集
爬虫抓取数据过程中代理IP频繁掉线:以Kookeey为例的解决方案
在数据抓取过程中,代理IP不可或缺,但其频繁掉线问题严重影响效率。本文以Kookeey为例,探讨解决之道:1)深入理解掉线原因,审慎选择稳定的服务商; 2)保持代理IP更新并合理配置使用参数; 3)在程序中集成错误处理与重试逻辑; 4)必要时升级至更优质的服务; 5)主动与服务商沟通寻求支持; 6)探索替代抓取策略,如调整抓取节奏或采用分布式架构。这些措施有助于显著提升抓取成功率及稳定性。
下一篇
无影云桌面