• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

python3异步爬虫 ——aiohttp模板使用

python 搞java代码 3年前 (2022-05-21) 31次浏览 已收录 0个评论

一.简单使用和讲解

<code class="language-python">import <a href="https://www.gaodaima.com/tag/aiohttp" title="查看更多关于aiohttp的文章" target="_blank">aiohttp</a>
import <a href="https://www.gaodaima.com/tag/async" title="查看更多关于async的文章" target="_blank">async</a>io

async def fetch(<a href="https://www.gaodaima.com/tag/client" title="查看更多关于client的文章" target="_blank">client</a>):
    async with client.get("http://httpbin.org/get") as resp:
        assert resp.status == 200
        return await resp.text()


async def main():
    async with aiohttp.ClientSession() as client:
        html = await fetch(client)
        print(html)

loop = asyncio.get_event_loop()     #返回一个事件循环对象,是asyncio.Baseeventloop的实例

for i in range(30):
    task = loop.create_task(main())     #添加任务

loop.run_until_complete(main())    #运行直至main()运行完
</code>

www#gaodaima.com来源gao@!dai!ma.com搞$$代^@码网搞代码

二.asyncio模块(事件相关)

Column Column
Asyncio.get_event_loop() 返回一个事件循环对象,是asyncio.Baseeventloop的实例
Abstracteventloop.stop() 停止运行事件循环
Abstracteventloop.run_forever() 一直运行直到stop()
Abstracteventloop.run_until_complete(func()) 运行直至func对象运行完
Abstracteventloop.close() 关闭事件循环
Abstracteventloop.is_running() 返回事件循环的是否运行
Abstracteventloop.create_task(func()) 添加事件

三.asyncio模块回调(部分代码)

<code class="language-python">loop = asyncio.get_event_loop()     #返回一个事件循环对象,是asyncio.Baseeventloop的实例
task = loop.create_task(main())   
task.add_done_callback(callback)   #上面的mian方法的返回值为下面callback方法名所用方法的入参
</code>

四.aiohttp请求相关

1.发起请求

<code class="language-python">import aiohttp
import asyncio


async def request_get(url):
    async with aiohttp.ClientSession() as client:  # 创建
        async with client.get(url) as resp:
            assert resp.status == 200  # 如果状态码是200才往下走,不然抛异常
            print( await resp.text())


loop = asyncio.get_event_loop()
loop.run_until_complete(request_get("http://httpbin.org/get"))
</code>

2.添加请求头,params,cookies,代理

<code class="language-python">和reuqest模块类似直接加就可以了
#设置代理
 session.get("http://python.org",proxy="http://some.proxy.com")
</code>

3.自定义域名解析地址

<code class="language-python">#我们可以指定域名服务器的 IP 对我们提供的get或post的url进行解析
from aiohttp.resolver import AsyncResolver
 
resolver = AsyncResolver(nameservers=["8.8.8.8", "8.8.4.4"])
conn = aiohttp.TCPConnector(resolver=resolver)
</code>

4.控制同时连接的数量(连接池)

<code class="language-python">async def func1():
 cookies = {"my_cookie": "my_value"}
 conn = aiohttp.TCPConnector(limit=2)  #默认100,0表示无限
 async with aiohttp.ClientSession(cookies=cookies,connector=conn) as session:
    pass
</code>

五.aiohttp响应相关

1.获取网站的响应状态码

<code class="language-python">resp.status
</code>

2.获取网站的请求头

<code class="language-python">resp.headers 来查看响应头,得到的值类型是一个dict
resp.raw_headers  查看原生的响应头,字节类型
resp.history      查看重定向的响应头
</code>

3.获取网站的响应内容

<code class="language-python">使用text()方法
使用json()方法  json格式
使用read()方法,不进行编码,为字节形式
r.content.read(10)  获取二进制流前10 
注意:text(),read()方法是把整个响应体读入内存,如果你是获取大量的数据,请考虑使用”字节流“(StreamResponse)
</code>

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python3异步爬虫 ——aiohttp模板使用
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址