Python爬虫爬取网页小说

ops/2024/11/28 17:50:29/

分析

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

相关文章

使用 Tkinter 创建一个简单的 GUI 应用程序来合并视频和音频文件

使用 Tkinter 创建一个简单的 GUI 应用程序来合并视频和音频文件 Python 是一门强大的编程语言&#xff0c;它不仅可以用于数据处理、自动化脚本&#xff0c;还可以用于创建图形用户界面 (GUI) 应用程序。在本教程中&#xff0c;我们将使用 Python 的标准库模块 tkinter 创建一…

daos源码编译

1. 前言 本文详细介绍如何在almalinux8.9上编译daos.2.0.0源码。系统环境如下&#xff1a; daos: 2.0.0 linux os: almalinux 8.9 linux kernel: 4.18.0-513.5.1.el8_9.x86_64之所以选择2.0.0版本&#xff0c;是因为daos从2.0.0开始是一个全新的架构设计&a…

Rust语言俄罗斯方块(漂亮的界面案例+详细的代码解说+完美运行)

tetris-demo A Tetris example written in Rust using Piston in under 500 lines of code 项目地址: https://gitcode.com/gh_mirrors/te/tetris-demo 项目介绍 "Tetris Example in Rust, v2" 是一个用Rust语言编写的俄罗斯方块游戏示例。这个项目不仅是一个简单…

【Qt】控件7

1.QTextEdit的简单使用 使用简单的QTextEdit,获取到的内容显示到标签上 使用textChanged信号 在槽函数中需要获取QTextEdit的内容&#xff0c;对应操作是&#xff1a; QString curorui->textEdit->toPlainText();然后显示到标签上&#xff0c;对应操作是&#xff1a; …

vue3 reactive响应式实现源码

Vue 3 的 reactive 是基于 JavaScript 的 Proxy 实现的&#xff0c;因此它通过代理机制来拦截对象的操作&#xff0c;从而实现响应式数据的追踪。下面是 Vue 3 的 reactive 源码简化版。 Vue 3 reactive 源码简化版 首先&#xff0c;我们需要了解 reactive 是如何工作的&…

蓝桥杯每日真题 - 第23天

题目&#xff1a;&#xff08;直线&#xff09; 题目描述&#xff08;12届 C&C B组C题&#xff09; 解题思路&#xff1a; 题目理解: 在平面直角坐标系中&#xff0c;从给定的点集中确定唯一的直线。 两点确定一条直线&#xff0c;判断两条直线是否相同&#xff0c;可通过…

蓝牙循环搜索并连接. Android辅助功能以及锁的灵活运用

现在需要实现个工具, android设备要不断自动的去搜索附近蓝牙打印机,然后进行配对,连接打印数据. 根据测试发现有两个技术难点 第一个是一些设备链接打印机后,会弹出进行配对的对话框,有些设备还会让你输入配对密码进行配对,如果用人工去点击,就不是自动去搜索配对,并打印了…

Python爬虫:深入探索1688关键词接口获取之道

在数字化经济的浪潮中&#xff0c;数据的价值愈发凸显&#xff0c;尤其是在电商领域。对于电商平台而言&#xff0c;关键词不仅是搜索流量的入口&#xff0c;也是洞察市场趋势、优化营销策略的重要工具。1688作为中国领先的B2B电商平台&#xff0c;其关键词接口的获取对于商家来…