前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >3.异步协程爬取下载网络小说

3.异步协程爬取下载网络小说

原创
作者头像
jiagui
发布2024-07-08 15:44:16
640
发布2024-07-08 15:44:16
举报
文章被收录于专栏:Python协程Python协程

之前,我们已经通过多线程的方式实现了下载网络小说,参阅文章地址,下面将采用异步携程的方式进行下载。

代码语言:Python
复制
import json
import aiofiles
import aiohttp
import asyncio
import requests

"""
1.同步操作:访问getCatalog拿到所有章节的name和cid
https://dushu.baidu.com/api/pc/getDetail?data={"book_id":"4306063500"}
2.异步操作:访问getChapterContent下载所有的文章内容
https://dushu.baidu.com/api/pc/getChapterContent?data={"book_id":"4306063500","cid":"4306063500|1569782244","need_bookinfo":1}
"""
async def getCatalog(url):
    resp=requests.get(url)
    result=resp.json()
    resp.close()
    for item in result['data']['novel']['items']:#items就是对应每一个章节的name和cid
        title=item['title']
        cid=item['cid']
        tasks=[
            asyncio.create_task(getChapterContent(cid,book_id,title))
        ]
    await asyncio.wait(tasks)

async def getChapterContent(cid,book_id,title):
    data={
        "book_id": book_id,
        "cid": f"{book_id}|{cid}",
        "need_bookinfo": 1
    }
    data=json.dumps(data)
    url='https://dushu.baidu.com/api/pc/getChapterContent?data='+data
    print(url)
    async with aiohttp.ClientSession() as s:
        async with s.get(url) as response:
            result=await response.json()
            content = result['data']['novel']['content']
            async with aiofiles.open(f"西游记/{title}.txt",mode='w',encoding='utf-8') as f:
                await f.write(content)


if __name__ == '__main__':
    book_id='4306063500'
    url='https://dushu.baidu.com/api/pc/getCatalog?data={"book_id":"'+book_id+'"}'
    asyncio.run(getCatalog(url))
    print('爬取西游记小说完毕!')

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档