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)
    
  • 相关阅读:
    算法题汇集
    C# WinForm MDI左右分栏 多文档
    DDoS和CC攻击的区别
    搭建java程序写的博客Jpress
    U盘图标DIY方法
    磁盘空间不够用?教你一键清理电脑重复文件Duplicate File Finder
    给WordPress文章页URL赋予.html后缀
    使用七牛云和PicGo搭建图床
    wordpress好用的Markdown插件WP Editor.MD
    虚拟主机、VPS、云服务器三者的区别
  • 原文地址:https://www.cnblogs.com/pythonywy/p/13825387.html
Copyright © 2011-2022 走看看