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)

Python异步爬虫requests和aiohttp中 * 的使用

注意: peoxieskey值(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())

Python异步爬虫requests和aiohttp中 * 的使用

修改后,再来

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')

Python异步爬虫requests和aiohttp中 * 的使用

非但没有解决反倒多了一个警告,好在改一下就好。额~懒得粘了,直接来最终版本吧。。

# 修改事件循环的策略,不能放在协程函数内部,这条语句要先执行
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')

Python异步爬虫requests和aiohttp中 * 的使用

虽然纠错过程有点长,但好在知道怎么用了。

来源: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
  • asp之家 网络编程 m.aspxhome.com