手把手爬取小说网站:Python 爬虫保存 txt 文件教程

在日常阅读中,很多人喜欢将喜欢的网络小说下载为本地 txt 文件,方便随时翻阅。今天就带大家手把手实现 Python 爬虫爬取小说网站,并将小说内容保存为 txt 文件,全程无复杂逻辑,新手也能轻松上手!

一、前期准备:环境与工具

1. 安装 Python 环境

首先确保电脑已安装 Python(推荐 3.7 及以上版本),可通过 Python 官网 下载安装,安装时记得勾选 “Add Python to PATH”(自动配置环境变量)。

2. 安装必要库

本次爬虫需要用到两个核心库:

  • requests:用于发送 HTTP 请求,获取网页内容;
  • BeautifulSoup4:用于解析 HTML 页面,提取小说章节和内容。

打开命令行(Win+R 输入 cmd,Mac 打开终端),输入以下命令安装:

bash

运行

pip install requests beautifulsoup4 

3. 选择目标小说网站

本次以免费小说测试网站(示例:https://www.xsbiquge.com/15_15338/,仅用于教学,请勿爬取付费或有版权保护的网站)为例,爬取小说《诡秘之主》的正文内容。

注意:爬取前需遵守网站 robots.txt 协议(访问网站域名 +/robots.txt 可查看),且不得用于商业用途,尊重版权方权益。

二、爬虫核心逻辑拆解

  1. 访问小说目录页,获取所有章节的标题和跳转链接;
  2. 逐个访问章节链接,提取章节正文内容;
  3. 将章节标题 + 正文按顺序写入 txt 文件,保存到本地。

三、手把手编写爬虫代码

第一步:导入库并设置基础参数

新建一个 Python 文件(如 novel_crawler.py),写入以下代码:

python

运行

import requests from bs4 import BeautifulSoup import time # 目标小说目录页 URL(可替换为自己想爬的小说目录页) catalog_url = "https://www.xsbiquge.com/15_15338/" # 请求头:模拟浏览器访问,避免被网站反爬 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" } 
  • User-Agent:伪装成浏览器访问,防止网站识别为爬虫而拒绝请求,可通过百度 “我的 User-Agent” 获取自己的浏览器标识。

第二步:爬取章节列表(标题 + 链接)

在上述代码后继续添加:

python

运行

def get_chapter_list(): """获取所有章节的标题和链接""" try: # 发送请求获取目录页内容 response = requests.get(catalog_url, headers=headers, timeout=10) response.encoding = response.apparent_encoding # 自动识别编码,避免乱码 soup = BeautifulSoup(response.text, "html.parser") # 解析 HTML # 定位章节列表(根据网站结构调整,可通过浏览器开发者工具查看) chapter_list = soup.find("div",).find_all("a") # 提取章节标题和链接,存入列表 chapters = [] for chapter in chapter_list: chapter_title = chapter.text # 章节标题 chapter_url = "https://www.xsbiquge.com" + chapter["href"] # 章节完整链接(拼接域名) chapters.append({"title": chapter_title, "url": chapter_url}) print(f"成功获取 {len(chapters)} 个章节") return chapters except Exception as e: print(f"获取章节列表失败:{e}") return None 
  • 关键步骤:通过浏览器开发者工具(F12)查看章节列表的 HTML 结构,找到对应的标签(如 div#list a),从而精准提取链接和标题。

第三步:爬取单个章节内容

添加提取章节正文的函数:

python

运行

def get_chapter_content(chapter_url): """根据章节链接,提取正文内容""" try: response = requests.get(chapter_url, headers=headers, timeout=10) response.encoding = response.apparent_encoding soup = BeautifulSoup(response.text, "html.parser") # 定位正文内容(同样根据网站结构调整,示例网站正文在 div#content 中) content_div = soup.find("div",) if not content_div: return "正文获取失败" # 提取正文文本,去除多余空格和换行 content = content_div.text.strip() # 替换网站自带的换行符(根据实际情况调整) content = content.replace("\n\n", "\n").replace(" ", " ") return content except Exception as e: print(f"获取章节内容失败:{e}") return "正文获取失败" 
  • 注意:不同网站的正文标签可能不同(如 div.class_namearticle 等),需通过开发者工具确认。

第四步:保存内容到 txt 文件

添加保存文件的函数,将所有章节按顺序写入:

python

运行

def save_to_txt(chapters, novel_name="诡秘之主"): """将所有章节内容保存为 txt 文件""" # 拼接保存路径(默认保存在当前文件夹,文件名为小说名) file_path = f"{novel_name}.txt" with open(file_path, "w", encoding="utf-8") as f: for i, chapter in enumerate(chapters, 1): title = chapter["title"] url = chapter["url"] print(f"正在爬取第 {i}/{len(chapters)} 章:{title}") # 获取正文 content = get_chapter_content(url) # 写入文件(标题+正文,换行分隔) f.write(f"【{title}】\n\n{content}\n\n") # 延迟 1-2 秒,避免请求过快被反爬 time.sleep(1.5) print(f"\n小说已成功保存到:{file_path}") 
  • encoding="utf-8":确保中文内容正常显示,避免乱码;
  • time.sleep(1.5):控制爬取速度,模拟人类浏览行为,降低被封 IP 的风险。

第五步:主函数整合所有逻辑

最后添加主函数,调用上述功能:

python

运行

if __name__ == "__main__": # 1. 获取章节列表 chapters = get_chapter_list() if not chapters: print("爬取失败,退出程序") exit() # 2. 保存到 txt 文件 save_to_txt(chapters) 

四、运行爬虫并查看结果

  1. 保存 novel_crawler.py 文件;
  2. 打开命令行,切换到文件所在目录(如 cd Desktop);
  3. 运行命令:python novel_crawler.py
  4. 等待爬取完成,当前文件夹会生成 诡秘之主.txt 文件,打开即可查看完整小说。

五、常见问题与解决方案

1. 乱码问题

  • 原因:编码识别错误;
  • 解决:将 response.encoding = response.apparent_encoding 替换为指定编码(如 response.encoding = "gbk" 或 utf-8),可通过查看网站源码的 <meta charset> 标签确认编码。

2. 无法获取章节或正文

  • 原因:网站结构变更,标签选择器失效;
  • 解决:重新通过浏览器开发者工具(F12)查看最新的 HTML 结构,调整 find() 或 find_all() 中的参数(如标签名、id、class)。

3. 被网站封禁 IP

  • 原因:请求速度过快,被反爬机制识别;
  • 解决:
    • 增加 time.sleep() 的延迟时间(如 2-3 秒);
    • 使用代理 IP(需额外配置 proxies 参数);
    • 更换 User-Agent,模拟不同浏览器。

4. 爬取到的内容有广告

  • 原因:正文区域包含广告标签;

解决:使用 decompose() 方法删除广告标签,例如:python运行

# 假设广告标签是 的 div for ad in content_div.find_all("div", class_="ad"): ad.decompose() # 删除广告标签 

六、注意事项

  1. 本教程仅用于学习交流,请勿爬取付费小说、有版权保护的内容,否则可能违反法律法规;
  2. 爬取前务必查看网站的 robots.txt 协议,遵守网站的爬取规则;
  3. 控制爬取速度,避免给目标网站服务器造成压力;
  4. 部分网站可能有更复杂的反爬机制(如登录验证、JS 加密),需额外处理(如使用 Selenium 模拟登录、解析 JS 数据)。

Read more

【C++】如何快速实现一棵支持key或key-value的二叉搜索树?关键技巧一文掌握!

【C++】如何快速实现一棵支持key或key-value的二叉搜索树?关键技巧一文掌握!

🎬 个人主页:MSTcheng · ZEEKLOG 🌱 代码仓库 :MSTcheng · Gitee 🔥 精选专栏: 《C语言》 《数据结构》 《C++由浅入深》 💬座右铭:路虽远行则将至,事虽难做则必成! 前言:在前面的文章中我们向大家介绍了一些序列式容器,比如:basic_string、vector、deque、list等。而本篇文章我们将要进入树形容器——二叉搜索树的学习。 文章目录 * 一、二叉搜索树的认识 * 1.1二叉搜索树的概念 * 1.2二叉搜索树的性能分析 * 二、二叉搜索树的实现 * 2.1二叉搜索树的整体框架 * 2.2二叉搜索树的插入 * 2.3二叉搜索树的查找 * 2.4二叉树的删除 * 三、二叉搜索树key和value的使用场景 * 四、总结 一、二叉搜索树的认识 1.1二叉搜索树的概念 二叉搜索树(

By Ne0inhk
C++ 继承入门(上):从基础概念定义到默认成员函数,吃透类复用的核心逻辑

C++ 继承入门(上):从基础概念定义到默认成员函数,吃透类复用的核心逻辑

🔥小叶-duck:个人主页 ❄️个人专栏:《Data-Structure-Learning》 《C++入门到进阶&自我学习过程记录》《算法题讲解指南》--从优选到贪心 ✨未择之路,不须回头 已择之路,纵是荆棘遍野,亦作花海遨游 目录 前言 一. 继承的概念与定义   1、继承的核心概念   2、继承的定义格式   3、继承方式与成员访问权限 二. 基类与派生类的转换:子类对象能当父类用吗? 三. 继承中的作用域:同名成员会冲突吗?   1、变量隐藏   2、函数隐藏 四、派生类的默认成员函数:构造、拷贝、析构怎么写?   1、构造函数:先调用父类构造,再初始化子类成员   2、拷贝构造:先拷贝父类,再拷贝子类   3、 赋值重载:

By Ne0inhk
RPC魔法揭秘:从原理到BRPC实战,用C++玩转分布式通信

RPC魔法揭秘:从原理到BRPC实战,用C++玩转分布式通信

文章目录 * 本篇摘要 * 一.什么是rpc * 简单理解 * 核心特点 * RPC 工作原理 * 常见 RPC 框架 * 典型使用场景 * 二.BRPC介绍 * 是什么? * 比gRPC强在哪? * 三.基于brpc实现简单的服务调用 * brpc安装教程 * 简单实现客户端向brpc服务端口请求服务完成应答过程(以echo回显为例) * 测试效果 * 代码汇总 * 四.封装每个服务的channels及所有服务管理者 * 五.基于etcd实现服务上下线监控来完成brpc服务调用 * 测试效果 * 代码汇总 * 六.本篇小结 本篇摘要 本文从RPC核心概念出发,阐释其“透明远程调用”的本质与工作原理,对比主流框架后聚焦百度开源的C++高性能RPC框架BRPC,详解其安装、Echo服务示例代码(含客户端/服务端实现),并延伸介绍基于ETCD的服务注册发现与信道管理封装,完整呈现分布式通信方案落地过程。 一.什么是rpc 简单理解 RPC(远程过程调用)就是让程序调用

By Ne0inhk

Visual C++运行库一键修复终极指南:告别DLL缺失烦恼

Visual C++运行库一键修复终极指南:告别DLL缺失烦恼 【免费下载链接】vcredistAIO Repack for latest Microsoft Visual C++ Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况?✅ 刚下载的游戏无法启动,提示"VCRUNTIME140.dll缺失";⚠️ 专业软件突然崩溃,显示错误代码0xc000007b;🚀 重装系统后原本正常的程序无法运行。这些问题往往都源于Visual C++运行库组件的问题。 Visual C++运行库是Windows系统中至关重要的组件,它为使用Visual Studio开发的应用程序提供运行时支持。当这些运行库缺失、损坏或版本不匹配时,各种软件就会出现运行异常。今天,我将为你介绍一款强大的修复工具——VisualCppRedist AIO,让你轻松解决这些烦人的系统依赖问题。 常见问题场景:你中招了吗?

By Ne0inhk