diff --git a/README.md b/README.md index a604230..77989c4 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Crawl light novel from some websites and convert it to epub. | 指标分类 | 指标集 | |------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Software Version | [![Python Version](https://img.shields.io/badge/python>=3.10-blue)]() [![Hatch project](https://img.shields.io/badge/%F0%9F%A5%9A-Hatch-4051b5.svg?style=flat)](https://github.com/pypa/hatch) | +| Software Version | [![Python Version](https://img.shields.io/badge/python>=3.10-blue)]()[![Hatch project](https://img.shields.io/badge/%F0%9F%A5%9A-Hatch-4051b5.svg?style=flat)](https://github.com/pypa/hatch) | | Code Style | [![flake8](https://img.shields.io/badge/linter-flake8-brightgreen)](https://github.com/PyCQA/flake8) | | Code Statistics | ![Lines of code](https://www.aschey.tech/tokei/github/lightnovel-center/linovelib2epub) ![PyPI - Downloads](https://img.shields.io/pypi/dm/linovelib2epub?color=blue&label=PyPI%20Download) | | Code Activity | [![Hits-of-Code](https://hitsofcode.com/github/lightnovel-center/linovelib2epub?branch=main)](https://hitsofcode.com/github/lightnovel-center/linovelib2epub/view?branch=main) ![GitHub commit activity](https://img.shields.io/github/commit-activity/y/lightnovel-center/linovelib2epub) | @@ -38,8 +38,10 @@ Crawl light novel from some websites and convert it to epub. ## 使用注意事项 在愉快的自动化爬虫之前,有必要进行声明。 -网页Web端总会存在请求错误,请求延迟,还需要不断手动来点击【下一页】按钮来浏览阅读,这无疑打断了正常的阅读[心流](https://zh.wikipedia.org/wiki/心流理論)。 -此项目的初衷正是为了**构造良好流畅、不间断的轻小说本地阅读体验**。 +网页 Web +端总会存在请求错误,请求延迟,还需要不断手动来点击【下一页】按钮来浏览阅读,这无疑打断了正常的阅读 [心流](https://zh.wikipedia.org/wiki/ +心流理論)。 +此项目的初衷正是为了 ** 构造良好流畅、不间断的轻小说本地阅读体验 **。 但是,这不应该成为加重目标网站运行负载的理由。请正常使用本项目,请勿用于线性探测下载,或无限遍历下载。 @@ -47,20 +49,20 @@ Crawl light novel from some websites and convert it to epub. ## Supported Websites (plan) -| 序号 | 网站名称 | 语言 | 爬虫难度 | 支持进度 | 备注 | 技术难点 | -|-----|----------------------------------------------|-------|------|----------------------------------------------|------------------------------|--------------------------------------------------------| -| 1 | [哔哩轻小说(Mobile)](https://w.linovelib.com/) | 简 / 繁 | 中😰 | | ` 不用登录 ` ` 一章多页 ` | `JS 文本混淆 ` `JS 文件随机 ` ` 章节链接破损 ` `Cloudflare 保护 ` `限流` | -| 2 | ~~[哔哩轻小说(Web)](https://www.linovelib.com/)~~ | 简 / 繁 | 中😰 | | 资源同 Mobile,没必要。 | N/A | -| 3 | ~~[轻之国度](https://www.lightnovel.us/)~~ | 简 / 繁 | 高🤣 | | ` 需要登录 ` | ` 轻币门槛 ` ` 导航混乱 ` | -| 4 | ~~[无限轻小说](https://www.8novel.com/)~~ | 繁 | 中😰 | | ` 不用登录 ` ` 一章多页 ` | N/A | -| 5 | [轻小说文库](https://www.wenku8.net/) | 简 / 繁 | 低😆 | | ` 不用登录 ` ` 一章一页 ` | 无 | -| 6 | ~~[轻小说百科](https://lnovel.org/)~~ | 简 / 繁 | 低😆 | | ` 不用登录 ` ` 一章一页 ` ` 插图清晰度低 ` | N/A | -| 7 | [真白萌](https://masiro.me/admin/novels) | 简 / 繁 | 中😰 | | ` 一章一页 ` | ` 需要登录 ` ` 积分购买 ` ` 等级限制 ` `CF turnstile` `限流` | -| 8 | [百合会新站](https://www.yamibo.com/site/novel) | 简 / 繁 | 中😰 | 搁置 | `可选[登录]` ` 一章一页 ` | ` 付费章节需要登录 ` ` coin 购买 ` | +| 序号 | 网站名称 | 语言 | 爬虫难度 | 支持进度 | 备注 | 技术难点 | +|----|----------------------------------------------|-------|------|----------------------------------------------|------------------------------|----------------------------------------------------------| +| 1 | [哔哩轻小说(Mobile)](https://w.linovelib.com/) | 简 / 繁 | 中😰 | | ` 不用登录 ` ` 一章多页 ` | `JS 文本混淆 ` `JS 文件随机 ` ` 章节链接破损 ` `Cloudflare 保护 ` ` 限流 ` | +| 2 | ~~[哔哩轻小说(Web)](https://www.linovelib.com/)~~ | 简 / 繁 | 中😰 | | 资源同 Mobile,没必要。 | N/A | +| 3 | ~~[轻之国度](https://www.lightnovel.us/)~~ | 简 / 繁 | 高🤣 | | ` 需要登录 ` | ` 轻币门槛 ` ` 导航混乱 ` | +| 4 | ~~[无限轻小说](https://www.8novel.com/)~~ | 繁 | 中😰 | | ` 不用登录 ` ` 一章多页 ` | N/A | +| 5 | [轻小说文库](https://www.wenku8.net/) | 简 / 繁 | 低😆 | | ` 不用登录 ` ` 一章一页 ` | 无 | +| 6 | ~~[轻小说百科](https://lnovel.org/)~~ | 简 / 繁 | 低😆 | | ` 不用登录 ` ` 一章一页 ` ` 插图清晰度低 ` | N/A | +| 7 | [真白萌](https://masiro.me/admin/novels) | 简 / 繁 | 中😰 | | ` 一章一页 ` | ` 需要登录 ` ` 积分购买 ` ` 等级限制 ` `CF turnstile` ` 限流 ` | +| 8 | [百合会新站](https://www.yamibo.com/site/novel) | 简 / 繁 | 中😰 | 搁置 | ` 可选 [登录]` ` 一章一页 ` | ` 付费章节需要登录 ` ` coin 购买 ` | 爬虫友好度有两个重要指标: -1. 访问门槛。是否需要登陆、积分/代币购买,等级限制。 +1. 访问门槛。是否需要登陆、积分 / 代币购买,等级限制。 2. 页面结构。一章多页,或者一章一页。 优质的轻小说目标源标准:资源丰富,更新迅速,插图清晰,爬虫门槛合理。可以在 issue 发起补充。 @@ -103,17 +105,21 @@ python -m pip install -e . > Microsoft Visual C++ 14.0 or greater is required -See this link: [Which Microsoft Visual C++ compiler to use with a specific Python version ?](https://wiki.python.org/moin/WindowsCompilers#Which_Microsoft_Visual_C.2B-.2B-_compiler_to_use_with_a_specific_Python_version_.3F) +See this +link: [Which Microsoft Visual C++ compiler to use with a specific Python version ?](https://wiki.python.org/moin/WindowsCompilers#Which_Microsoft_Visual_C.2B-.2B-_compiler_to_use_with_a_specific_Python_version_.3F) | **Visual C++** | **CPython** | -| -------------- | -------------------- | +|----------------|----------------------| | 14.x | 3.5 - 3.12+ | | 10.0 | 3.3 - 3.4 | | 9.0 | 2.6 - 2.7, 3.0 - 3.2 | The key point is: -- Install [Microsoft Build Tools for Visual Studio 2019](https://visualstudio.microsoft.com/vs/older-downloads/). The version greater than 2019 may also can work. -- In Build tools, install `C++ build tools` and ensure the latest versions of `MSVCv142 - VS 2019 C++ x64/x86 build tools` and `Windows 10 SDK` are checked. + +- Install [Microsoft Build Tools for Visual Studio 2019](https://visualstudio.microsoft.com/vs/older-downloads/). The + version greater than 2019 may also can work. +- In Build tools, install `C++ build tools` and ensure the latest versions of + `MSVCv142 - VS 2019 C++ x64/x86 build tools` and `Windows 10 SDK` are checked. - The `setuptools` Python package version must be at least 34.4.0. --- @@ -132,25 +138,27 @@ Rollback python version to 3.10.X can work. The exact root cause is unknown now. > In order to decrease the probability of being banned by Linovelib, it is highly recommended to set the delay > parameters as follows. > You can tune the delay parameters to fit your actual network environment. -> -> The Linovelib target requires OCR technique to recognize some paragraphs in html. You need -> to install [tesseract](https://github.com/UB-Mannheim/tesseract) on your local pc. Make sure the `tesseract` command works +> +> The Linovelib target requires OCR technique to recognize some paragraphs in html. You need +> to install [tesseract](https://github.com/UB-Mannheim/tesseract) on your local pc. Make sure the `tesseract` command +> works > in your pc by appending its location to system/user variables. LinovelibMobile has two language versions(`zh/zh-CN` or `zh-TW/zh-HK`) and two UI version(PC or mobile). So the target website has 2 x 2 = 4 choices. -| website version | visit method | support status | target_site | -|-------------------------------------|-------------------------------------------------------------------|----------------|-------------------------------------------| -| [PC](www.linovelib.com) 简体 | browser set `zh/zh-CN` lang + click [简体化] | ✅(recommend) | `TargetSite.LINOVELIB_PC` | -| [PC](www.linovelib.com) 繁体 | browser set `zh/zh-CN` lang + click [繁體化] | ✅ | `TargetSite.LINOVELIB_PC_TRADITIONAL` | -| ~~[Mobile](www.bilinovel.com) 简体~~ | ~~browser set `zh/zh-CN` lang~~ | ❌ | `TargetSite.LINOVELIB_MOBILE` | -| [Mobile](www.bilinovel.com) 繁体 | browser set `zh-TW/zh-HK` lang or not in Chinese Mainland network | ✅*(recommend) | `TargetSite.LINOVELIB_MOBILE_TRADITIONAL` | +| website version | visit method | support status | target_site | +|--------------------------------------|-------------------------------------------------------------------|----------------|-------------------------------------------| +| [PC](www.linovelib.com) 简体 | browser set `zh/zh-CN` lang + click [简体化] | ✅(recommend) | `TargetSite.LINOVELIB_PC` | +| [PC](www.linovelib.com) 繁体 | browser set `zh/zh-CN` lang + click [繁體化] | ✅ | `TargetSite.LINOVELIB_PC_TRADITIONAL` | +| ~~[Mobile](www.bilinovel.com) 简体 ~~ | ~~browser set `zh/zh-CN` lang~~ | ❌ | `TargetSite.LINOVELIB_MOBILE` | +| [Mobile](www.bilinovel.com) 繁体 | browser set `zh-TW/zh-HK` lang or not in Chinese Mainland network | ✅*(recommend) | `TargetSite.LINOVELIB_MOBILE_TRADITIONAL` | > 1.❌*: [2024-10-29]Now drission page library can only visit [mobile traditional version](www.bilinovel.com). -> -> 2.The Button "简体化" in mobile traditional version does not work. So `TargetSite.LINOVELIB_MOBILE` target doesn't work. No workaround now. +> +> 2.The Button "简体化" in mobile traditional version does not work. So `TargetSite.LINOVELIB_MOBILE` target doesn't +> work. No workaround now. Create a python file(e.g. `usage_demo.py`) and edit the content as follows: @@ -338,36 +346,35 @@ Don't need login, no threshold. ## Options -| Parameters | type | required | default | description | -|-------------------------|---------|----------|-------------------------------|---------------------------------------------------------------------| -| book_id | number | YES | None | 书籍 ID。 | -| target_site | Enum | NO | `TargetSite.LINOVELIB_MOBILE` | 其他可用值参阅 TargetSite python 枚举类以及使用文档 | -| divide_volume | boolean | NO | False | 是否分卷 | -| select_volume_mode | boolean | NO | False | 选择卷模式,它为 True 时 divide_volume 强制为 True。 | -| has_illustration | boolean | NO | True | 是否下载插图 | -| image_download_folder | string | NO | "novel_images" | 图片下载临时文件夹. 不允许以相对路径../ 开头。 | -| pickle_temp_folder | string | NO | "pickle" | pickle 临时数据保存的文件夹。 | -| clean_artifacts | boolean | NO | True | 是否删除临时数据 / 工件,指的是 pickle 和下载的图片文件。 | -| crawling_contentid | string | NO | None | 用户自定义的正文内容的id,用于快速响应网页结构变化,[如何获取?](docs/inspect-linovelib-contentid-as-a-regular-user.md)。目前仅适用于linovelib。 | -| chapter_crawl_delay | number | NO | 3 | 爬取每个章的延迟秒数(s)。合理设置此参数可以降低被限流系统限制的频率。目前仅linovelib支持。 | -| page_crawl_delay | number | NO | 2 | 对于特定章,爬取每个页面的延迟秒数(s)。合理设置此参数可以降低被限流系统限制的频率。目前仅linovelib支持。 | -| custom_style_cover | string | NO | '' | 自定义 cover.xhtml 的样式 | -| custom_style_nav | string | NO | '' | 自定义 nav.xhtml 的样式 | -| custom_style_chapter | string | NO | '' | 自定义每章 (?.xhtml) 的样式 | -| disable_proxy | boolean | NO | True | 是否禁用所在的代理环境,默认禁用。如果你在本地使用网络代理,请务必留意是否应该设置该参数。 | -| image_download_strategy | string | NO | 'ASYNCIO' | 枚举值:"ASYNCIO"、"MULTIPROCESSING"、"MULTITHREADING"(未实现) | -| image_download_max_epochs | number | NO | 10 | 图片下载的最大尝试轮数。超过这个值则认为是网络中断或者源图片缺失,自动放弃。 | -| browser_path | string | NO | None | 浏览器的本地绝对路径。 | -| headless | boolean | NO | False | 是否显示浏览器窗口,默认为 False,即默认显示。目前仅哔哩轻小说支持该参数。 | -| http_timeout | number | NO | 10 | 一个 HTTP 请求的超时等待时间 (秒)。代表 connect 和 read timeout。目前仅应用于linovelib 页面。 | -| http_retries | number | NO | 10 | 当一个 HTTP 请求失败后,重试的最大次数。 目前仅应用于linovelib 页面。 | - - +| Parameters | type | required | default | description | +|---------------------------|---------|----------|----------------|--------------------------------------------------------------------------------------------------------------| +| book_id | number | YES | None | 书籍 ID。 | +| chapter_crawl_delay | number | YES | None | 爬取每个章的延迟秒数 (s)。合理设置此参数可以降低被限流系统限制的频率。目标是 linovelib 时必须设置此参数。 | +| page_crawl_delay | number | YES | None | 对于特定章,爬取每个页面的延迟秒数 (s)。合理设置此参数可以降低被限流系统限制的频率。目标是 linovelib 时必须设置此参数 。 | +| target_site | Enum | YES | None | 参阅 TargetSite python 枚举类以及使用文档。 | +| divide_volume | boolean | NO | False | 是否分卷 | +| select_volume_mode | boolean | NO | False | 选择卷模式,它为 True 时 divide_volume 强制为 True。 | +| has_illustration | boolean | NO | True | 是否下载插图 | +| image_download_folder | string | NO | "novel_images" | 图片下载临时文件夹. 不允许以相对路径../ 开头。 | +| pickle_temp_folder | string | NO | "pickle" | pickle 临时数据保存的文件夹。 | +| clean_artifacts | boolean | NO | True | 是否删除临时数据 / 工件,指的是 pickle 和下载的图片文件。 | +| crawling_contentid | string | NO | None | 用户自定义的正文内容的 id,用于快速响应网页结构变化,[如何获取?](docs/inspect-linovelib-contentid-as-a-regular-user.md)。目前仅适用于 linovelib。 | +| custom_style_cover | string | NO | '' | 自定义 cover.xhtml 的样式 | +| custom_style_nav | string | NO | '' | 自定义 nav.xhtml 的样式 | +| custom_style_chapter | string | NO | '' | 自定义每章 (?.xhtml) 的样式 | +| disable_proxy | boolean | NO | True | 是否禁用所在的代理环境,默认禁用。如果你在本地使用网络代理,请务必留意是否应该设置该参数。 | +| image_download_strategy | string | NO | 'ASYNCIO' | 枚举值:"ASYNCIO"、"MULTIPROCESSING"、"MULTITHREADING"(未实现) | +| image_download_max_epochs | number | NO | 10 | 图片下载的最大尝试轮数。超过这个值则认为是网络中断或者源图片缺失,自动放弃。 | +| browser_path | string | NO | None | 浏览器的本地绝对路径。 | +| headless | boolean | NO | False | 是否显示浏览器窗口,默认为 False,即默认显示。目前仅哔哩轻小说支持该参数。 | +| http_timeout | number | NO | 10 | 一个 HTTP 请求的超时等待时间 (秒)。代表 connect 和 read timeout。目前仅应用于 linovelib 页面。 | +| http_retries | number | NO | 10 | 当一个 HTTP 请求失败后,重试的最大次数。 目前仅应用于 linovelib 页面。 | ## Todo -- [ ] feat: add GOT-OCR2.0 engine alternative for linovelib site, support disable ocr(keep encrypted text.) -- [ ] feat: [option]add epubcheck for output files. see https://epubcheck.readthedocs.io/en/latest/readme.html#using-epubcheck-as-a-python-library +- [] feat: add GOT-OCR2.0 engine alternative for linovelib site, support disable ocr(keep encrypted text.) +- [] feat: [option]add epubcheck for output files. + see https://epubcheck.readthedocs.io/en/latest/readme.html#using-epubcheck-as-a-python-library - [ ] quality: setup pytest and codecov - [ ] quality: setup more formatter and linter for maintainability - [ ] masiro 繁体 <=> 简体