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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM