python异步请求aiohttp_python3异步爬虫 ——aiohttp模板使用

一.简单使用和讲解

import aiohttp

import asyncio

async def fetch(client):

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()运行完

二.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模块回调(部分代码)

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

task = loop.create_task(main())

task.add_done_callback(callback) #上面的mian方法的返回值为下面callback方法名所用方法的入参

四.aiohttp请求相关

1.发起请求

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

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

和reuqest模块类似直接加就可以了

#设置代理

session.get("http://python.org",proxy="http://some.proxy.com")

3.自定义域名解析地址

#我们可以指定域名服务器的 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)

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

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

五.aiohttp响应相关

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

resp.status

2.获取网站的请求头

resp.headers 来查看响应头,得到的值类型是一个dict

resp.raw_headers  查看原生的响应头,字节类型

resp.history  查看重定向的响应头

3.获取网站的响应内容

使用text()方法

使用json()方法 json格式

使用read()方法,不进行编码,为字节形式

r.content.read(10) 获取二进制流前10

注意:text(),read()方法是把整个响应体读入内存,如果你是获取大量的数据,请考虑使用”字节流“(StreamResponse)

你可能感兴趣的:(python异步请求aiohttp_python3异步爬虫 ——aiohttp模板使用)