zoukankan      html  css  js  c++  java
  • 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)
    
  • 相关阅读:
    MySQL中默认值中用时间函数的问题
    mysql数据表的操作
    mysql数据库的基本操作
    mysql数据库的几个基本概念
    【转载】CentOS6.5_X64下安装配置MongoDB数据库
    Swap Swap,即交换分区
    linux中给PHP安装mongodb的扩展
    centos yum 安装 mongodb 以及php扩展
    设计模式主要分三个类型:创建型、结构型和行为型
    MySQL DELETE语句和TRUNCATE TABLE语句的区别
  • 原文地址:https://www.cnblogs.com/pythonywy/p/13825387.html
Copyright © 2011-2022 走看看