初学——爬取新笔趣阁案例最新

2024-02-01 17:20

本文主要是介绍初学——爬取新笔趣阁案例最新,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这是作为新人小白的我第一次写博客,想想还是挺激动的。

首先写代码前,希望大家明白一件事。

代码的规范性。——————真的非常非常非常非常非常重要!

在这之前,我还没体会到代码规范的重要性,直到昨天,我收集项目实例的时候。——头都要大了

同样的需求,代码却千奇百怪,形形色色。我翻烂了github csdn都没找到能看懂的东东。

直到遇见它.......

作为一个爬虫萌新,分享要爬的当然是——————新笔趣阁啦

需求: 输入小说的ID实现爬取整本小说就是这串数字

ps:后面我用异步整出来 再分享异步操作

项目效果:

说再多不给人看都是耍流氓 来上效果

爬取的思路:

项目要用到的模块

import requests
import requests
from lxml import etree
from tqdm import tqdm  # 进度条模块

一、明确需求

先打开网址https://www.xbiquge.la/  随便打开一本小说的链接 任意打开一章节 我们来获取它的数据

# 构造请求头处理反爬 
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'}
# 请求网页内容 赋值给response
response = requests.get('https://www.xbiquge.la/10/10489/4535761.html',headers=headers)
# 答应网页的文本内容
print(response.text)

咦,请求网页返回的数据出现了乱码,这就需要我们解码了

加一行代码自动解码

response.encoding = response.apparent_encoding

 

二、解析数据

我们需要的数据有了,接下来是不是要解析数据啦

解析数据 我这里采用的是xpath解析,当然你也可以采用re bs4 css解析

用标签选择器定位到我们需要的文章标题的内容

这里对应的便是标题的内容了

右键 copy  ----copy xpath

同理 我们再获取小说的的内容

需要注意 我们这里提取到的是小说的列表

 

# 构建解析对象
tree = etree.HTML(response.text)
# 小说标题
title = tree.xpath('//div[@class="bookname"]/h1/text()')[0]
# 小说内容 返回的是列表
content_list = tree.xpath('//*[@id="content"]//text()')
# 将小说列表转化为字符串的形式
content_str = ''.join(content_list)
print(title,content_str)

这里你打印字符串 可能会缺少东西  没错的蛤 写入文件就正常了

三 持久化存储

file_name = f"{novel_name}.txt"
# 一定要记得加后缀.txt mode 保存方式 a是追加保存 encoding是保存编码
with open(file_name,mode='a',encoding='utf-8') as f:
# 写入标题f.write(title)
# 写入换行f.write('\n')
# 写入小说内容f.write(content)

保存一章小说这样就写完了,那如何获取完整的小说呢

这里的参数此时不用注意 是函数的参数 后面看完整代码即可 讲的是思路

整本小说爬虫

既然知道怎么爬取单章节内容了,那你是不是知道所有章节的url 使用函数传参到爬取单章节内容的代码 是不是就可以爬取全部内容了

我们用xpath解析首页的html内容提取 所有小说的url和小说的名字

 

所有的单章的url地址都在 dd 标签当中,但是这个url地址是不完整的,所以爬取下来的时候,要拼接url地址。

前面的前缀名+href的内容

def get_all_url(html_url):# 调用请求网页函数 获取到的是某个小说的首页response = get_response(html_url)# 解析我们需要的小说章节标题 章节url内容# 构成解析对象tree = etree.HTML(response.text)# 首页的所有章节urlall_url = tree.xpath('//*[@id="list"]/dl/dd/a/@href')# 小说的名字novel_name = tree.xpath('//*[@id="info"]/h1/text()')for url in tqdm(all_url):novel_url = 'https://www.xbiquge.la/'+url# 给get第一页函数传入参数 小说名字和链接get_one_novel(novel_name,novel_url)

tqdm的用法小伙伴们可以自行搜索学习 是一个进度条的效果

 

爬起整本小说代码

