Python:爬虫基础《爬取红楼梦》

小说爬虫项目说明文档

用于爬取诗词名句网上小说内容的Python爬虫项目。本项目以《红楼梦》为例,演示如何爬取完整的小说内容。

项目功能

  • 爬取小说的所有章节名称
  • 获取每个章节的URL链接
  • 下载并保存每个章节的内容到独立的文本文件
  • 自动创建存储目录
  • 包含基本的错误处理和请求延迟

环境要求

  • Python 3.x
  • 依赖包:
    • requests
    • beautifulsoup4
    • logging

安装依赖

pip install requests beautifulsoup4

项目结构说明

项目主要包含以下几个核心函数:

  1. extract_chapter_names(source): 提取所有章节名称
  2. extract_list_url(source, domain): 提取所有章节的URL
  3. extract_chapter_content(url_list, chapter_names, headers, folder_name): 下载并保存章节内容

实现步骤

1. 基础设置

import os
import requests
import logging
import time
from bs4 import BeautifulSoup

# 设置请求头
headers = {
   
    "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36"
}

2. 提取章节名称

extract_chapter_names 函数实现以下功能:

  • 查找包含章节列表的div元素
  • 提取所有章节的名称
  • 返回章节名称列表

extract_chapter_names 函数详细说明

函数概述

extract_chapter_names 函数用于从网页源代码中提取所有小说章节的名称。这个函数接收一个 BeautifulSoup 对象作为参数,返回一个包含所有章节名称的列表。

函数定义

def extract_chapter_names(source):
    page_list = source.find("div", class_="ContL")
    list_chapter = page_list.find("div", "list")
    a_list = list_chapter.findAll("a")
    chapter_names = []
    for a in a_list:
        print(a.get_text())
        chapter_names.append(a.get_text())
    return chapter_names

详细实现步骤

1. 定位主要内容区域

page_list = source.find("div", class_="ContL")
  • 使用 find() 方法查找类名为 “ContL” 的 div 元素
  • 这个 div 包含了小说的所有章节列表
  • class_="ContL" 是指定要查找的 CSS 类名

2. 定位章节列表区域

list_chapter = page_list.find("div", "list")
  • 在主要内容区域中查找类名为 “list” 的 div 元素
  • 这个 div 直接包含了所有章节的链接

3. 获取所有章节链接

a_list = list_chapter.findAll("a")

4. 提取章节名称

chapter_names = []
for a in a_list:
    print(a.get_text())
    chapter_names.append(a.get_text())

5. 返回结果

return chapter_names
  • 返回包含所有章节名称的列表

示例输出

函数返回的列表格式如下:

[
    "第一回 甄士隐梦幻识通灵 贾雨村风尘怀闺秀",
    "第二回 贾夫人仙逝扬州城 冷子兴演说荣国府",
    # ... 更多章节名称
]

注意事项

  1. 函数依赖于网页的特定 HTML 结构,如果网站改版可能需要更新代码
  2. 确保传入的 source 参数是有效的 BeautifulSoup 对象
  3. 网页编码应该正确设置为 UTF-8,否则可能出现乱码
  4. 打印输出有助于监控爬取进度和调试

可能的改进

  1. 添加错误处理机制,处理元素不存在的情况
  2. 添加数据清洗功能,去除不必要的空白字符
  3. 可以添加章节编号提取功能
  4. 可以添加进度条显示替代简单的打印输出

3. 提取章节URL

extract_list_url 函数实现以下功能:

  • 查找所有章节的链接元素
  • 组合完整的URL地址
  • 返回URL列表

extract_list_url 函数详细说明

函数概述

extract_list_url 函数用于从网页源代码中提取所有章节的URL链接。这个函数接收两个参数:

  • source: BeautifulSoup 对象,包含解析后的网页内容
  • domain: 网站的域名,用于构建完整的URL

函数定义

def extract_list_url(source, domain):
    page_list = source.find("div", class_="ContL")
    list_chapter = page_list.find("div", "list")
    a_list = list_chapter.findAll("a")
    href_list = []
    for

你可能感兴趣的:(Python:爬虫基础《爬取红楼梦》)