美文网首页
使用xpath编写书源 爬取小说网站实战

使用xpath编写书源 爬取小说网站实战

作者: mudssky | 来源:发表于2021-12-18 14:01 被阅读0次

阅读app是一款开源的小说阅读软件,它的核心是书源系统,用户可以编写规则从网上爬取小说内容.

阅读器本身用于阅读的功能已经能满足用户需求,除此以外还有一些实用的功能,比如替换净化可以把去除多余的广告之类的.还能生成txt或者epub,直接可以当一个小说下载器使用.

编写书源规则,其实主要就是从html中获取书的各种信息,包括作者,字数,封面等,还有各种链接.

他的模式是这样的

  1. 搜索页获取书籍列表
  2. 搜索页进入书籍的详情页
  3. 详情页可以进入书籍的目录页
  4. 目录页进入章节内容

这之中每一个节点都可以解析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的使用也有几个要点

  1. 选取节点
  2. 谓语.位置或者条件判断
  3. 提取内容,比如文本或者属性

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.上传到源仓库共享

源仓库是一个用户上传分享书源的网站,登录之后提交书源,方便别人使用

http://yck.mumuceo.com/

相关文章

网友评论

      本文标题:使用xpath编写书源 爬取小说网站实战

      本文链接:https://www.haomeiwen.com/subject/njrgfrtx.html