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使用JSON库解析JSON数据的方法

    Python使用JSON库解析JSON数据的方法

    这篇文章主要介绍了Python使用JSON库解析JSON数据,主要包括如何在网页中获取json数据及python内置的json库,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • python 带时区的日期格式化操作

    python 带时区的日期格式化操作

    这篇文章主要介绍了python 带时区的日期格式化操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • Python中MySQL监控与日志配置实战指南

    Python中MySQL监控与日志配置实战指南

    这篇文章主要为大家详细介绍了Python中MySQL监控与日志配置的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-12-12
  • Python udp网络程序实现发送、接收数据功能示例

    Python udp网络程序实现发送、接收数据功能示例

    这篇文章主要介绍了Python udp网络程序实现发送、接收数据功能,结合实例形式分析了Python使用socket模块进行udp套接字创建、数据收发等相关操作技巧,需要的朋友可以参考下
    2019-12-12
  • 浅谈numpy 函数里面的axis参数的含义

    浅谈numpy 函数里面的axis参数的含义

    这篇文章主要介绍了numpy 函数里面的axis参数的含义,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • Python Selenium如何切换浏览器的页面

    Python Selenium如何切换浏览器的页面

    这篇文章主要介绍了Python Selenium如何切换浏览器的页面的相关资料,在使用Selenium进行网页测试时,跳转页面后常会出现无法定位元素的问题,解决这一问题的关键是学会在多个浏览器标签页或窗口间切换,需要的朋友可以参考下
    2024-10-10
  • 浅谈python输出列表元素的所有排列形式

    浅谈python输出列表元素的所有排列形式

    今天小编就为大家分享一篇浅谈python输出列表元素的所有排列形式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python Django连接MySQL数据库做增删改查

    python Django连接MySQL数据库做增删改查

    本文写的是python Django连接MySQL数据库的步骤,提供增删改查的代码
    2013-11-11
  • Python装饰器超详细实例教程

    Python装饰器超详细实例教程

    本文介绍了Python装饰器的基本概念、用途和实现方法,装饰器是一种在不修改原函数代码的前提下,为函数动态添加功能的工具,其本质是闭包和高阶函数,装饰器可用于日志记录、计时、权限校验等功能,感兴趣的朋友跟随小编一起看看吧
    2026-05-05
  • 为了顺利买到演唱会的票用Python制作了自动抢票的脚本

    为了顺利买到演唱会的票用Python制作了自动抢票的脚本

    大麦网,是中国综合类现场娱乐票务营销平台,业务覆盖演唱会、 话剧、音乐剧、体育赛事等领域。但是因为票数有限,还有黄牛们不能丢了饭碗,所以导致了,很多人都抢不到票,那么,今天带大家用Python来制作一个自动抢票的脚本小程序
    2021-10-10

最新评论