跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

使用 Python 爬虫下载网络小说去除广告干扰

综述由AI生成针对网络小说阅读中频繁出现的广告干扰问题,介绍如何利用 Python 编写简单的爬虫程序,通过 requests 和 lxml 库抓取指定小说网站的章节内容并保存为本地文件。流程涵盖环境配置、XPath 定位、请求发送及文件写入,帮助读者实现无广告离线阅读体验。代码包含异常处理与反爬策略,并提供了法律合规提示及后续优化方向。

清酒独酌发布于 2025/2/6更新于 2026/6/219 浏览
使用 Python 爬虫下载网络小说去除广告干扰

使用 Python 爬虫下载网络小说去除广告干扰

前言

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

Python 爬虫运行效果

一、环境配置

在开始编写代码之前,需要确保开发环境满足以下要求:

  1. Python 版本:推荐使用 Python 3.7 及以上版本(本文基于 3.7.3 编写)。
  2. 集成开发环境 (IDE):建议使用 PyCharm 或 VS Code,便于代码调试与管理。
  3. 依赖库安装:
    • requests:用于发送 HTTP 请求。
    • lxml:用于解析 HTML 文档,支持 XPath 查询。
    • time:内置模块,用于控制请求频率,防止触发反爬机制。

安装命令如下:

pip install requests lxml

二、准备工作

  1. 创建项目目录:在电脑指定位置创建一个文件夹,用于存放爬取的小说文件和脚本代码。
  2. 确定目标网站:选择一个允许爬取的小说网站,获取其书籍详情页和章节页的 URL 结构。
  3. 分析页面结构:使用浏览器开发者工具(F12)查看 HTML 源码,定位小说名称、目录列表及正文内容的 DOM 节点路径(XPath)。无需额外安装插件,现代浏览器已内置强大的元素检查功能。

三、核心代码实现

以下是完整的爬虫脚本示例,包含异常处理与基础的反爬策略:

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()

四、代码逻辑详解

  1. 请求头设置:User-Agent 字段至关重要,它告诉服务器我们使用的是浏览器而非脚本,降低被拦截风险。
  2. 编码处理:response.encoding = response.apparent_encoding 自动识别网页编码,避免中文乱码。
  3. XPath 解析:使用 lxml.etree 快速定位 HTML 中的特定节点,例如通过 //*[@id="txt"] 定位正文容器。
  4. 反爬策略:在循环中插入 time.sleep(2),模拟人类阅读速度,避免短时间内大量请求触发服务器防火墙。
  5. 异常捕获:使用 try-except 包裹网络请求和文件操作,确保单个章节失败不会导致整个程序崩溃。

五、结果展示

运行脚本后,会在当前目录下生成以小说名命名的文件夹,内部包含所有章节的 TXT 文件。打开任意文件即可在无广告环境下阅读。

本地小说文件结构

六、注意事项与优化建议

1. 法律与道德规范

在使用爬虫技术时,请务必遵守目标网站的 robots.txt 协议,尊重版权,仅用于个人学习研究,严禁用于商业盈利或大规模分发盗版内容。

2. 通用性扩展

上述代码针对特定网站结构编写。若要适配其他小说网站,需重新分析其 HTML 结构,修改 XPath 表达式即可复用框架。

3. 进阶优化方向

  • 多线程下载:使用 concurrent.futures 加速章节下载过程。
  • 数据库存储:将章节内容存入 SQLite 或 MySQL,便于检索和管理。
  • 图形界面:结合 tkinter 开发 GUI 工具,方便非技术人员使用。

4. 学习资源推荐

若希望深入学习 Python 编程与爬虫技术,建议参考官方文档、开源社区教程及经典技术书籍。保持对新技术的好奇心,持续实践是提升技能的关键。

结语

通过简单的 Python 脚本,我们成功实现了小说内容的本地化存储,彻底解决了网页广告干扰的问题。这不仅提升了阅读体验,也让我们掌握了网络数据采集的基本方法。希望本文能为你开启自动化办公或数据分析的大门。

目录

  1. 使用 Python 爬虫下载网络小说去除广告干扰
  2. 前言
  3. 一、环境配置
  4. 二、准备工作
  5. 三、核心代码实现
  6. 设置目标书籍的详情页 URL
  7. 设置请求头,模拟浏览器访问
  8. 四、代码逻辑详解
  9. 五、结果展示
  10. 六、注意事项与优化建议
  11. 1. 法律与道德规范
  12. 2. 通用性扩展
  13. 3. 进阶优化方向
  14. 4. 学习资源推荐
  15. 结语
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • OpenClaw 接入飞书机器人与 Ollama 本地大模型部署指南
  • Java String 核心方法与使用技巧
  • OpenClaw:从认知到执行的行动型 AI 框架解析
  • AI 时代产品经理成长路径与核心能力模型解析
  • 单 Agent 与多 Agent 架构对比及 Python 实战
  • OpenHarmony 平台 Flutter 跨域解决方案:flutter_cors 库实战
  • 动态规划:子数组与子串问题
  • DeepSeek 中冷启动数据与多阶段训练的作用
  • AI 程序员上岗,垂类大模型应用迎来井喷期
  • Java 事务处理基础总结
  • Spring Cloud Nacos 微服务注册发现与配置中心实战
  • Linux 基础命令与 Java 项目部署实战
  • 双指针算法核心概念与 C++ 经典例题解析
  • OpenClaw 安全 AI 助理搭建指南:部署方案与 API 接入实战
  • 数据结构:常见排序算法详解与代码实现
  • C++ 继承进阶:友元、静态成员与菱形继承底层逻辑
  • Linux 进程间通信进阶:管道与共享内存实战
  • 栈的压入弹出序列验证算法详解
  • FPGA 入门:Vivado 与 Vitis 2023.1 安装指南
  • 1Panel 部署 Node+MongoDB+Nginx 项目实操及避坑指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online