注释写的很详细 这是我结合很多大佬/很多案例总结出的,目前我认为的最优方法。

需要有python基础噢 有不懂得可以在下面交流讨论 

咱们下期见 ~~~~~

import requestsfrom lxml import etree
from tqdm import tqdmdef get_response(html_url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'}response = requests.get(url=html_url,headers=headers)response.encoding = response.apparent_encodingreturn responsedef save(novel_name,title,content):""":param novel_name::param title::param content::return:"""file_name = f"{novel_name}.txt"# 一定要记得加后缀.txt mode 保存方式 a是追加保存 encoding是保存编码with open(file_name,mode='a',encoding='utf-8') as f:# 写入标题f.write(title)# 写入换行f.write('\n')# 写入小说内容f.write(content)def get_one_novel(name,novel_url):# 小说章节内容获取 #调用请求网页数据函数response = get_response(novel_url)# 构建解析对象tree = etree.HTML(response.text)# 小说标题title = tree.xpath('//div[@class="bookname"]/h1/text()')[0]# 小说内容 返回的是列表content_list = tree.xpath('//*[@id="content"]//text()')content_str = ''.join(content_list)save(name,title,content_str)def get_all_url(html_url):# 调用请求网页函数 获取到的是某个小说的首页response = get_response(html_url)# 解析我们需要的小说章节标题 章节url内容# 构成解析对象tree = etree.HTML(response.text)# 首页的所有章节urlall_url = tree.xpath('//*[@id="list"]/dl/dd/a/@href')# 小说的名字novel_name = tree.xpath('//*[@id="info"]/h1/text()')for url in tqdm(all_url):novel_url = 'https://www.xbiquge.la/'+url# 给get第一页函数传入参数 小说名字和链接get_one_novel(novel_name,novel_url)if __name__ == '__main__':novel_id = input('输入书名ID:格式:/15/15409/')url = f'https://www.xbiquge.la{novel_id}'get_all_url(url)

 

 

 

 

这篇关于初学——爬取新笔趣阁案例最新的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

Java 中的 equals 和 hashCode 方法关系与正确重写实践案例

《Java中的equals和hashCode方法关系与正确重写实践案例》在Java中,equals和hashCode方法是Object类的核心方法,广泛用于对象比较和哈希集合(如HashMa... 目录一、背景与需求分析1.1 equals 和 hashCode 的背景1.2 需求分析1.3 技术挑战1.4

Java中实现对象的拷贝案例讲解

《Java中实现对象的拷贝案例讲解》Java对象拷贝分为浅拷贝(复制值及引用地址)和深拷贝(递归复制所有引用对象),常用方法包括Object.clone()、序列化及JSON转换,需处理循环引用问题,... 目录对象的拷贝简介浅拷贝和深拷贝浅拷贝深拷贝深拷贝和循环引用总结对象的拷贝简介对象的拷贝,把一个

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java 正则表达式的使用实战案例

《Java正则表达式的使用实战案例》本文详细介绍了Java正则表达式的使用方法,涵盖语法细节、核心类方法、高级特性及实战案例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、正则表达式语法详解1. 基础字符匹配2. 字符类([]定义)3. 量词(控制匹配次数)4. 边

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

Spring Boot 整合 SSE(Server-Sent Events)实战案例(全网最全)

《SpringBoot整合SSE(Server-SentEvents)实战案例(全网最全)》本文通过实战案例讲解SpringBoot整合SSE技术,涵盖实现原理、代码配置、异常处理及前端交互,... 目录Spring Boot 整合 SSE(Server-Sent Events)1、简述SSE与其他技术的对

MySQL 临时表与复制表操作全流程案例

《MySQL临时表与复制表操作全流程案例》本文介绍MySQL临时表与复制表的区别与使用,涵盖生命周期、存储机制、操作限制、创建方法及常见问题,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小... 目录一、mysql 临时表(一)核心特性拓展(二)操作全流程案例1. 复杂查询中的临时表应用2. 临时