当前位置: 首页 > news >正文

Python实例题:Python自动获取小说工具

目录

Python实例题

题目

题目分析

需求理解

关键知识点

实现思路分析

代码实现

代码解释

get_chapter_list 函数:

get_chapter_content 函数:

save_novel 函数:

主程序:

运行思路

注意事项

Python实例题

题目

Python自动获取小说工具

题目分析

需求理解

要实现一个 Python 工具,能够自动从小说网站获取小说的章节列表和每个章节的具体内容,并将其保存到本地。

关键知识点

  • 网络请求:使用 requests 库向小说网站发送请求,获取网页内容。
  • HTML 解析:使用 BeautifulSoup 库解析 HTML 页面,提取小说的章节列表和章节内容。
  • 数据存储:将提取的小说内容保存到本地文件。

实现思路分析

  • 获取小说目录页:发送请求获取小说的目录页 HTML 内容。
  • 解析章节列表:使用 BeautifulSoup 解析目录页,提取每个章节的链接和标题。
  • 获取章节内容:遍历章节列表,发送请求获取每个章节的 HTML 内容,并解析出章节的具体文本。
  • 保存小说内容:将每个章节的标题和内容保存到本地文件。

代码实现

import requests
from bs4 import BeautifulSoup
import os

# 小说目录页 URL
novel_url = 'https://www.biquge.cm/1_1094/'

# 请求头,模拟浏览器访问
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}


def get_chapter_list(url):
    """
    获取小说的章节列表
    :param url: 小说目录页 URL
    :return: 章节列表,每个元素为 (章节标题, 章节链接)
    """
    response = requests.get(url, headers=headers)
    response.encoding = response.apparent_encoding
    soup = BeautifulSoup(response.text, 'html.parser')
    chapter_list = []
    for a in soup.find_all('a'):
        if 'href' in a.attrs and a['href'].startswith('/1_1094/'):
            chapter_title = a.text
            chapter_url = 'https://www.biquge.cm' + a['href']
            chapter_list.append((chapter_title, chapter_url))
    return chapter_list


def get_chapter_content(url):
    """
    获取章节的具体内容
    :param url: 章节页面 URL
    :return: 章节内容文本
    """
    response = requests.get(url, headers=headers)
    response.encoding = response.apparent_encoding
    soup = BeautifulSoup(response.text, 'html.parser')
    content_div = soup.find('div', id='content')
    if content_div:
        content = content_div.text
        return content
    return ''


def save_novel(chapter_list):
    """
    保存小说内容到本地文件
    :param chapter_list: 章节列表
    """
    if not os.path.exists('novel'):
        os.makedirs('novel')
    for title, url in chapter_list:
        content = get_chapter_content(url)
        file_name = os.path.join('novel', f'{title}.txt')
        with open(file_name, 'w', encoding='utf-8') as f:
            f.write(title + '\n')
            f.write(content)
        print(f'Saved: {title}')


if __name__ == "__main__":
    chapter_list = get_chapter_list(novel_url)
    save_novel(chapter_list)
    print('小说获取完成!')
    

代码解释

  • get_chapter_list 函数

    • 发送请求获取小说目录页的 HTML 内容。
    • 使用 BeautifulSoup 解析 HTML,找到所有章节链接,并提取章节标题和链接。
    • 返回章节列表,每个元素为 (章节标题,章节链接)。
  • get_chapter_content 函数

    • 发送请求获取章节页面的 HTML 内容。
    • 使用 BeautifulSoup 解析 HTML,找到章节内容所在的 <div> 标签,并提取文本内容。
    • 返回章节内容文本。
  • save_novel 函数

    • 创建一个名为 novel 的文件夹,用于保存小说章节。
    • 遍历章节列表,获取每个章节的内容,并保存到以章节标题命名的文本文件中。
    • 打印保存信息。
  • 主程序

    • 调用 get_chapter_list 函数获取章节列表。
    • 调用 save_novel 函数保存小说内容。
    • 打印完成信息。

运行思路

  • 安装依赖库:确保已经安装了 requests 和 beautifulsoup4 库,可以使用 pip install requests beautifulsoup4 进行安装。
  • 修改小说目录页 URL:将 novel_url 替换为你要获取的小说的目录页 URL。
  • 运行脚本:在终端中运行 python novel_fetching_tool.py,脚本将自动获取小说的章节内容并保存到本地。

注意事项

  • 网站反爬机制:不同的小说网站可能有不同的反爬机制,如 IP 封禁、验证码等。如果遇到反爬问题,可以尝试使用代理 IP、设置请求头、控制请求频率等方法解决。
  • 版权问题:在抓取小说内容时,要确保遵守相关法律法规和网站的使用条款,避免侵犯版权。

相关文章:

  • 如何将一个8s的接口优化到500ms以下
  • 【Pandas】pandas DataFrame keys
  • 【Python浅拷贝与深拷贝详解】
  • 【QT】 常用控件【输入类】
  • 【Java学习笔记】注释
  • 第一章 计算机网络和因特网
  • 在 JMeter 中,Active Threads Over Time 是一个非常有用的监听器(Listener)
  • 虾分发平台平台优势
  • 【Linux】深入理解线程控制
  • 【智驾中的大模型 -2】VLM 在自动驾驶中的应用
  • 【MySQL 数据库】增删查改操作CRUD(下)
  • 凡泰极客亮相QCon2025鸿蒙专场,解析FinClip“技术+生态”双引擎
  • 【ubuntu】linux开机自启动
  • [250414] ArcoLinux 项目宣布逐步结束
  • 探索机器人创新技术基座,傅利叶开源人形机器人 Fourier N1
  • VS 中Git 中本地提交完成,没有推送,修改的内容如何还原
  • 【Python爬虫】详细工作流程以及组成部分
  • 数据结构---跳表
  • 每日一道leetcode(回来了!!!)
  • 信息系统项目管理师-工具名词解释(上)
  • 大学男生被捉奸后将女生推下高楼?桂林理工大学辟谣
  • 上海数学教育及数学科普专家陈永明去世,享年85岁
  • 央行副行长:我们在研究丰富政策工具箱,将适时推出增量政策
  • 国家发改委回应美加征关税:典型的单边主义霸凌做法
  • “中国游”带火“中国购”,“即买即退”让外国游客购物更丝滑
  • 公交公司须关注新出行需求:“单车巴士”能否常态化