Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >python asyncio+aiohttp异步请求 批量快速验证代理IP是否可用

python asyncio+aiohttp异步请求 批量快速验证代理IP是否可用

作者头像
叶庭云
修改于 2021-02-07 04:55:21
修改于 2021-02-07 04:55:21
4.6K0
举报
文章被收录于专栏:Python进阶之路Python进阶之路

文章目录

一、爬虫代理

1. 代理的作用

对于爬虫来说,由于爬虫爬取速度过快,在爬取过程中可能遇到同一个 IP 访问过于频繁的问题,此时网站就会让我们输入验证码登录或者直接封锁 IP,这样会给爬取带来极大的不便。

使用代理隐藏真实的 IP,让服务器误以为是代理服务器在请求自己。这样在爬取过程中通过不断更换代理,就不会被封锁,可以达到很好的爬取效果。

  • 突破自身 IP 访问限制,访问一些平时不能访问的站点。
  • 访问一些单位或团体内部资源,如使用教育网内地址段免费代理服务器,就可以用于对教育网开放的各类 FTP 下载上传,以及各类资料查询共享等服务。
  • 提高访问速度,通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,也将其保存到缓冲区中,当其他用户再访问相同的信息时, 则直接由缓冲区中取出信息,传给用户,以提高访问速度。
  • 隐藏真实 IP,上网者也可以通过这种方法隐藏自己的 IP,免受攻击,对于爬虫来说,我们用代理就是为了隐藏自身 IP,防止自身的 IP 被封锁。
2. 代理分类

代理分类时,既可以根据协议区分,也可以根据其匿名程度区分,总结如下:

根据协议区分

  • FTP 代理服务器,主要用于访问 FTP 服务器,一般有上传、下载以及缓存功能,端口一般为 21、2121 等。
  • HTTP 代理服务器,主要用于访问网页,一般有内容过滤和缓存功能,端口一般为 80、8080、3128 等。
  • SSL/TLS 代理,主要用于访问加密网站,一般有 SSL 或 TLS 加密功能(最高支持 128 位加密强度),端口一般为 443。
  • RTSP 代理,主要用于 Realplayer 访问 Real 流媒体服务器,一般有缓存功能,端口一般为 554。
  • Telnet 代理,主要用于 telnet 远程控制(黑客入侵计算机时常用于隐藏身份),端口一般为 23。
  • POP3/SMTP 代理,主要用于 POP3/SMTP 方式收发邮件,一般有缓存功能,端口一般为 110/25。
  • SOCKS 代理,只是单纯传递数据包,不关心具体协议和用法,所以速度快很多,一般有缓存功能,端口一般为 1080。SOCKS 代理协议又分为 SOCKS4 和 SOCKS5,SOCKS4 协议只支持 TCP,而 SOCKS5 协议支持 TCP 和 UDP,还支持各种身份验证机制、服务器端域名解析等。简单来说,SOCK4 能做到的 SOCKS5 都可以做到,但 SOCKS5 能做到的 SOCK4 不一定能做到。

根据匿名程度区分

  • 高度匿名代理,高度匿名代理会将数据包原封不动的转发,在服务端看来就好像真的是一个普通客户端在访问,而记录的 IP 是代理服务器的 IP。
  • 普通匿名代理,普通匿名代理会在数据包上做一些改动,服务端上有可能发现这是个代理服务器,也有一定几率追查到客户端的真实 IP。代理服务器通常会加入的 HTTP 头有 HTTP_VIA 和 HTTP_X_FORWARDED_FOR。
  • 透明代理,透明代理不但改动了数据包,还会告诉服务器客户端的真实 IP。这种代理除了能用缓存技术提高浏览速度,能用内容过滤提高安全性之外,并无其他显著作用,最常见的例子是内网中的硬件防火墙
  • 间谍代理,间谍代理指组织或个人创建的,用于记录用户传输的数据,然后进行研究、监控等目的的代理服务器。

常见代理类型

  • 寻找网上的免费代理,最好挑选高度匿名代理,使用前抓取下来筛选一下可用代理,也可以进一步维护一个代理池。
  • 使用付费代理服务,互联网上存在许多代理商,可以付费使用,质量比免费代理好很多。
  • ADSL 拨号,拨一次号换一次 IP,稳定性高,也是一种比较有效的解决方案。
  • 蜂窝代理,即用 4G 或 5G 网卡等制作的代理,由于蜂窝网络用作代理的情形较少,因此整体被封锁的几率会较低,但搭建蜂窝代理的成本较高。
3. requests 和 aiohttp 设置代理

对于 requests 来说,代理设置非常简单,只需传入 proxies 参数即可

代码如下:

代码语言:txt
AI代码解释
复制
import requests


proxy = '221.180.170.104:8080'
proxies = {
   'http': 'http://' + proxy,
   'https': 'https://' + proxy,
}
try:
   response = requests.get('http://httpbin.org/ip', proxies=proxies)
   print(response.text)

except Exception as e:
   print('Error', e.args)

运行结果如下:

代码语言:txt
AI代码解释
复制
{
  "origin": "221.180.170.104"
}

对于 aiohttp 来说,可以通过 proxy 参数直接设置即可,HTTP 代理设置如下:

代码语言:txt
AI代码解释
复制
import asyncio
import aiohttp

proxy = 'http://140.143.6.16:1080'


async def main():
   async with aiohttp.ClientSession() as session:
       try:
           async with session.get('http://httpbin.org/ip', proxy=proxy) as response:
               print(await response.text())
       except Exception as e:
           print('Error:', e.args)

if __name__ == '__main__':
   asyncio.get_event_loop().run_until_complete(main())

运行结果如下:

代码语言:txt
AI代码解释
复制
{
  "origin": "140.143.6.16"
}

运行结果的 origin 如果是代理服务器的 IP,则证明代理已经设置成功。

二、批量快速验证代理IP是否可用

将网站的代理爬取下来后,就需要批量快速的验证代理IP是否可用。

代理的数量很多的时候,为了提高代理的检测效率,使用异步请求库 aiohttp 来进行检测。

requests 作为一个同步请求库,我们在发出一个请求之后,程序需要等待网页加载完成之后才能继续执行。也就是这个过程会阻塞等待响应,如果服务器响应非常慢,比如一个请求等待十几秒,那么我们使用 requests 完成一个请求就会需要十几秒的时间,程序也不会继续往下执行,而在这十几秒的时间里程序其实完全可以去做其他的事情,比如调度其他的请求或者进行网页解析等。

对于响应速度比较快的网站来说,requests 同步请求和 aiohttp 异步请求的效果差距没那么大。可对于检测代理的网站来说,检测一个代理获得响应需要等待的时间较长,这时候使用 aiohttp 异步请求库的优势就体现出来了,检测效率会大大提高。

读取数据:

代码语言:txt
AI代码解释
复制
with open('代理IP数据.txt', 'r', encoding='utf-8') as f:
    con = f.readlines()
    print(f'共有代理IP数据:{len(con)}条')

运行结果如下:

代码语言:txt
AI代码解释
复制
共有代理IP数据:1690条

Process finished with exit code 0

批量验证代理IP是否可用:

代码语言:txt
AI代码解释
复制
import asyncio
import aiohttp
import re


with open('代理IP数据.txt', 'r', encoding='utf-8') as f:
    con = f.readlines()
    print(f'共有代理IP数据:{len(con)}条')

proxy_ips = []
for x in con:
    m = x.split('@')
    proxy_ips.append(m[0])

print(proxy_ips)
n = len(proxy_ips)
useful_ip = []


async def test(i):
    async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=False)) as session:
        try:
            async with session.get('http://httpbin.org/ip', proxy=f'http://{proxy_ips[i]}') as response:
                result = await response.text()
                print(result)
                datas = re.findall('"(.*?)": "(.*?)"', result)
                _, proxy = datas[0]
                if proxy in proxy_ips[i]:
                    useful_ip.append(proxy_ips[i])
                    print(f'该代理ip有效:{proxy_ips[i]}')
        except Exception as e:
            print('Error', e)


scrape_index_tasks = [asyncio.ensure_future(test(x)) for x in range(n)]
loop = asyncio.get_event_loop()
tasks = asyncio.gather(*scrape_index_tasks)
loop.run_until_complete(tasks)
print(useful_ip)

with open('可用代理IP.txt', 'w') as f:
    for item in useful_ip:
        f.write(item + '\n')

运行效果如下:

使用异步请求库 aiohttp 来进行检测代理IP是否可用,相比于requests 同步请求来说,效率非常快,程序运行成功,初步筛选出了部分可用代理IP,并保存到了txt里。

