Python 爬虫抓取小说并保存为 TXT 文件教程
网络小说本地化存储常需下载为 TXT 格式。本文介绍使用 Python 爬虫抓取小说内容并保存的方法。
一、前期准备:环境与工具
1. 安装 Python 环境
确保电脑已安装 Python(推荐 3.7 及以上版本),可通过 Python 官网 下载安装,安装时记得勾选'Add Python to PATH'(自动配置环境变量)。
2. 安装必要库
本次爬虫需要用到两个核心库:
requests:用于发送 HTTP 请求,获取网页内容;
本文介绍了使用 Python 结合 requests 和 BeautifulSoup 库爬取网络小说并保存为 TXT 文件的完整流程。内容包括环境搭建、代码编写、章节解析及异常处理,强调遵守 robots.txt 协议与版权规范,并提供反爬应对策略。
网络小说本地化存储常需下载为 TXT 格式。本文介绍使用 Python 爬虫抓取小说内容并保存的方法。
确保电脑已安装 Python(推荐 3.7 及以上版本),可通过 Python 官网 下载安装,安装时记得勾选'Add Python to PATH'(自动配置环境变量)。
本次爬虫需要用到两个核心库:
requests:用于发送 HTTP 请求,获取网页内容;BeautifulSoup4:用于解析 HTML 页面,提取小说章节和内容。打开命令行(Win+R 输入 cmd,Mac 打开终端),输入以下命令安装:
pip install requests beautifulsoup4
本次以免费小说测试网站(示例:https://www.xsbiquge.com/15_15338/,仅用于教学,请勿爬取付费或有版权保护的网站)为例,爬取小说《诡秘之主》的正文内容。
注意:爬取前需遵守网站
robots.txt协议(访问网站域名 +/robots.txt可查看),且不得用于商业用途,尊重版权方权益。
新建一个 Python 文件(如 novel_crawler.py),写入以下代码:
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'获取自己的浏览器标识。在上述代码后继续添加:
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
div#list a),从而精准提取链接和标题。添加提取章节正文的函数:
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_name、article 等),需通过开发者工具确认。添加保存文件的函数,将所有章节按顺序写入:
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 的风险。最后添加主函数,调用上述功能:
if __name__ == "__main__":
# 1. 获取章节列表
chapters = get_chapter_list()
if not chapters:
print("爬取失败,退出程序")
exit()
# 2. 保存到 txt 文件
save_to_txt(chapters)
novel_crawler.py 文件;cd Desktop);python novel_crawler.py;诡秘之主.txt 文件,打开即可查看完整小说。response.encoding = response.apparent_encoding 替换为指定编码(如 response.encoding = "gbk" 或 utf-8),可通过查看网站源码的 <meta charset> 标签确认编码。find() 或 find_all() 中的参数(如标签名、id、class)。time.sleep() 的延迟时间(如 2-3 秒);proxies 参数);User-Agent,模拟不同浏览器。decompose() 方法删除广告标签,例如:# 假设广告标签是 div 的类为 ad
for ad in content_div.find_all("div", class_="ad"):
ad.decompose()
robots.txt 协议,遵守网站的爬取规则;Selenium 模拟登录、解析 JS 数据)。
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online