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协程异步爬取数据的资料请关注脚本之家其它相关文章!

相关文章

  • Python中进行表单处理的方法详解

    Python中进行表单处理的方法详解

    这篇文章主要为大家详细介绍了Python中进行表单处理的方法,分别是利用Flask和Flask-WTF处理表单,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-12-12
  • 深入了解Python中计数器Counter的使用

    深入了解Python中计数器Counter的使用

    计数器counter是包含在collections模块中的容器,这篇文章主要来和大家聊聊计数器counter的使用,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-09-09
  • 浅析python 中大括号中括号小括号的区分

    浅析python 中大括号中括号小括号的区分

    python语言最常见的括号有三种,分别是:小括号( )、中括号[ ]和大括号也叫做花括号{ }。这篇文章主要介绍了python 中大括号中括号小括号的区分,需要的朋友可以参考下
    2019-07-07
  • Python 中如何使用requests模块发布表单数据

    Python 中如何使用requests模块发布表单数据

    requests 库是 Python 的主要方面之一,用于创建对已定义 URL 的 HTTP 请求,本篇文章介绍了 Python requests 模块,并说明了我们如何使用该模块在 Python 中发布表单数据,感兴趣的朋友跟随小编一起看看吧
    2023-06-06
  • Python时间序列缺失值的处理方法(日期缺失填充)

    Python时间序列缺失值的处理方法(日期缺失填充)

    这篇文章主要给大家介绍了关于Python时间序列缺失值(日期缺失填充)的处理方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • python排序算法的简单实现方法

    python排序算法的简单实现方法

    这篇文章主要给大家介绍了关于python排序算法的简单实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • 关于Python的文本文件转换编码问题

    关于Python的文本文件转换编码问题

    这篇文章主要介绍了关于Python的文本文件转换编码问题,编程过程中,经成会遇到字符编码的问题,需要的朋友可以参考下
    2023-04-04
  • Python制作简易聊天器,搭建UDP网络通信模型

    Python制作简易聊天器,搭建UDP网络通信模型

    这篇文章主要介绍了Python制作简易聊天器,搭建UDP网络通信模型,用UDP建立网络模型来完成一个简单的聊天器,感兴趣的小伙伴可以参考一下,希望对你有所帮助
    2022-01-01
  • 对python 合并 累加两个dict的实例详解

    对python 合并 累加两个dict的实例详解

    今天小编就为大家分享一篇对python 合并 累加两个dict的实例详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • pytorch自定义二值化网络层方式

    pytorch自定义二值化网络层方式

    今天小编就为大家分享一篇pytorch自定义二值化网络层方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01

最新评论