anisearch 是一个功能齐全的 Python 库,用于搜索动画磁力链接。它还提供了一个灵活的插件系统,允许用户从不同的来源搜索动画信息
- 支持多个搜索源
- 强大的可扩展性
- CSV 导出功能
- 代理支持
你可以直接使用 pip 安装 anisearch:
pip install Anisearch-lib
以下是使用 anisearch 的基本示例:
from anisearch import AniSearch
# 创建 AniSearch 实例
searcher = AniSearch()
# __init__()方法可选的参数:
# plugin_name: 搜索源名称,默认为 'dmhy'
# parser: beautifulsoup 解析器,在'dmhy'中默认为'lxml'
# verify: 是否验证 SSL 证书,在'dmhy'中默认为False
# time_fmt: 时间格式,默认为'%Y-%m-%d %H:%M:%S'
# 以上参数的默认值在选择不同的插件的时候可能会有所不同
# 搜索动画
searcher.search('我推的孩子')
# search()方法可选的参数:
# collected: 是否只搜索季度合集,默认为True
# proxies: 代理url
#
# 使用代理
# proxies = {
# 'http': 'http://10.10.1.10:3128',
# 'https': 'http://10.10.1.10:1080',
# } # 别当真,就是示例而已
# searcher.search("我推的孩子", proxies=proxies)
# system_proxy: 是否使用系统代理(好像总是不能工作)
# 搜索成功的话会出现如下字样:
# This search is complete: 我推的孩子
# 输出搜索结果列表
print(searcher.animes)
# 展示部分输出(在2024年八月的结果)
# [Anime('2024/03/21 13:25', '【动漫国字幕组】[【我推的孩子】][01-11][BDRip][AVC_AAC][1080P][简体][MP4]', '7.3GB', 'magnet:?xt=urn:btih:P76PROAB5JRUAPHIST63HGRUOMW7SEWU&dn=&tr=...
# 如果一切正常,选择第一个搜索结果(当然也可以选择其他的)
searcher.select(0)
# 选择后anime属性可用
print(searcher.anime.title)
print(searcher.anime.size)
# 输出:
# '【动漫国字幕组】[【我推的孩子】][01-11][BDRip][AVC_AAC][1080P][简体][MP4]'
# '7.3GB'
AniSearch
是主要的搜索类,提供以下方法:
search(keyword, collected=None, proxies=None, system_proxy=None, **extra_options)
: 搜索动画select(index)
: 从搜索结果中选择一个动画size_format(unit='MB')
: 转换选定动画的文件大小save_csv(filename)
: 将搜索结果保存到 CSV 文件(所有结果)
** extra_options 参数会被并入爬取时的查询字符串中,可以用于指定额外的分类或选项,具体的查询字符串请自行查看搜索源搜索时的 url
Anime
类代表一个动画条目,包含以下属性:
time
: 发布时间title
: 动画标题size
: 文件大小magnet
: 磁力链接
其__eq__方法被实现为比较两个 Anime 实例磁力链接的哈希值。
AniSearch 使用基于元类的插件系统来支持不同的搜索源
非常悲哀的是,以下搜索源都需要代理
dmhy
: 动漫花园搜索源(速度较快)comicat
: [存档] 漫猫搜索源(实现非常慢,慎用,建议只搜索季度合集)kisssub
: [存档] 爱恋搜索源(同上)miobt
:[存档] MioBT 搜索源(同上)nyaa
: nyaa.si 搜索源(速度超群,不能使用季度合集搜索)acgrip
: acg.rip 搜索源(速度适中,不能使用季度合集搜索,由于站点的自身原因,获取的magnet是种子的下载链接)tokyotosho
: 东京图书馆搜索源(速度适中,不能使用季度合集搜索,绝大部分资源都需要英/日文才能搜到)
要创建自定义插件,您需要继承 BasePlugin 类并实现 search 方法,anisearch 提供了一个实用的http请求函数 anisearch.plugins._webget.get_html()
,可以直接使用。以下是一个简单的示例:
# 运行此代码,没有异常说明自定义插件创建成功,已经注册在插件系统中
from anisearch.plugins import BasePlugin
from anisearch.Anime import Anime
from anisearch.plugins._webget import get_html
class Custom(BasePlugin):
abstract = False
def __init__(self, parser, verify, timefmt) -> None:
super().__init__(parser, verify, timefmt)
def search(self, keyword, collected=True, proxies=None, system_proxy=False, **extra_options):
html = get_html("<url>", proxies=proxies, system_proxy=system_proxy, verify=self._verify)
# 这里实现您的搜索逻辑
# 返回一个 Anime 对象的列表
return [Anime("2023/06/01 12:00", "Custom Anime", "1.5GB", "magnet:?xt=urn:btih:..."), ...]
searcher_custom = AniSearch(plugin_name='custom')
# 如果文件没有放在项目plugins目录下,需要手动将其引入命名空间
# 请务必将类名(遵守pep8命名规范)、插件名、文件名保持一致,大小写会自动处理
searcher_custom.search("我推的孩子")
anisearch 附赠了一个命令行界面,可以直接在终端中使用。
anisearch -s <关键词> [选项]
-s
,--search
: (必需) 搜索关键词-p
,--plugin
: (可选) 搜索插件,默认为dmhy
-c
,--collected
: (可选) 是否只搜索季度合集
- 基本搜索:
anisearch -s "我推的孩子"
- 使用特定搜索插件搜索:
anisearch -s "我推的孩子" -p nyaa
- 运行搜索命令后,程序会显示搜索结果列表,包括序号、标题和文件大小
- 用户可以输入想要选择的项目的序号
- 如果选择了有效的序号,程序会显示所选项目的标题和磁力链接
- 输入 0 可以退出选择过程
欢迎贡献!请随时提交 pull requests 或开启 issues 来改进这个项目
AGPLv3