python aiohttp 客户端使用方法 加快爬虫速度

python aiohttp 客户端使用方法 加快爬虫速度_第1张图片

介绍

aiohttp是python的一个异步网络模块,包含客户端和服务端模块。
相比requests模块,除了是异步写法外,大同小异,其速度比requests模块快。
python的多线程有全局解释器锁(GIL),使用多线程实际上同一时刻仅有一个线程在执行,使用协程的相对比较快,可以再配合多进程使用。

基本用法

安装

使用pip命令安装即可。pip install aiohttp

发起请求

aiohttp模块需要配合python 自带的asyncio模块使用,以下代码为发起客户端发起一个get请求。

# _*_ coding:utf8_*_
import asyncio
import aiohttp


async def fetch(session, url):
    """
    获取网页html代码
    :param session:
    :param url:
    :return:
    """
    async with session.get(url) as response:
        return await response.text()


async def main():
    """
    :return:
    """
    async with aiohttp.ClientSession() as session:
        html = await fetch(session, "http://blog.fenlanli.com")
        print(html)


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

其他http请求方法均有提供方便使用的函数:

    url = ""
    session.put(url, data='data')
    session.delete(url)
    session.head(url)
    session.patch(url, data='data')
    session.post(url, data='data')

还提供了一个request函数,可以动态的选择请求方式。

session.request('get', url, data={'key': 'val'})

参数传递

get方法

跟requests模块中的GET请求传参数是一样的。

    params = {'key': 'value'}
    async with session.get(url, params=params) as response:
        return await response.text()

post方法

提交文本数据:

async def post_data(session, url):
    """
    提交数据
    :param session:
    :param url:
    :return:
    """
    data = 'data'
    async with session.post(url, data=data) as response:
        return await response.text()

提交json数据:

async def fetch(session, url):
    """
    提交数据
    :param session:
    :param url:
    :return:
    """
    data = {'key': 'val'}
    async with session.post(url, json=data) as response:
        return await response.text()

获取返回值

一般常用的是获取文本内容或者json数据。
获取文本数据:

async with session.post(url, json=data) as response:
       return await response.json()

获取json数据:

async with session.post(url, json=data) as response:
       return await response.json()

自定义请求头

设置session的cookies参数即可:

async def fetch(session, url):
    """
    提交数据
    :param session:
    :param url:
    :return:
    """
    headers = {
        'User-Agent': 'User-Agent'
    }
    async with session.get(url, headers=headers) as response:
        return await response.text()

设置cookies

设置session的参数cookies即可:

async def fetch(session, url):
    """
    提交数据
    :param session:
    :param url:
    :return:
    """
    cookies = {'cookies_are': 'working'}
    async with session.get(url, cookies=cookies) as response:
        return await response.text()

使用代理

设置session的参数proxy即可:

async def fetch(session, url):
    """
    提交数据
    :param session:
    :param url:
    :return:
    """
    proxy = "http://my.proxy.cn"
    async with aiohttp.ClientSession() as session:
        async with session.get(url, proxy=proxy) as resp:
            print(resp.status)

至此,对于普通网站的爬虫基本够用了。

个人博客

你可能感兴趣的:(python aiohttp 客户端使用方法 加快爬虫速度)