Python异步爬虫requests和aiohttp中 * 的使用
作者:Dream丶Killer 时间:2021-06-26 11:56:05
爬虫要想爬的好,IP代理少不了。。现在网站基本都有些反爬措施,访问速度稍微快点,就会发现IP被封,不然就是提交验证。下面就两种常用的模块来讲一下 * 的使用方式。话不多说,直接开始。
requests中 * 的使用:
requests
中使用 * 只需要添加一个proxies
参数即可。proxies
的参数值是一个字典,key
是代理协议(http/https),value
就是ip和端口号,具体格式如下。
try:
response = requests.get('https://httpbin.org/ip', headers=headers,
proxies={'https':'https://221.122.91.74:9401'}, timeout=6)
print('success')
# 检测 * 是否使用成功
# 第一种方式,返回发送请求的IP地址,使用时要在 get() 添加 stream = True
# print(response.raw._connection.sock.getpeername()[0])
# 第二种方式,直接返回测试网站的响应数据的内容
print(response.text)
except Exception as e:
print('error',e)
注意: peoxies
的key
值(http/https
)要和url
一致,不然会直接使用本机IP直接访问。
aiohttp中 * 的使用:
由于requests
模块不支持异步,迫不得已使用aiohttp
,掉了不少坑。
它的使用方式和requests
相似,也是在get()
方法中添加一个参数,但此时的参数名为proxy
,参数值是字符串,且字符串中的代理协议,只支持http
,写成https
会报错。
这里记录一下我的纠错历程。。
首先根据网上的使用方式,我先试了一下下面的代码。
async def func():
async with aiohttp.ClientSession() as session:
try:
async with session.get("https://httpbin.org/ip", headers=headers,
proxy='http://183.220.145.3:80', timeout=6) as response:
page_text = await response.text()
print('success')
print(page_text)
except Exception as e:
print(e)
print('error')
if __name__=='__main__':
asyncio.run(func())
修改后,再来
async def func():
con = aiohttp.TCPConnector(verify_ssl=False)
async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(verify_ssl=False)) as session:
try:
async with session.get("https://httpbin.org/ip", headers=headers,
proxy='http://183.220.145.3:80', timeout=6) as response:
# print(response.raw._connection.sock.getpeername()[0])
page_text = await response.text()
print(page_text)
print('success')
except Exception as e:
print(e)
print('error')
非但没有解决反倒多了一个警告,好在改一下就好。额~懒得粘了,直接来最终版本吧。。
# 修改事件循环的策略,不能放在协程函数内部,这条语句要先执行
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
async def func():
# 添加trust_env=True
async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=False), trust_env=True) as session:
try:
async with session.get("https://httpbin.org/ip", headers=headers,
proxy='http://183.220.145.3:80', timeout=10) as response:
page_text = await response.text()
print(page_text)
print('success')
except Exception as e:
print(e)
print('error')
虽然纠错过程有点长,但好在知道怎么用了。
来源:https://blog.csdn.net/qq_43965708/article/details/109622238
标签:Python,requests,aiohttp,代理
0
投稿
猜你喜欢
Python实战之设计一个多功能办公小工具
2023-05-26 02:54:11
git中cherry-pick命令的使用教程
2023-02-11 00:33:57
数据库分页大全(mssql,mysql,oracle)
2010-10-25 20:02:00
python 下载文件的多种方法汇总
2023-08-11 16:50:05
uniqueidentifier转换成varchar数据类型的sql语句
2011-09-30 11:17:48
MySQL查询随机数据的4种方法和性能对比
2024-01-25 17:09:46
CGO编程基础快速入门
2024-02-05 05:20:58
Python 如何实现数据库表结构同步
2024-01-21 16:38:44
python实现余弦相似度文本比较的示例
2023-01-18 09:17:48
css reset中的list-style:none
2010-05-26 13:56:00
python之列表推导式的用法
2021-04-22 18:54:59
Mysql合并结果接横向拼接字段的实现步骤
2024-01-19 13:39:35
JS简单的轮播的图片滚动实例
2024-03-19 19:46:31
python中opencv 直方图处理
2021-12-24 09:45:17
最新MySQL高级SQL语句大全
2024-01-24 22:58:00
asp如何实现强制登录注册?
2010-05-24 18:13:00
Python reshape的用法及多个二维数组合并为三维数组的实例
2021-12-18 10:29:25
Python实现图片添加文字
2021-11-22 21:17:11
mysql数据库中的索引类型和原理解读
2024-01-19 20:48:17
SQL查询不重复记录/删除重复记录
2008-11-18 16:08:00