如何制作JSON书源:从零开始的详细指南
什么是JSON书源?
JSON书源是电子书阅读软件(如微信读书、静读天下、掌阅等)中用于解析书籍来源的配置文件,它以JSON格式存储书籍的搜索接口、详情页接口、章节内容接口等信息,通过定义规则从目标网站(如小说网站、博客平台)提取数据,实现自动加载书名、作者、章节列表及正文内容,JSON书源是“连接阅读软件与目标网站的桥梁”。
制作JSON书源前的准备工作
在动手制作前,你需要明确以下信息,这是书源的核心“原材料”:
确定目标网站
选择一个你想要解析的书籍网站(某小说网站、某博客专栏),确保该网站无反爬或反爬较弱(否则需要额外处理 headers、cookie 等认证信息)。
分析网站结构
使用浏览器开发者工具(F12)分析目标网站的接口和数据格式:
- 搜索接口:在网站搜索框输入关键词,观察网络请求(Network 选项卡),找到返回搜索结果的接口(通常是
GET或POST请求),记录请求URL、请求参数(如keyword、page)、请求头(如User-Agent、Referer)。 - 详情页接口:点击某一本书进入详情页,找到包含书名、作者、简介等信息的接口(通常是书籍详情页的HTML或API接口)。
- 章节列表接口:在详情页找到“章节列表”或“目录”对应的接口,记录返回章节标题和链接的数据格式。 内容接口**:点击某一章节,找到包含章节正文内容的接口,记录正文数据的存储位置(可能是HTML片段、纯文本或JSON字段)。
准备工具
- 浏览器:Chrome 或 Firefox(自带开发者工具)。
- JSON格式化工具:如 JSONLint(在线工具)或 VS Code(插件),用于校验JSON格式。
- 文本编辑器:VS Code、Sublime Text 等(支持JSON语法高亮)。
JSON书源的核心字段解析
JSON书源的核心是定义“如何从目标网站提取数据”,以下是关键字段及说明(以常见书源格式为例,不同阅读软件可能略有差异):
{
"bookSourceComment": "示例小说书源", // 书源描述(可选)
"bookSourceGroup": "小说", // 书源分组(可选,用于分类管理)
"bookSourceType": 0, // 书源类型(0: 网页解析,1: API接口,根据软件要求填写)
"bookSourceUrl": "https://example.com", // 目标网站域名(用于匹配URL,确保书源只作用于该网站)
"customOrder": 0, // 自定义排序(可选,数字越小越靠前)
"enabled": true, // 是否启用(true: 启用,false: 禁用)
"enabledExplore": true, // 是否启用发现(可选,用于推荐功能)
"exploreUrl": "https://example.com/category", // 发现页URL(可选,推荐书籍列表接口)
"lastUpdateTime": "2023-01-01", // 最后更新时间(可选,自动生成)
"respondTime": 100, // 响应时间(毫秒,可选,用于性能评估)
"ruleBookInfo": { // 书籍详情页规则
"author": { // 作者字段
"method": "GET", // 请求方法(GET/POST)
"name": "author", // 字段名(自定义)
"regex": "<div class=\"author\">(.*?)</div>", // 正则表达式(提取HTML中的作者)
"replace": "", // 替换规则(可选,如去除空格:regex: "\\s+", replace: "")
"selector": "div.author", // CSS选择器(优先于正则,推荐使用)
"type": "text" // 数据类型(text: 文本,html: HTML片段,json: JSON字段)
},
"coverUrl": { // 封面图片字段
"selector": "img.cover",
"sourceType": "img", // 图片源类型(img: 直接链接,style: 背景图)
"attribute": "src" // 属性名(src: 图片链接,style: 背景图样式)
},
"intro": { // 简介/简介字段
"selector": "div.intro",
"type": "html" // 保留HTML格式(如换行、图片)
},
"kind": { // 分类/类型字段
"selector": "span.kind",
"type": "text"
},
"lastChapter": { // 最后更新章节字段
"selector": "div.last-chapter a",
"attribute": "text", // 提取文本内容
"regex": "最新章节:(.*?)" // 可选:用正则进一步提取
},
"name": { // 书名字段
"selector": "h1.title",
"type": "text"
}
},
"ruleContent": { // 章节内容规则
"content": { // 正文内容字段
"isWebJs": false, // 是否启用JavaScript渲染(false: 直接解析HTML,true: 需要软件执行JS,复杂网站可尝试)
"selector": "div.read-content", // 正文CSS选择器
"style": { // 样式调整(可选,去除广告、调整字体等)
"": "line-height:1.6;font-size:16px" // 空key作用于整个正文,可设置CSS样式
},
"replace": [ // 替换规则(可选,去除广告、无关元素)
{
"regex": "<div class=\"ad\">.*?</div>", // 匹配广告HTML
"value": "" // 替换为空
}
]
},
"nextContentUrl": { // 下一章链接字段(用于自动加载下一章)
"selector": "div.next-chapter a",
"attribute": "href" // 提取href属性
}
},
"ruleExplore": { // 发现页规则(可选,用于推荐书籍列表)
"author": { // 推荐书籍作者字段
"selector": "div.book-item .author",
"type": "text"
},
"bookList": { // 书籍列表字段
"selector": "div.book-list" // 包含所有推荐书籍的容器CSS选择器
},
"bookUrl": { // 书籍详情页链接字段
"selector": "div.book-item a",
"attribute": "href" // 提取href属性(需拼接域名:bookSourceUrl + bookUrl)
},
"coverUrl": { // 推荐书籍封面字段
"selector": "div.book-item img",
"attribute": "src"
},
"intro": { // 推荐书籍简介字段
"selector": "div.book-item .intro",
"type": "text"
},
"name": { // 推荐书籍名字段
"selector": "div.book-item .title",
"type": "text"
}
},
"ruleSearch": { // 搜索规则(核心字段,用于匹配用户输入的关键词)
"author": { // 搜索结果中的作者字段
"selector": "div.search-item .author",
"type": "text"
},
"bookList": { // 搜索结果列表字段
"selector": "div.search-result", // 包含所有搜索结果的容器CSS选择器
"isVip": false // 是否需要VIP权限(false: 免费,true: 付费,根据软件要求填写)
},
"bookUrl": { // 搜索结果对应的书籍详情页链接
"selector": "div.search-item a",
"attribute": "href" // 提取href属性(需拼接域名)
},
"coverUrl": { // 搜索结果封面字段
"selector": "div.search-item img",
"attribute": "src"
},
"intro": { // 搜索结果简介字段
"selector": "div.search-item .intro",
"type": "text"
},
"name": { // 搜索结果书名字段
"selector": "div.search-item .title",
"type": "text"
}
},
"searchUrl": "https://example.com/search?keyword={{key}}", // 搜索接口URL
"weight": 100 // 权重(可选,数字越大优先级越高)
}
分步制作JSON书源
定义基础信息
填写书



还没有评论,来说两句吧...