Python协程异步爬取数据(asyncio+aiohttp)实例

 更新时间:2023年08月21日 09:37:55   作者:YiYa_咿呀  
这篇文章主要为大家介绍了Python协程异步爬取数据(asyncio+aiohttp)实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

使用asyncio+aiohttp异步爬取一部小说

思路

里面涉及到异步文件的读写aiofiles,同时在发送请求时涉及到将字典转化为字符串,接受响应时将字符串转化为字典,故这个里面涉及到json库,同时在请求下载链接的cidtitle时使用的是同步获取一条请求的响应,故其为同步操作,使用requests

代码

import requests
import aiohttp
import asyncio
import json
import aiofiles
# url = 'http://dushu.baidu.com/api/pc/getCatalog?data={%22book_id%22:%224306063500%22}'
# bookid = 'http://dushu.baidu.com/api/pc/getChapterContent?data={%22book_id%22:%224306063500%22,%22cid%22:%224306063500|1569782244%22,%22need_bookinfo%22:1'
async def downloadNovel(cid,title,bid):
    data2 = {
        "book_id": bid,
        "cid": f"{bid}|{cid}",
        "need_bookinfo": 1
    }
    # 将字典转化为字符串
    data2 = json.dumps(data2)
    # 创建请求链接
    bookurl = f'http://dushu.baidu.com/api/pc/getChapterContent?data={data2}'
    # 这里老是忘记打括号 aiohttp.ClientSession()
    async with aiohttp.ClientSession() as session:
        async with session.get(bookurl) as resp:
            # 等待结果返回
            dic = await resp.json()
            # 设置编码格式encoding='utf-8'
            async with aiofiles.open(f'./articles/{title}',mode = 'w',encoding='utf-8') as f:
                # 异步将内容写入文件
                await f.write(dic['data']['novel']['content'])
async def getCataList(url):
    # 同步爬取所有的章节相关信息
    resp = requests.get(url)
    # 将返回的字符转化为字典形式
    dic = resp.json()
    # print(dic)
    # 创建一个空对象用于存储异步任务
    tasks = []
    # 循环创建异步任务并且添加至tasks中
    for item in dic['data']['novel']['items']:
        title = item['title']
        cid = item['cid']
        tasks.append(asyncio.create_task(downloadNovel(cid,title,bid)))
        print(title,cid)
        # 执行异步任务
    await asyncio.wait(tasks)
if __name__ == '__main__':
    bid = "4306063500"
    url = 'http://dushu.baidu.com/api/pc/getCatalog?data={"book_id":"' + bid + '"}'
    print(url)
    asyncio.run(getCataList(url))

效果如下

数据爬取成功

以上就是Python协程异步爬取数据(asyncio+aiohttp)实例的详细内容,更多关于Python协程异步爬取数据的资料请关注脚本之家其它相关文章!

相关文章

  • jupyter notebook出现In[*]的问题及解决

    jupyter notebook出现In[*]的问题及解决

    这篇文章主要介绍了jupyter notebook出现In[*]的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Python实现图像随机添加椒盐噪声和高斯噪声

    Python实现图像随机添加椒盐噪声和高斯噪声

    图像噪声是指存在于图像数据中的不必要的或多余的干扰信息。在噪声的概念中,通常采用信噪比(Signal-Noise Rate, SNR)衡量图像噪声。本文将利用Python实现对图像随机添加椒盐噪声和高斯噪声,感兴趣的可以了解一下
    2022-09-09
  • pytorch中部分矩阵乘法和数组乘法的小结

    pytorch中部分矩阵乘法和数组乘法的小结

    本文主要介绍了pytorch中部分矩阵乘法和数组乘法的小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Python函数装饰器原理与用法详解

    Python函数装饰器原理与用法详解

    这篇文章主要介绍了Python函数装饰器原理与用法,结合实例形式详细分析了Python装饰器的原理、功能、分类、常见操作技巧与使用注意事项,需要的朋友可以参考下
    2019-08-08
  • python机器学习理论与实战(四)逻辑回归

    python机器学习理论与实战(四)逻辑回归

    这篇文章主要为大家详细介绍了python机器学习理论与实战第四篇,逻辑回归的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Python socket连接中的粘包、精确传输问题实例分析

    Python socket连接中的粘包、精确传输问题实例分析

    这篇文章主要介绍了Python socket连接中的粘包、精确传输问题,结合实例形式分析了Python socket连接中的粘包、精确传输相关问题原因、解决方案与操作注意事项,需要的朋友可以参考下
    2020-03-03
  • Python中实现远程调用(RPC、RMI)简单例子

    Python中实现远程调用(RPC、RMI)简单例子

    说白了,远程调用就是将对象名、函数名、参数等传递给远程服务器,服务器将处理结果返回给客户端
    2014-04-04
  • Python制作圣诞树和圣诞树词云

    Python制作圣诞树和圣诞树词云

    本文主要介绍了利用Python制作三种不同形状的圣诞树和圣诞树词云,文中的示例代码讲解详细,对我们学习Python有一定的帮助,快跟随小编一起学习吧
    2021-12-12
  • python使用xlrd实现检索excel中某列含有指定字符串记录的方法

    python使用xlrd实现检索excel中某列含有指定字符串记录的方法

    这篇文章主要介绍了python使用xlrd实现检索excel中某列含有指定字符串记录的方法,涉及Python使用xlrd模块检索Excel的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-05-05
  • python进阶之协程你了解吗

    python进阶之协程你了解吗

    这篇文章主要为大家详细介绍了python进阶之协程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02

最新评论