EasyBook
Introduction: Java/Android 多站点小说爬虫,制作成工具类,并发搜索下载,支持追更
Tags:
Java/Android 小说爬虫工具
使用简单的几行代码,打造你自己的小说开源软件,自定义书源,多站点解析,并发搜索下载。
QQ 交流群:29527219
Android 平台
Step 1. Add the JitPack repository to your build file
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Step 2. Add the dependency
dependencies {
implementation 'com.github.Zzzia:EasyBook:2.58'
implementation 'com.squareup.okhttp3:okhttp:4.2.2'
implementation 'com.google.code.gson:gson:2.8.5'
}
混淆(默认自动加入)
-keep class com.zia.bookdownloader.bean.** { *; }
使用说明:(具体可参照项目内简单示例或我写的小说神器)
搜索:(Android 会自动切换到主线程)
EasyBook.search("天行")
.subscribe(new StepSubscriber<List<Book>>() {
@Override
public void onFinish(@NonNull List<Book> books) {
//所有站点小说爬取完后调用这个方法,传入所有站点解析的有序结果
}
@Override
public void onError(@NonNull Exception e) {
e.printStackTrace();
}
@Override
public void onMessage(@NonNull String message) {
//一些搜索中的进度消息,错误原因等,可以用 toast 弹出
}
@Override
public void onProgress(int progress) {
//搜索进度
}
@Override
public void onPart(@NonNull List<Book> books) {
//某一个站点的小说搜索结果
}
});
加载目录:
EasyBook.getCatalog(book)
.subscribe(new Subscriber<List<Catalog>>() {
@Override
public void onFinish(List<Catalog> catalogs) {
//加载结果,返回该书籍所有目录
}
//...
});
加载某一章节内容:
EasyBook.getContent(book,catalog)
.subscribe(new Subscriber<List<String>>() {
@Override
public void onFinish(List<String> strings) {
//返回该章节所有内容,按行保存在集合内,需要自行调整格式
}
//...
});
下载书籍:
EasyBook.download(book)
.setSavePath("/sdcard/book")//设置保存的路径
.setThreadCount(150)//设置下载的线程数
.setType(Type.EPUB)//设置下载格式,如 epub 或 txt
.subscribe(new Subscriber<File>() {
@Override
public void onFinish(File file) {
//下载完成后的文件
}
//...
});
分段下载:
EasyBook.downloadPart(book, 0, 100)
.setThreadCount(50)
.subscribe(new Subscriber<ArrayList<Chapter>>() {
@Override
public void onFinish(@NonNull ArrayList<Chapter> chapters) {
//返回一个 Chapter 集合,保证不为空且都有 contents
}
//...
});
当然也支持同步调用,但不建议使用:
List<Catalog> list = EasyBook.getCatalog(book).getSync();
销毁线程(解决内存泄漏):
Disposable disposable;
void onCreate(){
disposable = EasyBook.search("天行").subscribe(...);
}
void onDestroy(){
disposable.dispose();
}
添加自己的站点解析:
//添加一个自己解析的站点类,叫 Zhuishushenqi,需要继承 Site
SiteCollection.getInstance().addSite(Zhuishushenqi());
解析起点排行榜:
EasyBook.getHottestRank().subscribe();
解析起点分类排行榜:
EasyBook.getRank(rankInfo);
添加 json 站点解析 json 格式如zzzia 源 详细说明如XpathSiteRule
val json = getJson()
val rules = Gson().fromJson<List<XpathSiteRule>>(
json, TypeToken.getParameterized(List::class.java, XpathSiteRule::class.java).type
)
val sites = ArrayList<Site>()
rules.forEach {
sites.add(CustomXpathSite(it))
}
SiteCollection.getInstance().addSites(sites)
v2.59
将生成的 epub 指定为 utf-8 格式
v2.58
修复 url merge 规则 bug
提高自定义书源目录解析速度
v2.57
修复了书源并部分转移至在线书源
修复了一些在线书源的小问题
添加了在线书源制作教程
v2.55
删除/增加了几个书源
修复在线解析规则不能去广告 bug
暴露网络接口供自定义实现
v2.50
修复自定义书源问题
删除了 dom4j 依赖
v2.49
增加了自定义 json 站点规则,基于 xpath
v2.48
增加了更多解析内容,能够解析小说简介了,同时保证了图片等内容的完整性
在调用目录解析后会自动把内容更新在 book 里
v2.47
完善 demo 的分段搜索,升级至 Androidx
提高了爬虫稳定性
v2.46
支持了分段搜索,以站点为单位陆续返回结果
为所有解析添加了同步方法,但不建议在含有并发的操作中使用
提高了爬虫稳定性
v2.45
更新了分段下载,将并发下载逻辑单独封装,便于使用
v2.44
添加对起点中文网的排行解析,用于书城功能
v2.42
尝试添加热修复版本控制
v2.40
添加 EPUB 封面,更换为 xhtml 格式,支持更多阅读软件
Thanks
- okHttp
- epublib
- jsoup