ParseRules - Azure99/RssToKindle GitHub Wiki
此文档将向您详细介绍RssToKindle的解析规则文件。
RssToKindle可以自动解析RSS,因为RSS的格式是统一的。
但RSS仅包含标题、简介与全文的链接,全文链接指向的页面内容是不同的。程序要爬取全文,就必须有正确的解析规则以提取页面中的文章。
所有解析规则都保存在ParseRules.json中,程序第一次运行时会写出默认的规则。支持一部分站点,未来会适配更多站点。
规则对象的定义在源代码中找到,每个规则由两个字段(Domain、XPath)构成。
- Domain,指规则适配的站点域名。
- XPath,站点对应的解析规则。有关xPath的语法,可以参考W3School
通常情况下,我们只需要class就能确定文章所在的标签。
//div[@class='show-content-free']
//代表选取时不考虑节点位置。
- div代表div标签。
- []内的是属性,只有拥有规定属性的节点才能被选取。
- @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']"
}
]