Python爬虫爬取网页小说

server/2024/11/29 7:58:43/

分析

注意:不同小说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/server/145846.html

相关文章

Python学习35天

# 定义父类 class Computer: CPUNone MemoryNone diskNone def __init__(self,CPU,Memory,disk): self.disk disk self.Memory Memory self.CPU CPU def get_details(self): return f"CPU:{self.CPU}\tdisk:{self.disk}\t…

C语言蓝桥杯组题目

系列文章目录 文章目录 系列文章目录前言题目第一题.1, 2, 3, 4 能组成多少个互不相同且无重复数字的三位数&#xff1f;都是多少&#xff1f;第二题: 一个整数&#xff0c;它加上100后是一个完全平方数&#xff0c;再加上168又是一个完全平方数&#xff0c;请问该数是多少&…

css3弹性布局

CSS3的弹性布局&#xff08;Flexbox&#xff09;是一种强大的布局模式&#xff0c;用于创建灵活且响应式的布局结构。它使得容器内的项目能够更智能地分配空间&#xff0c;并且可以轻松调整它们的对齐方式。下面是一些关键概念和示例代码来帮助你更好地理解和使用Flexbox。 基…

【Linux网络编程】第二弹---Socket编程入门指南:从IP、端口号到传输层协议及编程接口全解析

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、Socket 编程预备 1.1、理解源 IP 和目的 IP 1.2、认识端口号 1.2.1、端口号范围划分 1.2.2、理解 &q…

React Native 性能调试指南

写在前面 在开发 React Native 应用时&#xff0c;性能优化是一个至关重要的环节。良好的性能不仅可以提升用户体验&#xff0c;还能减少应用的资源消耗&#xff0c;提高应用的稳定性。本文将详细介绍如何对 React Native 应用进行性能调试和优化&#xff0c;包括性能综述、编…

作业3-基于pytorch的非线性模型设计

一、任务描述 使用BP神经网络和CNN实现对MNITS数据集的识别&#xff0c;并通过修改相关参数&#xff0c;比较各模型的识别准确率。 二、相关配置 pytorch&#xff1a;2.5.1 python&#xff1a;3.12 pycharm&#xff1a;2024.1.2&#xff08;这个影响不大&#xff0c;版本不要太…

C语言解决空瓶换水问题:高效算法与实现

标题&#xff1a;C语言解决空瓶换水问题&#xff1a;高效算法与实现 一、问题描述 在一个饮料促销活动中&#xff0c;你可以通过空瓶换水的方式免费获得更多的水&#xff1a;3个空瓶可以换1瓶水。喝完这瓶水后&#xff0c;空瓶会再次变为空瓶。假设你最初拥有一定数量的空瓶&a…

泷羽sec-云技术

基础之云技术 声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec…