# book-spider **Repository Path**: yuexiaoban/book-spider ## Basic Information - **Project Name**: book-spider - **Description**: 通用小说下载器 - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-31 - **Last Updated**: 2025-12-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 通用小说下载器 (book-spider) ## 项目简介 `book-spider` 是一个基于 Scrapy 框架开发的通用小说下载器,支持从多个网站抓取和下载小说内容。项目采用分布式架构设计,具备高效率和可扩展性,并支持断点续传功能,确保下载过程的稳定性和可靠性。 ## 功能特性 - **多网站支持** - 支持多种小说网站的爬取 - **断点续传** - 支持从中断位置继续下载,避免重复下载 - **自动重试** - 当遇到反爬机制时自动重试 - **代理支持** - 支持使用代理IP池 - **自定义配置** - 支持自定义XPath配置,适配不同网站 - **高并发** - 支持分布式爬取,提高下载效率 ## 支持的 Python 版本 - **最低版本**: Python 3.9+ - **推荐版本**: Python 3.9 - 3.12 ## 依赖库 项目使用 [uv](https://github.com/astral-sh/uv) 进行依赖管理,这是一个高性能的 Python 包管理工具。 - `cn2an >= 0.5.23` - 中文数字转阿拉伯数字 - `requests >= 2.32.5` - HTTP 请求库 - `scrapy >= 2.13.0` - 爬虫框架 - `scrapy-redis >= 0.9.1` - 分布式支持 ## 安装 ### 1. 克隆项目 ```bash git clone cd book-spider ``` ### 2. 使用 uv 安装依赖 (推荐) > **注意**: 本项目使用 [uv](https://github.com/astral-sh/uv) 进行依赖管理,uv 是一个高性能的 Python 包管理工具。 ```bash # 直接使用 pyproject.toml 安装所有依赖 uv sync ``` > **提示**: uv 会自动处理虚拟环境,无需手动创建。 ## 使用方法 ### 基本用法 ```bash # 启动爬虫 uv run scrapy crawl common_book -a start_url=<小说页面URL> ``` ### 高级用法 ```bash # 指定下载范围 (从第100章开始,到第200章结束) uv run scrapy crawl common_book -a start_url=<小说页面URL> -a start=100 -a end=200 # 从特定章节开始下载 uv run scrapy crawl common_book -a start_url=<小说页面URL> -a start=2120 ``` ### 示例 ```bash # 下载指定小说 (从第2120章开始) uv run scrapy crawl common_book -a start_url=https://www.bxwxber.cc/book/35781975/ -a start=2120 # 下载另一个网站的小说 (从第1371章到1400章) uv run scrapy crawl common_book -a start_url=http://www.99xs.info/tag/14_14202/ -a start=1371 -a end=1400 ``` ## 使用方法详解 ### 基本参数说明 - `start_url`: 小说主页URL,必需参数 - `start`: 开始章节,默认为第1章 - `end`: 结束章节,默认为第99999999章 ### 高级用法示例 ```bash # 从第100章开始下载到第200章 uv run scrapy crawl common_book -a start_url=<小说主页URL> -a start=100 -a end=200 # 只下载最新章节(从当前最新章节开始) uv run scrapy crawl common_book -a start_url=<小说主页URL> -a start=9999 # 使用代理下载(在settings.py中配置代理) uv run scrapy crawl common_book -a start_url=<小说主页URL> --settings=book_spider.settings ``` ### 项目运行原理 1. 从 `start_url` 获取小说基本信息和章节列表 2. 根据 `start` 和 `end` 参数确定下载范围 3. 逐章爬取内容并保存到本地 4. 支持断点续传,已下载的章节不会重复下载 下载的文件将保存在 [settings.py](book_spider/settings.py) 中配置的 [BOOK_DOWN_PATH](book_spider/settings.py#L136-L136) 路径下(默认为 `F:/Books/`)。 ## 支持的网站 目前支持以下网站的小说下载: - https://www.biqubao10.com/ - https://www.370che.com/ - https://www.cxtfxq.com/ - https://www.156wenxue.com/ - https://www.bxwxber.cc/ - http://www.99xs.info - http://www.biquxs.info/ > **注意**: 项目使用XPath配置来适配不同网站,如需添加新网站,可在 [books.py](book_spider/books.py) 文件中添加相应的XPath配置。 ## 配置说明 ### 主要配置项 (settings.py) - `CONCURRENT_REQUESTS`: 最大并发数,默认8 - `DOWNLOAD_DELAY`: 下载延迟,默认1秒 - `DEFAULT_REQUEST_HEADERS`: 默认请求头 - `USER_AGENTS`: 用户代理池 - `PROXIES`: 代理IP池 - `BOOK_DOWN_PATH`: 下载路径,默认为 'F:/Books/' ### 自定义XPath配置 在 [books.py](book_spider/books.py) 文件中可以为不同网站配置XPath: - `book_title_xpath`: 小说标题的XPath - `book_details_xpath`: 章节列表的XPath - `book_content_xpaths`: 小说内容的XPath列表 ## 项目结构 ``` book-spider/ ├── book_spider/ # Scrapy项目主目录 │ ├── spiders/ # 爬虫文件 │ │ ├── common_book_spider.py # 主爬虫 │ │ └── mixin.py # 爬虫混入类 │ ├── items.py # 数据项定义 │ ├── middlewares.py # 中间件 │ ├── pipelines.py # 数据管道 │ └── settings.py # 项目配置 ├── main.py # 主入口文件 ├── pyproject.toml # 项目依赖配置 ├── scrapy.cfg # Scrapy配置文件 └── README.md # 本文件 ``` ## 开发说明 ### 添加新网站支持 1. 在 [books.py](book_spider/books.py) 文件的 [XPATH_CONF](book_spider/books.py#L7-L39) 字典中添加新的网站配置 2. 为新网站配置以下XPath: - `book_title_xpath`: 小说标题的XPath - `book_details_xpath`: 章节列表的XPath - `book_content_xpaths`: 小说内容的XPath列表 ### 自定义中间件 项目包含以下自定义中间件: - `RandomUserAgentMiddleware`: 随机更换User-Agent - `RandomProxyMiddleware`: 随机更换代理 - `SetHostMiddleware`: 设置Host头 - `LogMiddleware`: 日志中间件 ## 注意事项 1. **遵守robots.txt**: 本项目设置 `ROBOTSTXT_OBEY = False`,请确保遵守目标网站的爬取规则 2. **合理设置并发**: 请根据目标网站的承载能力合理设置并发数 3. **反爬策略**: 项目包含多种反爬策略,如代理IP池、User-Agent轮换等 4. **下载路径**: 请确保下载路径存在且有写入权限 5. **网络请求**: 请合理使用网络资源,避免对目标网站造成过大压力 ## 许可证 本项目仅供学习交流使用,请遵守相关法律法规,不得用于商业用途或非法用途。 ## 贡献 欢迎提交 Issue 和 Pull Request 来改进本项目。