手把手爬取小说网站: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可查看),且不得用于商业用途,尊重版权方权益。
二、爬虫核心逻辑拆解
- 访问小说目录页,获取所有章节的标题和跳转链接;
- 逐个访问章节链接,提取章节正文内容;
- 将章节标题 + 正文按顺序写入 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_name、article等),需通过开发者工具确认。
第四步:保存内容到 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) 四、运行爬虫并查看结果
- 保存
novel_crawler.py文件; - 打开命令行,切换到文件所在目录(如
cd Desktop); - 运行命令:
python novel_crawler.py; - 等待爬取完成,当前文件夹会生成
诡秘之主.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() # 删除广告标签 六、注意事项
- 本教程仅用于学习交流,请勿爬取付费小说、有版权保护的内容,否则可能违反法律法规;
- 爬取前务必查看网站的
robots.txt协议,遵守网站的爬取规则; - 控制爬取速度,避免给目标网站服务器造成压力;
- 部分网站可能有更复杂的反爬机制(如登录验证、JS 加密),需额外处理(如使用
Selenium模拟登录、解析 JS 数据)。