作者:叶庭云 公众号:微信搜一搜【修炼Python】 分享Python爬虫、数据分析数据可视化机器学习有关知识和实例;也分享实用的资料教程、软件工具、学习文档和简历模板。发现求知的乐趣,在不断总结和学习中进步。坚持输出优质文章,期待你的关注,一起交流学习,互相成就。 发现求知的乐趣,在不断总结和学习中进步,与诸君共勉。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用aiohttp库实现异步爬虫进行优化
在日常爬虫工作中,我们经常使用requests库去爬取某个站点的数据,但是每发出一个请求,程序必须等待网站返回响应才能接着运行,而在整个爬虫过程中爬虫程序是一直在等待的,实际上没有做任何事情。像这种占用磁盘/内存IO、网络IO的任务,大部分时间是CPU在等待的操作,就叫IO密集型任务。对于这种情可以考虑使用aiohttp库实现异步爬虫进行优化。
小白学大数据
2023/03/31
6670
python使用aiohttp通过设置代理爬取基金数据
说到python爬虫,我们就会想到它那强大的库,很多新手小白在选择框架的时候都会想到使用Scrapy,但是仅仅停留在会使用的阶段。在实际爬虫过程中遇到反爬机制是再常见不过的,今天为了增加对爬虫机制的理解,我们就通过手动实现多线程的爬虫过程,同时引入IP代理池进行基本的反爬操作。
小白学大数据
2023/06/15
5560
python异步爬虫的实现过程
在日常爬虫中我们会涉及到同步与异步问题,一般异步编程可以大幅度的提高系统的吞吐量,提高单位时间内发出的请求数目。之前的文章分享了些同步的知识,就是对aurl发起请求,等待响应。然后再访问burl,等待响应。。。
小白学大数据
2023/06/09
4440
【详细教程】学会使用Python隧道代理
作为一名专业爬虫程序猿,我深知在进行网络数据采集时,可能会面临网络封锁、隐私泄露等问题。今天,我将与大家分享如何学会使用Python隧道代理,帮助我们自由访问受限网站,同时保护了解探索Python隧道代理!
华科云商小徐
2023/08/11
4460
python高效爬虫的实现可以从哪些方面入手
在爬取数据的时候大家都希望自己的程序是能高效完成爬虫任务的,高效爬虫在提高爬取速度的同时也增加了爬取的数据量。这对于需要大量数据支撑的数据分析、机器学习、人工智能等任务非常重要。高效爬虫可以获取更多的原始数据,并允许更精准的数据清洗和处理。这样可以提高数据的质量和关联性,使得后续的分析和挖掘工作更加准确和有价值。
小白学大数据
2023/06/29
2330
python多线程并发采集黄金走势数据
最近随着硅谷银行破产、瑞信暴雷引发全球金融风险担忧加剧,叠加美联储加息预期放缓,国际金价逼近2000美元/盎司关口。据中国基金报报道,在经历近一个月的震荡下跌后,本周现货黄金价格持续走高,现货黄金收报1989美元/盎司,涨幅3.64%,且已突破2月初的金价高位,创下近11个月以来新高,其中有多重因素影响,不过欧美银行业危机引发市场避险情绪升温是主要推动因素。
小白学大数据
2023/03/21
8700
高效的Python隧道代理配置与管理
作为一名专业爬虫程序员,我们需要掌握高效的Python隧道代理配置与管理,以提高爬取数据的效率并保护个人隐私安全。本文将分享从入门到精通的Python隧道代理配置与管理技巧,为大家提供实用的操作指南和专业的知识分享。让我们一起步入高效的Python隧道代理的世界!
华科云商小孙
2023/08/15
3060
Python爬虫requests模块中如何设置代理
(一)代理基本原理        代理实际上指的就是代理服务器, 英文叫作proxy server ,它的功能是代理网络用户去取得网络信息。形象地说, 它是网络信息的中转站。在我们正常请求一个网站时, 是发送了请求给web 服务器,web 服务器把响应传回给我们。如果设置了代理服务器, 实际上就是在本机和服务器之间搭建了一个桥, 此时本机不是直接向web 服务器发起请求, 而是向代理服务器发出请求, 请求会发送给代理服务器, 然后由代理服务器再发送给web 服务器, 接着由代理服务器再把web 服务器返回的响应转发给本机。这样我们同样可以正常访问网页, 但这个过程中web 服务器识别出的真实IP 就不再是我们本机的IP 了, 就成功实现了IP 伪装, 这就是代理的基本原理。 (二)代理的作用        1、突破自身IP 访问限制, 访问一些平时不能访问的站点。        2、访问一些单位或团体内部资源: 比如使用教育网内地址段免费代理服务器, 就可以用于对教育网开放的各类FTP 下载上传, 以及各类资料查询共享等服务。        3、提高访问速度: 通常代理服务器都设置一个较大的硬盘缓冲区, 当有外界的信息通过时, 同时也将其保存到缓冲区中, 当其他用户再访问相同的信息时, 则直接由缓冲区中取屮信息传给用户, 以提高访问速度。        4、隐藏真实IP : 上网者也可以通过这种方法隐藏自己的IP , 免受攻击。对于爬虫来说, 我们用代理就是为了隐藏自身IP , 防止自身的被封锁。 (三)代理的分类        1、根据协议区分        根据代理的协议, 代理可以分为如下类别。        FTP 代理服务器:主要用于访问FTP 服务器, 一般有上传、下载以及缓存功能, 端口一般为21 、2121 等。        HTTP 代理服务器:主要用于访问网页, 一般有内容过滤和缓存功能, 端口一般为80 、8080 、3128 等。        SSL/TLS 代理:主要用于访问加密网站, 一般有SSL 或TLS加密功能( 最高支持128 位加密强度) , 端口一般为443 。        RTSP 代理:主要用于访问Real 流媒体服务器, 一般有缓存功能, 端口一般为554 。        Telnet 代理:主要用于telnet 远程控制( 黑客人侵计算机时常用于隐藏身份),端口一般为23 。        POP3/SMTP 代理:主要用于POP3/SMTP 方式收发邮件, 一般有缓存功能, 端口一般为110 / 25 。        SOCKS 代理:只是单纯传递数据包, 不关心具体协议和用法, 所以速度快很多, 一般有缓存功能, 端口一般为1080 。SOCKS 代理协议又分为SOCKS4 和SOCKS5 , 前者只支持TCP ,而后者支持TCP 和UDP , 还支持各种身份验证机制、服务器端域名解析等。简单来说,SOCKS4 能做到的SOCKS5 都可以做到, 但SOCKS5 能做到的SOCKS4 不一定能做到。 2、根据匿名程度区分        根据代理的匿名程度, 代理可以分为如下类别。        高度匿名代理: 会将数据包原封不动地转发, 在服务端看来就好像真的是一个普通客户端在访问, 而记录的IP 是代理服务器的IPO        普通匿名代理: 会在数据包上做一些改动, 服务端上有可能发现这是个代理服务器, 也有一定几率追查到客户端的真实伊代理服务器通常会加人的HITP 头有HTTP_VIA 和HTTP_X_FORWARDED FOR 。        透明代理:不但改动了数据包, 还会告诉服务器客户端的真实IPO 这种代理除了能用缓存技术提高浏览速度, 能用内容过滤提高安全性之外, 并无其他显著作用, 最常见的例子是内网中的硬件防火墙。        间谍代理:指组织或个人创建的用于记录用户传输的数据, 然后进行研究、监控等目的的代理服务器。
用户7886150
2020/12/31
1.8K0
大型fastapi项目实战 高并发请求神器之aiohttp(下)
1.先通过 event_loop = asyncio.get_event_loop() 创建了一个事件循环 2.通过 asyncio.gather 接受多个 future 或 coro 组成的列表 任务 3.通过 event_loop.run_until_complete(task) 我们 就开启 事件循环 直到这个任务执行结束。 4.async with aiohttp.ClientSession() as session: 是创建了一个异步的网络请求的上线文管理具柄 5.async with session.get('http://www.baidu.com') as resp: 异步请求数据 6.res = await resp.text() 异步的接收数据 再解释一下两个关键词 1.async 如果一个函数被这个async 关键词修饰 那这个函数就是一个 future object 2.await 协程对象执行到这个关键词定义之处就会做挂起操作,原理是与yield /yield from 类似的。
python编程从入门到实践
2021/03/03
3.3K0
大型fastapi项目实战 高并发请求神器之aiohttp(下)
代理可用性测试及使用
代理(Proxy)是指在网络通信中充当中间人的服务器,它接收客户端发送的请求,然后向服务器发送请求,获取响应后再将响应返回给客户端。代理服务器通常用于隐藏客户端的真实IP地址,提高安全性、访问速度等方面的需求。
叶子Tenney
2023/04/04
9950
代理可用性测试及使用
三步搞定:Python requests库与隧道代理的结合使用
嘿,大家好!今天我要和大家分享一个强大的工具组合——Python requests库与隧道代理的结合使用。如果你是一个喜欢编程的小伙伴,或者想要通过网络爬虫来获取数据的人,这篇文章将为你提供一些宝贵的经验和技巧。
用户614136809
2023/09/21
9000
Python Requests代理使用入门指南
你是否曾因为代理服务器配置不当而遭遇403错误代码?或是在测试API时收到未授权访问错误?这些常见的客户端错误不仅令人头疼,还会影响工作效率。在编写Python代码进行网络请求时,掌握代理的配置与使用至关重要。
用户11217396
2024/07/27
5070
Python3网络爬虫实战-19、代理基
我们在做爬虫的过程中经常会遇到这样的情况,最初爬虫正常运行,正常抓取数据,一切看起来都是那么的美好,然而一杯茶的功夫可能就会出现错误,比如 403 Forbidden,这时候打开网页一看,可能会看到“您的 IP 访问频率太高”这样的提示。出现这样的现象的原因是网站采取了一些反爬虫的措施,比如服务器会检测某个 IP 在单位时间内的请求次数,如果超过了这个阈值,那么会直接拒绝服务,返回一些错误信息,这种情况可以称之为封 IP,于是乎就成功把我们的爬虫禁掉了。
py3study
2020/01/03
5820
Python爬虫HTTP代理使用教程
Python爬虫实战教程里怎么使用HTTP代理。我需要整理一下搜索结果里的信息,然后分步骤说明。
华科云商小徐
2025/04/01
1230
Socks5代理的应用技巧
作为一名专业的爬虫程序员,我知道在进行数据采集时,使用代理服务器是很常见的。今天,我想和大家分享一些关于Socks5代理的应用技巧,希望能够帮助大家更好地利用Socks5代理来提升爬取效果。
华科云商小彭
2023/08/11
4780
Socks5代理的应用技巧
Requests与BeautifulSoup:高效解析网页并下载资源
在Python的众多网络爬虫框架中,Requests和BeautifulSoup因其简洁易用和强大的功能而脱颖而出。Requests是一个简单易用的HTTP库,支持多种HTTP请求方式,能够轻松地发送请求并获取网页内容。而BeautifulSoup则专注于HTML和XML文档的解析,能够快速提取网页中的关键信息。两者的结合,使得开发者可以高效地完成从网页抓取到数据提取的全过程。
小白学大数据
2025/03/03
790
《Python 常用技能》爬虫入门必备—ip代理 的优势与使用方法
动态代理IP,字面意思来说这个IP会随时随机发生变化,不是固定的,就是动态代理IP。动态代理IP一般会有网络爬虫用户使用。
呆呆敲代码的小Y
2022/04/20
1.1K0
《Python 常用技能》爬虫入门必备—ip代理 的优势与使用方法
我裂开了,教给他如何搭建和使用代理服务器,他居然用来做这么不正经的事(爬虫,代理ip)
在使用爬虫对某些网站进行爬取时,为了不让网站发现我们的ip,模拟其他用户ip地址去访问网站。也就相当于间接的去访问网站,流程如图:
大家一起学编程
2021/07/08
3.1K0
我裂开了,教给他如何搭建和使用代理服务器,他居然用来做这么不正经的事(爬虫,代理ip)
代理的基本原理
我们在做爬虫的过程中经常会遇到这样的情况,最初爬虫正常运行,正常抓取数据,一切看起来都是那么美好,然而一杯茶的功夫可能就会出现错误,比如403 Forbidden,这时候打开网页一看,可能会看到“您的IP访问频率太高”这样的提示。出现这种现象的原因是网站采取了一些反爬虫措施。比如,服务器会检测某个IP在单位时间内的请求次数,如果超过了这个阈值,就会直接拒绝服务,返回一些错误信息,这种情况可以称为封IP。 既然服务器检测的是某个IP单位时间的请求次数,那么借助某种方式来伪装我们的IP,让服务器识别不出是由
崔庆才
2018/06/25
2.1K0
使用httpx异步获取高校招生信息:一步到位的代理配置教程
随着2024年中国高考的临近,考生和家长对高校招生信息的需求日益增加。了解各高校的专业、课程设置和录取标准对于高考志愿填报至关重要。通过爬虫技术,可以高效地从各高校官网获取这些关键信息。然而,面对大量的请求和反爬机制的挑战,传统的同步爬虫方式已经难以满足需求。
jackcode
2024/05/16
2980
使用httpx异步获取高校招生信息:一步到位的代理配置教程
推荐阅读
相关推荐
使用aiohttp库实现异步爬虫进行优化
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文