Python爬虫爬取网页小说

news/2024/11/30 2:03:05/

分析

注意:不同小说url不同,不同小说需采用的正则也不同
1.安装requests包

python">pip install requests

2.导入必要的库
re模块用于进行正则表达式相关的操作,比如使用正则表达式在获取到的网页文本内容中匹配提取特定格式的信息。
resquests模块用于进行正则表达式相关的操作,比如使用正则表达式在获取到的网页文本内容中匹配提取特定格式的信息。
json模块用于处理 JSON 数据,方便将整理好的数据结构(字典)转换为 JSON 格式并保存到文件中。

小说选取

这里选取三国演义作为教学案例
在这里插入图片描述
检查页面源代码可得目录采集地址:

https://sanguo.5000yan.com/

目录采集代码实现

注意:不同小说url不同,不同小说需采用的正则也不同

python">#导入必要的库
import re
import requests
import json
url="https://sanguo.5000yan.com/"
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
#发起伪造请求
response=requests.get(url,headers=headers)
#设置响应编码
response.encoding='UTF-8'
#查看相应数据
content=response.text#正则表达式匹配
p=r'<a target="(.*?)"\s+ href="(.*?)">(第.*?)</a>'
#提取匹配到的数据到列表中
chs=re.findall(p,content,re.DOTALL)chapter=dict()
for ch in chs:chapter[ch[2]]=ch[1]
#最终的章节和链接数据
print(chapter)
#保存数据为json格式到文件
#文件可替换为自己的文件
with open('C:/Users/33692/Desktop/程序/chapter/mulu.txt',mode='wt',encoding='UTF-8') as file:json.dump(chapter,file)

部分代码解析

python">chs=re.findall(p,content,re.DOTALL)

re.findall 是 re 模块提供的用于在字符串中基于正则表达式进行全面查找匹配的函数,其基本语法格式为 re.findall(pattern, string, flags=0),各参数含义如下:

pattern:对应代码中的 p,是一个定义好的正则表达式模式,用于精确描述要查找的文本的具体样式、特征等。例如,若 p 为r"<div>.*?</div>,表示要查找所有符合以 div开头、以 /div结尾的内容(这里 .*? 是非贪婪匹配模式,用于获取中间的文本内容)。
string:就是这里的 content,代表要进行查找操作的目标文本字符串。在这段代码的上下文中,content 通常是通过向网页发送请求获取到的网页源代码等文本信息(前面通过 response.text 获取到的网页文本内容),但也可以是其他任意符合字符串格式的文本数据,具体取决于应用场景。
flags:为可选参数,用于设定正则表达式的匹配行为,这里使用的 re.DOTALL 就是其中一种常用的标志选项。

re.DOTALL:
在正则表达式里,默认情况下 .(点号)这个元字符只能匹配除换行符之外的任意单个字符。但在实际处理类似网页 HTML 代码、文档等具有多行结构的文本时,很多时候希望 . 可以匹配包括换行符在内的所有字符,这时就需要使用 re.DOTALL 标志来改变 . 的默认匹配行为。

章节采集代码实现

python">import requests,re
import time,random
import json
#加载需要采集的目录
with open('C:/Users/33692/Desktop/程序/chapter/mulu.txt',encoding='utf-8') as file:chs=json.load(file)
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
#遍历循环,发起伪造请求
for title,url in chs.items():print(f"准备采集:{title}")#发起伪造请求response=requests.get(url,headers=headers)#设置编码格式response.encoding="utf-8"html=response.text#正则匹配p=r'<div class="grap"><div>(.*?)</div></div>'content=re.findall(p,html,re.DOTALL)text=content[0]#正则去掉无关字符:\n\t等new_text = re.sub(r'[\r\n\t&lrdquoiv<>nbsp/;]', '', text)#转换为破折号clean_text = new_text.replace('&mdash;&mdash;', '——')with open('C:/Users/33692/Desktop/程序/chapter/三国演义.txt',mode="at",encoding='utf-8') as file:#保存文件file.write("\n\n"+title+"\n\n")file.write(clean_text)file.write("\n\n-------------------\n\n")#模拟用户请求,每次休眠5-10秒time.sleep(random.randint(1,5))print(f"{title}采集完成")

结果截图

在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/1551066.html

相关文章

【NLP】第三章:长短期记忆网络LSTM

三、长短期记忆网络LSTM 循环神经网络的特点就是拥有"记忆"&#xff0c;就是考虑历史信息&#xff0c;从历史信息中获取辅助当前的决策。 按记忆能力分&#xff1a;simple rnn(就是前面讲的简单rnn结构)、长短期记忆网络(LSTM)、门控循环单元(GRU)、以及双向RNN(Bi-…

JDK的版本演化,JDK要收费吗?

Java版本演化历史 Java的版本历史可以追溯到1995年&#xff0c;以下是Java语言自诞生以来的主要版本及其关键特性&#xff1a; 一、早期版本 Java 1.0&#xff08;1996年1月发布&#xff09; 引入了Java虚拟机&#xff08;JVM&#xff09;和Java应用编程接口&#xff08;API&…

【GoF23种设计模式】01_建造者模式

文章目录 前言一、基本概念二、使用步骤 前言 提示&#xff1a;设计者模式有利于提高开发者的编程效率和代码质量&#xff1a; GoF&#xff08;Gang of Four&#xff0c;四人帮&#xff09;设计模式由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位作者合著&…

《掩码语言模型(Masked Language Model, MLM)》

一、引言 在自然语言处理领域&#xff0c;掩码语言模型&#xff08;Masked Language Model, MLM&#xff09;是一种重要的预训练方法。它通过随机掩码输入文本中的一部分单词&#xff0c;然后让模型预测被掩码的单词&#xff0c;从而学习语言的语义和语法知识。MLM 已经在许多自…

vue2面试题11|[2024-11-25]

1.vue源码-模版解析 <!DOCTYPE html> <html> <head><title></title> </head> <body><div idapp><h1> {{ str }} </h1>{{ str }} </div></body><script type"text/javascript" srcvue.js…

SM3 Sm4加密算法

一、概述 1、SM3是一种分组消息摘要算法&#xff0c;用于生成数据的哈希值&#xff08;消息摘要&#xff09;&#xff0c;而非直接加密数据。 1.1、 应用场景 数据完整性校验&#xff1a;验证数据在传输或存储过程中是否被篡改。 数字签名&#xff1a;与SM2等算法结合使用&am…

02.ES6(2)

2.10、rest参数 ES6 引入 rest 参数&#xff0c;用于获取函数的实参&#xff0c;用来代替 arguments <script>// ES5 获取实参的方式/* function date(){console.log(arguments);}date(大白,二黑,三孩); */// rest 参数/* function date(...args) {console.log(args)…

数据库期末复习题库

1. Mysql日志功能有哪些? 记录日常操作和错误信息&#xff0c;以便了解Mysql数据库的运行情况&#xff0c;日常操作&#xff0c;错误信息和进行相关的优化。 2. 数据库有哪些备份方法 完全备份&#xff1a;全部都备份一遍表备份&#xff1a;只提取数据库中的数据&#xff0…