Python爬虫案例入门教程(纯小白向)——夜读书屋小说

2023-10-03 14:36

本文主要是介绍Python爬虫案例入门教程(纯小白向)——夜读书屋小说,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Python爬虫案例——夜读书屋小说

前言

如果你是python小白并且对爬虫有着浓厚的兴趣,但是面对网上错综复杂的实战案例看也看不懂,那么你可以尝试阅读我的文章,我也是从零基础python开始学习爬虫,非常清楚在过程中所遇到的困难,如果觉得我的文章对你的成长有所帮助,可以点上关注❤❤❤,我们一起进步!

实战案例

我们今天所爬取的是一个小说网站,并且我们爬取的小说是南派三叔的藏海花(爬取的小说可以自行选择哈)
网站链接:https://www.yekan360.com/canghaihua/

在这里插入图片描述

我们的爬取目标是将这个网页里的全部章节爬取到我们的本地文件夹里,并且这次爬取我们将采用异步协程的方法来提高爬虫的效率

爬取前的准备

编译的环境是Pycharm,我们需要引入的头文件如下:

import requests
import asyncio
import aiohttp
import aiofiles
import os
from lxml import etree

如果你的Pycharm里没有安装aiohttp和aiofiles,那么可以参考一下Python中aiohttp和aiofiles模块的安装该篇文章

开始爬取

函数讲解

创建main()函数主入口

if __name__ == '__main__':main()

定义main函数,再里面定义一个获取小说章节网站的函数,再将返回值放入href_list变量中,最后利用asyncio中的run函数来运行,具体详细代码下面讲解

def main():href_list=get_chapter_url()asyncio.run(download(href_list))

定义get_chapter_url函数,在内部使用request模块中的get函数来获取到网站的resp(该网站不需要引入headers和cookie就能访问),之后我们应用xpath模块来爬取到我们想要的内容,最后将所需内容返回。
页面源代码的抓取下文细说哇(大家不要着急❤)

def get_chapter_url():url="https://www.yekan360.com/canghaihua/"resp=requests.get(url).text.encode("utf-8")#print(resp)tree=etree.HTML(resp)href_list=tree.xpath("//div[@id='play_0']/ul/li[@class='line3']/a/@href")return href_list

现在讲解在asyncio.run(download(href_list))中的download函数,其中download的前缀必须是async(将函数变为async对象,才能应用多任务),再应用for循环将href_list将href一一遍历出来,将拼接出完整的url,将url传入get_page_source函数(在下面讲解)来获取我们想要得到的信息,将每个获取网址内容的操作变为一个一个的任务,存放在我们所定义的tasks[ ]的列表中,再将tasks丢进asyncio.wait里让它们不断循环进行来大大提高效率

async def download(href_list):tasks=[]for href in href_list:url="http://yk360.kekikc.xyz/"+hreft=asyncio.create_task(get_page_source(url))tasks.append(t)await asyncio.wait(tasks)

定义get_page_source函数来获取子页面里小说信息,我们运用aiohttp模块来对页面url的处理来获取信息,得到的信息同样可以用xpath来筛选获取。然后运用os模块创建文件,最后运用aiofiles模块将内容下载到所创建的文件夹中

async def get_page_source(url):while 1:try:async with aiohttp.ClientSession() as session:async with session.get(url) as resp:page_source=await resp.text()tree=etree.HTML(page_source)title="\n".join(tree.xpath("//div[@class='m-title col-md-12']/h1/text()")).replace("[]","")body="\n".join(tree.xpath("//div[@class='panel-body']//p/text()")).replace("\u3000","")if not os.path.exists("./藏海花"):os.mkdir("./藏海花")async with aiofiles.open(f"./藏海花/{title}.txt",mode="w",encoding="utf-8") as f:await f.write(body)breakexcept:print("报错了,重试一下",url)print("下载完毕",url)

网页源代码的解析

  • 小说主页源代码解析
    在这里插入图片描述

可以由图看出,该源代码对于小白来说算相当友好的,每个章节的url全部都整齐的排列出来,但是获取的url只是一部分,是需要拼接操作的。我们可以用tree.xpath(“//div[@id=‘play_0’]/ul/li[@class=‘line3’]/a/@href”),对div的id定位,再对ul的深入,最后对li中的a的属性获取即可

tree.xpath("//div[@id='play_0']/ul/li[@class='line3']/a/@href")
  • 章节页面源代码解析

由于页面源代码不好看清楚其中的嵌套结构,因此我们采用对页面的检查来对信息的抓取

在这里插入图片描述

由图可见,我们需要的标题信息是div中的class='m-title col-md-12’里的h1,而内容信息是在div中class='panel-body’里的p因此可以写出:

title="\n".join(tree.xpath("//div[@class='m-title col-md-12']/h1/text()")).replace("[]","")
body="\n".join(tree.xpath("//div[@class='panel-body']//p/text()")).replace("\u3000","")

爬取结果呈现

所创建的文件夹是在该爬虫文件同一路径下

在这里插入图片描述

在这里插入图片描述

源代码

如果有同学实在不想自己书写,那么可以直接复制到自己的编译器(pycharm3.11)运行来体验一下爬虫的乐趣,但还是希望大家可以动手自己写一写来提高自己的能力

import requests
import asyncio
import aiohttp
import aiofiles
import os
from lxml import etreeasync def get_page_source(url):while 1:try:async with aiohttp.ClientSession() as session:async with session.get(url) as resp:page_source=await resp.text()tree=etree.HTML(page_source)title="\n".join(tree.xpath("//div[@class='m-title col-md-12']/h1/text()")).replace("[]","")body="\n".join(tree.xpath("//div[@class='panel-body']//p/text()")).replace("\u3000","")if not os.path.exists("./藏海花"):os.mkdir("./藏海花")async with aiofiles.open(f"./藏海花/{title}.txt",mode="w",encoding="utf-8") as f:await f.write(body)breakexcept:print("报错了,重试一下",url)print("下载完毕",url)
async def download(href_list):tasks=[]for href in href_list:url="http://yk360.kekikc.xyz/"+hreft=asyncio.create_task(get_page_source(url))tasks.append(t)await asyncio.wait(tasks)def get_chapter_url():url="https://www.yekan360.com/canghaihua/"resp=requests.get(url).text.encode("utf-8")#print(resp)tree=etree.HTML(resp)href_list=tree.xpath("//div[@id='play_0']/ul/li[@class='line3']/a/@href")return href_listdef main():href_list=get_chapter_url()asyncio.run(download(href_list))if __name__ == '__main__':main()

总结

本次的爬虫案例并没有特别的复杂,每个函数部分的逻辑也是非常的清晰的,大家完全可以自己写出来,同时文章中若有错误和不完善的地方,可以私信给我,因为作者本身也是个小白,望谅解(❁´◡`❁)。最后如果文章对你有所帮助,或者想要和作者一起成长,可以给我点个关注,我们一起进步!

这篇关于Python爬虫案例入门教程(纯小白向)——夜读书屋小说的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

读书摘录《控糖革命》

又到了每周推荐时间,这周末给大家推荐一本书《控糖革命》。身体是革命的本钱,只有保持健康的身体,才能保证持久的生产力,希望我的读者都可以身体健康,青春永驻。 推荐前,首先申明在《控糖革命》一书中,作者提出了一些颇具争议的观点,这些观点并没有经过系统的科学论证,但这并不妨碍我们从中获取一些有益的控糖建议。作者通过分享作者的个人经验和研究,为我们提供了一种全新的饮食理念,帮助我们更好地控制血糖峰值

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学