ParseRules - Azure99/RssToKindle GitHub Wiki

页面解析规则

此文档将向您详细介绍RssToKindle的解析规则文件。
RssToKindle可以自动解析RSS,因为RSS的格式是统一的。
但RSS仅包含标题、简介与全文的链接,全文链接指向的页面内容是不同的。程序要爬取全文,就必须有正确的解析规则以提取页面中的文章。
所有解析规则都保存在ParseRules.json中,程序第一次运行时会写出默认的规则。支持一部分站点,未来会适配更多站点。

规则对象

规则对象的定义在源代码中找到,每个规则由两个字段(Domain、XPath)构成。

  1. Domain,指规则适配的站点域名。
  2. XPath,站点对应的解析规则。有关xPath的语法,可以参考W3School

xPath简单教程

通常情况下,我们只需要class就能确定文章所在的标签。

//div[@class='show-content-free']

//代表选取时不考虑节点位置。

  1. div代表div标签。
  2. []内的是属性,只有拥有规定属性的节点才能被选取。
  3. @class='show-content-free'代表class属性为show-content-free。

整条语句选择效果为: 选择所有class属性为show-content-free的div标签节点。
注意: 如果全文在多个节点中,您可以使用 | 。
如CnBeta的规则

//div[@class='article-summary']|//div[@class='article-content']

解析过程

程序会根据待解析页面的url,在所有规则对象中尝试匹配域名。
如(https://daily.zhihu.com/story/9692681)
若有一个规则对象的Domain为daily.zhihu.com,则匹配成功。程序会根据对应的XPath来解析页面。

解析规则文件

解析规则文件为JSON格式。
是一个规则对象数组,保存了所有规则对象。
示例:

[
  {
    "Domain": "daily.zhihu.com",
    "XPath": "//div[@class='content']"
  },
  {
    "Domain": "www.jianshu.com",
    "XPath": "//div[@class='show-content-free']"
  }
]

假设我想要适配"澎湃新闻",仅需要添加一个规则对象即可。

[
  {
    "Domain": "daily.zhihu.com",
    "XPath": "//div[@class='content']"
  },
  {
    "Domain": "www.jianshu.com",
    "XPath": "//div[@class='show-content-free']"
  },
  {
    "Domain": "www.thepaper.cn",
    "XPath": "//div[@class='news_txt']"
  }
]
⚠️ **GitHub.com Fallback** ⚠️