【异步爬虫】圆我四大名著《西游记》之梦

2023-11-06 21:10

本文主要是介绍【异步爬虫】圆我四大名著《西游记》之梦,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

名著《西游记》爬虫实战

  • 前言
  • 1. 获取所有章节cid
  • 2. 获取单个章节内容
  • 3. 完整代码

前言

一直都想找个机会好好读读四大名著,今天我下载了 《西游记》 全部章节,一起开始阅读吧!

1. 获取所有章节cid

名著所在网址:https://dushu.baidu.com/pc/detail?gid=4306063500

在这里插入图片描述

  • 当我们检查网页源代码时,未发现章节信息,所以该数据可能是服务器二次发送的。

在这里插入图片描述

  • F12,打开开发者工具,Network刷新进行Fetch/XHR数据抓包。

在这里插入图片描述

  • 找到章节信息后,copy URL,可以看到请求小说的章节数据与book_id有关

在这里插入图片描述

# 获取所有章节的cid
async def getCatalog(url):resp = requests.get(url)dict = resp.json()# 创建任务列表tasks = []for item in dict['data']['novel']['items']:  # item就是对应每一个章节的名称和cidtitle = item['title']cid = item['cid']print(title, cid)tasks.append(aiodownload(book_id, cid, title))await asyncio.wait(tasks)

在这里用到异步协程,提高效率,方法前用async修饰,await,线程阻塞,释放CPU资源。

2. 获取单个章节内容

  • 进入某一章节,进行分析,同样 F12Network,数据抓包,进行缜密分析,终于找到文本内容。

在这里插入图片描述

  • 进入Headers,copyURL,获取requests.get().json()的数据。

在这里插入图片描述

# 准备异步任务
async def aiodownload(book_id, cid, title):data = {"book_id": book_id,"cid": f"{book_id}|{cid}","need_bookinfo": 1}# data需要为json()data = json.dumps(data)url = f"https://dushu.baidu.com/api/pc/getChapterContent?data={data}"# 获取协程请求对象async with aiohttp.ClientSession() as session:  # requestsasync with session.get(url) as resp:dic = await resp.json()  # 阻塞# 获取异步io文件流async with aiofiles.open('./novels/'+title+'.txt', mode='w', encoding='utf-8') as f:await f.write(dic['data']['novel']['content'])  # 把小说内容写出print(title, '下载完成!')

3. 完整代码

# 小说url
# url = 'https://dushu.baidu.com/api"/pc/getCatalog?data:{"book_id":"4306063500"}' =>所有章节名称链接
# 章节内部内容url
# url = https://dushu.baidu.com/api/pc/getChapterContent?data={"book_id":"4306063500", "cid":"4306063500"|11348571","need_bookinfo":"1"}import requests
import asyncio
import aiohttp
import aiofiles
import json
"""
1. 同步操作,访问getCatalog 拿到所有章节的cid和名称
2. 异步操作,访问getChapterContent 下载所有的文章内容
"""# 准备异步任务
async def aiodownload(book_id, cid, title):data = {"book_id": book_id,"cid": f"{book_id}|{cid}","need_bookinfo": 1}# data需要为json()data = json.dumps(data)url = f"https://dushu.baidu.com/api/pc/getChapterContent?data={data}"# 获取协程请求对象async with aiohttp.ClientSession() as session:  # requestsasync with session.get(url) as resp:dic = await resp.json()  # 阻塞# 获取异步io文件流async with aiofiles.open('./novels/'+title+'.txt', mode='w', encoding='utf-8') as f:await f.write(dic['data']['novel']['content'])  # 把小说内容写出print(title, '下载完成!')# 获取所有章节的cid
async def getCatalog(url):resp = requests.get(url)dict = resp.json()# 创建任务列表tasks = []for item in dict['data']['novel']['items']:  # item就是对应每一个章节的名称和cidtitle = item['title']cid = item['cid']print(title, cid)tasks.append(aiodownload(book_id, cid, title))await asyncio.wait(tasks)if __name__ == '__main__':# book_idbook_id = "4306063500"  # 西游记url = 'https://dushu.baidu.com/api/pc/getCatalog?data={"book_id":"' + book_id + '"}'# 启动协程asyncio.run(getCatalog(url))

在这里插入图片描述

在这里插入图片描述
加油!

感谢!

努力!

这篇关于【异步爬虫】圆我四大名著《西游记》之梦的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/359078

相关文章

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

Python使用asyncio实现异步操作的示例

《Python使用asyncio实现异步操作的示例》本文主要介绍了Python使用asyncio实现异步操作的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录1. 基础概念2. 实现异步 I/O 的步骤2.1 定义异步函数2.2 使用 await 等待异

Python中的异步:async 和 await以及操作中的事件循环、回调和异常

《Python中的异步:async和await以及操作中的事件循环、回调和异常》在现代编程中,异步操作在处理I/O密集型任务时,可以显著提高程序的性能和响应速度,Python提供了asyn... 目录引言什么是异步操作?python 中的异步编程基础async 和 await 关键字asyncio 模块理论

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de

js异步提交form表单的解决方案

1.定义异步提交表单的方法 (通用方法) /*** 异步提交form表单* @param options {form:form表单元素,success:执行成功后处理函数}* <span style="color:#ff0000;"><strong>@注意 后台接收参数要解码否则中文会导致乱码 如:URLDecoder.decode(param,"UTF-8")</strong></span>

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

Golang 网络爬虫框架gocolly/colly(五)

gcocolly+goquery可以非常好地抓取HTML页面中的数据,但碰到页面是由Javascript动态生成时,用goquery就显得捉襟见肘了。解决方法有很多种: 一,最笨拙但有效的方法是字符串处理,go语言string底层对应字节数组,复制任何长度的字符串的开销都很低廉,搜索性能比较高; 二,利用正则表达式,要提取的数据往往有明显的特征,所以正则表达式写起来比较简单,不必非常严谨; 三,使

Golang网络爬虫框架gocolly/colly(四)

爬虫靠演技,表演得越像浏览器,抓取数据越容易,这是我多年爬虫经验的感悟。回顾下个人的爬虫经历,共分三个阶段:第一阶段,09年左右开始接触爬虫,那时由于项目需要,要访问各大国际社交网站,Facebook,myspace,filcker,youtube等等,国际上叫得上名字的社交网站都爬过,大部分网站提供restful api,有些功能没有api,就只能用http抓包工具分析协议,自己爬;国内的优酷、

Golang网络爬虫框架gocolly/colly(三)

熟悉了《Golang 网络爬虫框架gocolly/colly 一》和《Golang 网络爬虫框架gocolly/colly 二》之后就可以在网络上爬取大部分数据了。本文接下来将爬取中证指数有限公司提供的行业市盈率。(http://www.csindex.com.cn/zh-CN/downloads/industry-price-earnings-ratio) 定义数据结构体: type Zhj

014.Python爬虫系列_解析练习

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈 优