使用 Python 爬虫下载网络小说去除广告干扰
前言
在闲暇时间阅读网络小说是一种常见的消遣方式,但在浏览网页版小说时,经常会被弹窗广告、侧边栏广告以及误触跳转等干扰体验。尤其是想要点击下一章时,不小心点击到广告链接会严重影响阅读流畅度。为了解决这一问题,我们可以利用 Python 编写一个简单的网络爬虫程序,将目标小说的章节内容抓取并保存为本地文本文件,从而实现无广告的离线阅读。
针对网络小说阅读中频繁出现的广告干扰问题,本文介绍如何利用 Python 编写简单的爬虫程序,通过 requests 和 lxml 库抓取指定小说网站的章节内容并保存为本地文件。流程涵盖环境配置、XPath 定位、请求发送及文件写入,帮助读者实现无广告离线阅读体验。代码包含异常处理与反爬策略,并提供了法律合规提示及后续优化方向。

在闲暇时间阅读网络小说是一种常见的消遣方式,但在浏览网页版小说时,经常会被弹窗广告、侧边栏广告以及误触跳转等干扰体验。尤其是想要点击下一章时,不小心点击到广告链接会严重影响阅读流畅度。为了解决这一问题,我们可以利用 Python 编写一个简单的网络爬虫程序,将目标小说的章节内容抓取并保存为本地文本文件,从而实现无广告的离线阅读。

在开始编写代码之前,需要确保开发环境满足以下要求:
requests:用于发送 HTTP 请求。lxml:用于解析 HTML 文档,支持 XPath 查询。time:内置模块,用于控制请求频率,防止触发反爬机制。安装命令如下:
pip install requests lxml
以下是完整的爬虫脚本示例,包含异常处理与基础的反爬策略:
import requests
from lxml import etree
import time
import os
# 设置目标书籍的详情页 URL
target_url = 'https://www.biquge365.net/newbook/33411/'
# 设置请求头,模拟浏览器访问
headers = {
'Referer': 'https://www.biquge365.net/book/33411/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.39'
}
def fetch_novel_info(url):
"""获取小说基本信息和目录"""
try:
response = requests.get(url, headers=headers, verify=False)
response.encoding = response.apparent_encoding
html = etree.HTML(response.text)
# 提取小说名称
novel_name_list = html.xpath('/html/body/div[1]/div[3]/div[1]/h1/text()')
if not novel_name_list:
print("未找到小说名称")
return None, []
novel_name = novel_name_list[0].strip()
# 提取章节目录链接
chapter_links = html.xpath('/html/body/div[1]/div[4]/ul/li[*]/a/@href')
return novel_name, chapter_links
except Exception as e:
print(f"获取信息失败:{e}")
return None, []
def download_chapter(chapter_url, headers):
"""下载单个章节内容"""
try:
response = requests.get(chapter_url, headers=headers)
response.encoding = response.apparent_encoding
html = etree.HTML(response.text)
# 提取章节标题
title_list = html.xpath('//*[@id="neirong"]/h1/text()')
if not title_list:
return None, None
chapter_title = title_list[0]
# 提取正文内容
content_list = html.xpath('//*[@id="txt"]/text()')
content = '\n'.join(content_list)
return chapter_title, content
except Exception as e:
print(f"下载章节失败 {chapter_url}: {e}")
return None, None
def main():
# 获取小说信息
novel_name, chapters = fetch_novel_info(target_url)
if not novel_name or not chapters:
print("无法获取小说信息,请检查 URL 是否正确")
return
# 创建保存目录
save_dir = f"./novel_{novel_name}"
if not os.path.exists(save_dir):
os.makedirs(save_dir)
print(f"开始下载小说:{novel_name}")
for link in chapters:
# 拼接完整 URL
full_url = 'https://www.biquge365.net' + link
# 获取章节内容
title, content = download_chapter(full_url, headers)
if title and content:
file_path = os.path.join(save_dir, f"{title}.txt")
with open(file_path, 'w', encoding='utf-8') as f:
f.write(title + '\n\n' + content)
print(f"成功保存:{title}")
# 延时防止被封 IP
time.sleep(2)
if __name__ == '__main__':
main()
User-Agent 字段至关重要,它告诉服务器我们使用的是浏览器而非脚本,降低被拦截风险。response.encoding = response.apparent_encoding 自动识别网页编码,避免中文乱码。lxml.etree 快速定位 HTML 中的特定节点,例如通过 //*[@id="txt"] 定位正文容器。time.sleep(2),模拟人类阅读速度,避免短时间内大量请求触发服务器防火墙。try-except 包裹网络请求和文件操作,确保单个章节失败不会导致整个程序崩溃。运行脚本后,会在当前目录下生成以小说名命名的文件夹,内部包含所有章节的 TXT 文件。打开任意文件即可在无广告环境下阅读。

在使用爬虫技术时,请务必遵守目标网站的 robots.txt 协议,尊重版权,仅用于个人学习研究,严禁用于商业盈利或大规模分发盗版内容。
上述代码针对特定网站结构编写。若要适配其他小说网站,需重新分析其 HTML 结构,修改 XPath 表达式即可复用框架。
concurrent.futures 加速章节下载过程。tkinter 开发 GUI 工具,方便非技术人员使用。若希望深入学习 Python 编程与爬虫技术,建议参考官方文档、开源社区教程及经典技术书籍。保持对新技术的好奇心,持续实践是提升技能的关键。
通过简单的 Python 脚本,我们成功实现了小说内容的本地化存储,彻底解决了网页广告干扰的问题。这不仅提升了阅读体验,也让我们掌握了网络数据采集的基本方法。希望本文能为你开启自动化办公或数据分析的大门。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 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