很多小伙伴在后台留言:“基础会了,能不能教我爬取网页小说?”“追更太麻烦,想把小说下载到本地慢慢看”。
安排!这一期就彻底手把手教学,从数据定位、环境准备,到代码演示、避坑指南,全程无跳过,哪怕是刚学完基础的新手,也能跟着写出属于自己的小说爬虫,实现离线追更自由~
温馨提示:本文仅用于Python爬虫学习交流,爬取的小说仅用于个人离线阅读,请勿用于商业用途,尊重原作者版权哦

① 尊重版权:爬取的小说仅用于个人离线阅读,严禁二次传播、商用(如转发、售卖、整理后发布),否则可能面临版权方追责,这是开发者的基本素养。
② 遵守网站规则:访问目标网站时,先查看网站根目录下的「robots.txt」文件(如http://www.xbiquge.la/robots.txt),该文件会明确告知“哪些内容可爬、哪些不可爬”,严格按照规则爬取,不触碰网站禁忌。
③ 规避法律风险:不爬取涉密、违规、低俗内容,不恶意攻击网站服务器,否则可能违反《网络安全法》,承担相应法律责任。
① 添加合理延迟:代码中已添加「time.sleep(1)」,新手不要删除或改得太小(建议1-3秒),模拟正常用户的访问节奏,避免短时间内大量请求给网站服务器造成压力。
② 避免高频重试:如果某一章节请求失败,不要立即反复重试,可增加延迟后再尝试,或跳过该章节(后续手动补充),频繁重试会被网站判定为恶意爬虫。
③ 慎用代理IP:如果需要爬取大量内容,可使用正规代理IP池(避免使用免费代理,多为恶意IP),分散访问压力,降低IP被封风险;新手初期可先不用代理,熟悉流程后再尝试。
① 携带User-Agent:代码中已配置固定User-Agent,新手可保留;进阶可使用「fake-useragent」库,随机生成不同浏览器的User-Agent,避免被网站识别为爬虫。
② 不伪造关键信息:不随意修改请求头中的Cookie、Referer等信息,除非明确知道其作用,伪造信息可能触发网站反爬机制,导致请求失败。
③ 避免批量请求:不要一次性爬取网站所有章节,可分批次爬取(如每天爬取50章),降低被网站监测到的概率。
① 不篡改数据:爬取的小说正文、章节名等内容,不要随意修改、篡改,尊重原作者的创作成果。
② 规范保存格式:建议保存为txt格式(代码中已默认),不随意生成大量垃圾文件,合理管理本地存储,避免占用过多内存。
③ 及时清理缓存:如果多次运行代码,可定期清理生成的txt文件和临时缓存,避免重复爬取和数据冗余。
① 定期检查解析规则:免费小说网站的HTML结构可能会更新(如修改标签、类名),如果代码突然爬取不到内容,先检查开发者工具中的数据位置,重新调整解析规则(soup.select、soup.find相关代码)。
② 关注网站状态:如果目标网站出现“无法访问”“需要登录”“验证码”等情况,不要强行爬取,可更换其他结构简单的免费小说网站,避免无效操作。
① 不泄露个人信息:爬取过程中,不要在请求头、代码中添加个人隐私信息(如手机号、身份证号),避免信息泄露。
② 测试环境优先:新手可先在本地测试代码,确认能正常爬取少量章节后,再批量爬取,避免因代码错误导致大量无效请求。
③ 尊重网站运营:如果网站明确禁止爬虫(如页面提示“禁止爬取”),立即停止爬取操作,更换其他合规的学习素材。

爬取小说的核心,第一步不是写代码,而是找到小说数据的“藏身之处”——很多新手爬不到内容,就是因为没找对真实数据位置,只拿到了网页框架。
在这,叶子先找到想要爬取的小说网页,并且关注到它的URL地址一栏。

注意到这里的小说地址是这个网站的首页加上书本id





python --version # 或者 python3 --version(Mac/Linux)| 第三方库 | 作用 | 安装命令 |
|---|---|---|
| requests | 发送网络请求,获取网页的源代码(相当于“替我们打开网页”) | pip install requests |
| beautifulsoup4(简称bs4) | 解析网页源代码,从混乱的代码中提取出章节链接、小说正文(相当于“从网页里挑出我们需要的内容”) | pip install beautifulsoup4 |
lxml:解析速度比Python自带的解析器更快,处理复杂网页更稳定,安装命令:pip install lxml(安装后,代码中可替换解析器,提升效率)。
fake-useragent:随机生成浏览器标识,避免被网站识别为爬虫而封禁IP,安装命令:pip install fake\-useragent(应对基础反爬)。
# 1. 创建虚拟环境(Windows命令)python -m venv venv# 2. 激活虚拟环境(Windows命令)venv\Scripts\activate# Mac/Linux激活命令:source venv/bin/activate


# 代码演示import requestsfrom bs4 import BeautifulSoup# 目标地址url = "https://www.shuyous.com/book/2513593.html"# 添加请求头相关信息headers = {"user-agent" :"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0"}# 获取响应response = requests.get(url, headers=headers)# 拿到对应的章节内容soup = BeautifulSoup(response.text, "html.parser")chapter_list = soup.find('div', class_='list').find_all('a')# 先暂时爬3章内容for i in range(3):# 拿到小说章节标题chapter_name = chapter_list[i].get_text(strip=True)# 重新生成一个urlchapter_url = "https://www.shuyous.com" + chapter_list[i].get("href")# 发送新的请求并拿到响应数据details_response = requests.get(chapter_url, headers=headers)details_soup = BeautifulSoup(details_response.text, "html.parser")content_div = details_soup.find("div", class_="content")if content_div:# 拿到对应文字内容标签p_list = content_div.find_all("p")# 保存到本地文本with open(chapter_name + ".txt", "w", encoding="UTF-8") as f:for p in p_list:text = p.get_text(strip=True)f.write(text + "\n")print(chapter_name + "-- 下载成功")


修改小说目录页URL:打开你想爬取的小说目录页,复制浏览器地址栏的链接,替换代码中url 的值(比如爬取其他小说,就替换成对应小说的目录页链接)。
修改小说保存文件名:将小说的值改成你想要的名字(比如“三体.txt”),后缀必须是.txt,否则无法正常保存。
代码不可能完全复用:叶子给到的代码只是简单的针对这个小说网页的代码,如果小伙伴们想要爬取其他小说网页的数据,需要看清楚具体的网页地址url以及小说目录地址url的拼接方式,另外,它们存储的元素标签也可能不同,需要按照实际情况去修改。

到这里,手把手的网页小说爬虫实操就完成啦!其实核心逻辑很简单:找到数据位置 → 发送请求获取数据 → 解析数据 → 保存数据,和上一期的基础爬虫逻辑一致,只是针对小说的结构做了针对性调整。
回顾一下本次重点:
核心是用开发者工具找到章节链接和正文的位置,这是爬取成功的关键;
代码修改要按照实际情况来,新手也能快速上手



