阅读app是一款开源的小说阅读软件,它的核心是书源系统,用户可以编写规则从网上爬取小说内容.
阅读器本身用于阅读的功能已经能满足用户需求,除此以外还有一些实用的功能,比如替换净化可以把去除多余的广告之类的.还能生成txt或者epub,直接可以当一个小说下载器使用.
编写书源规则,其实主要就是从html中获取书的各种信息,包括作者,字数,封面等,还有各种链接.
他的模式是这样的
- 从搜索页获取书籍列表
- 搜索页进入书籍的详情页
- 详情页可以进入书籍的目录页
- 目录页进入章节内容
这之中每一个节点都可以解析html爬取信息.
默认支持的解析语法是JSOUP,是一个java的爬虫库.
因为我平时并不用java,用这个要学很多东西,我平时更喜欢使用jquery和正则来爬取内容...
另外这个软件还支持xpath,和正则,但是正则还是比较麻烦的,相对来说xpath是通用更简单的一种xml解析语法,所以我主要会用xpath,搭配正则来完成解析.
另外还有就是这个软件支持JSONPath,这在能请求到json的情况下就很方便.
下面以一个网站作为例子,
quanben-xiaoshuo网
生成的书源是下面这样
{
"bookSourceUrl": "http://quanben-xiaoshuo.com/",
"bookSourceType": "0",
"bookSourceName": "全本小说网quanben-xiaoshuo",
"bookSourceGroup": "",
"bookSourceComment": "",
"loginUrl": "",
"loginUi": "",
"loginCheckJs": "",
"concurrentRate": "",
"header": "",
"bookUrlPattern": "",
"searchUrl": "http://quanben-xiaoshuo.com/?c=book&a=search&keyword={{key}}",
"exploreUrl": "",
"enabled": true,
"enabledExplore": true,
"weight": 0,
"customOrder": 0,
"lastUpdateTime": 1639806184341,
"ruleSearch": {
"checkKeyWord": "三国",
"bookList": "//div[@class='book']",
"name": "//h1/a//text()##\\s*",
"author": "//span[@itemprop='author']/text()",
"kind": "//p/a/text()",
"intro": "//div[@class='description']//text()",
"bookUrl": "//h1/a/@href"
},
"ruleExplore": {},
"ruleBookInfo": {
"name": "//h1[@itemprop='name']//text()",
"author": "//*[@itemprop='author']//text()",
"kind": "//*[@itemprop='category']//text()",
"intro": "//*[@class='articlebody']//p//text()",
"coverUrl": "//*[@itemprop='image']/href",
"tocUrl": "//a[text()='开始阅读']/@href"
},
"ruleToc": {
"chapterList": "//*[@class='content']//li",
"chapterName": "//text()",
"chapterUrl": "//a[@itemprop='url']/@href"
},
"ruleContent": {
"content": "//div[@itemprop='articleBody']//text()",
"nextContentUrl": "//a[@rel='next']/@href"
}
}
首先学一点xpath基础
xpath的使用也有几个要点
- 选取节点
- 谓语.位置或者条件判断
- 提取内容,比如文本或者属性
01.xpath 选取节点
表达式 | 描述 |
---|---|
nodename | 选取此节点的所有子节点。 |
/ | 从根节点选取。 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
. | 选取当前节点。 |
.. | 选取当前节点的父节点。 |
@ | 选取属性。 |
举个例子,选取书籍列表
//div[@class='book']
//就是从子节点选取, [@class='book'] 就是筛选class属性等于book的
也就是筛选出所有class为book的div,之后我们再以这个div为父节点,从中提取书籍的标题,作者等信息.
02.谓语判断筛选
判断属性
//*[@class='content']
判断文本
//a[text()='开始阅读']
03.提取内容
提取文本
//text() 提取所有子节点的文本,
/text() 提取子节点的文本,不包含子子节点
提取属性
/@href 提取a链接
04.正则替换净化
这个是阅读的功能不是xpath的,典型的作用就是消除换行之类的空白字符.
提取的后面
- 形式
##正则表达式##替换内容
- 只能跟在其他规则后面,独立使用相当于
all##正则表达式##替换内容
- 例子见最后的【书源一】的正文页规则
05.开始编写书源
阅读软件自带一个在线调试编写书源的后台,按照他这个列表填完就可以了.
06.上传到源仓库共享
源仓库是一个用户上传分享书源的网站,登录之后提交书源,方便别人使用
网友评论