导语
现在还在使用 rss 的人真的不多了吧…许多的高质量网站也不支持 rss 输出了.
必须订阅的网站不多,但是还是很想整合到 rss 订阅.
具体就是 feed43 解析需要的字段,输出.feedex 抓取全文.
这种方式并不完美,很多时候只能抓取到以后更新的文章,而不是抓到全部.
feed43 抓取
feed43 抓取参考 利用 Feed43,将任意网页制作成 RSS 订阅源 | 一日一技,这里仅提到关键步骤.
下文以 Thinking in Android 为例了,文章质量很高.
feed43 能够抓取的是一个网页的变换,以博客网站为例,最好找到一个有所有博文的页面,这里是 Thinking in Android 的首页了.
打开 feed43.首先同意协议…
Step 1. Specify source page address (URL)
- 输入要抓取的页面 url 这里是 https://superandroid.pro/
- 编码,不用填,直接 reload
在 Page Source 里,页面的源码就加载下来了.我们要做的是个找规律的游戏.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| <article id="articles" class="container articles"> <div class="row article-row"> <div class="article col s12 m6 l4 overflow-policy" data-aos="zoom-in"> <div class="card"> <a href="https://superandroid.pro/2021/01/01/thinking-in-android-android-xi-tong-kai-fa-bo-wen-jia-gou-mei-zhou-geng-xin/"> <div class="card-image"> <img src="https://superandroid.pro/medias/featureimages/android.gif" class="responsive-img" alt="博文架构(Android 10.0)"> <span class="card-title">博文架构(Android 10.0)</span> </div> </a> <div class="card-content article-content"> <div class="summary block-with-text"> 1、技术分类,建立索引;<br>2、渐进学习,跟踪总结;<br>3、资源拓展,每周更新! </div> <div class="publish-info"> <span class="publish-date"> <i class="fa fa-clock-o fa-fw icon-date"></i>2021-01-01 </span> <span class="publish-author"> <i class="fa fa-bookmark fa-fw icon-category"></i> ...
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| ... <div class="article col s12 m6 l4 overflow-policy" data-aos="zoom-in"> <div class="card"> <a href="https://superandroid.pro/2020/07/01/android-10-he-xin-ji-zhi-xi-lie-bi-xu-liao-jie-de-jni/"> <div class="card-image"> <img src="https://s1.ax1x.com/2020/07/16/UDE9Rs.jpg" class="responsive-img" alt="必须了解的 " jni""> <span class="card-title">必须了解的 "JNI"</span> </div> </a> <div class="card-content article-content"> <div class="summary block-with-text"> JNI 是 Android 核心机制之一,在开发过程中我们经常会遇到,了解并熟悉 JNI 是每个系统工程师必须掌握的。 </div> <div class="publish-info"> <span class="publish-date"> <i class="fa fa-clock-o fa-fw icon-date"></i>2020-07-01 </span> <span class="publish-author"> <i class="fa fa-bookmark fa-fw icon-category"></i> <a href="https://superandroid.pro/categories/%E6%A0%B8%E5%BF%83%E6%9C%BA%E5%88%B6/" class="post-category" target="_blank"> 核心机制 </a> </span> </div> </div> <div class="card-action article-tags"> <a href="https://superandroid.pro/tags/JNI/" target="_blank"> <span class="chip bg-color">JNI</span> </a> </div> </div> </div> ....
|
我们需要找的是
在源码里搜索这几篇文章的链接,例如 https://superandroid.pro/2021/01/01/thinking-in-android-android-xi-tong-kai-fa-bo-wen-jia-gou-mei-zhou-geng-xin/
( 博文架构(Android 10.0)),似乎有这样的规律.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <div class="article col s12 m6 l4 overflow-policy" data-aos="zoom-in"> <div class="card"> <a href="https://superandroid.pro/2020/07/01/android-10-he-xin-ji-zhi-xi-lie-bi-xu-liao-jie-de-jni/"> <div class="card-image"> <img src="https://s1.ax1x.com/2020/07/16/UDE9Rs.jpg" class="responsive-img" alt="必须了解的 " jni""> <span class="card-title">必须了解的 "JNI"</span> </div> </a> <div class="card-content article-content"> <div class="summary block-with-text"> JNI 是 Android 核心机制之一,在开发过程中我们经常会遇到,了解并熟悉 JNI 是每个系统工程师必须掌握的。 </div> <div class="publish-info"> <span class="publish-date"> <i class="fa fa-clock-o fa-fw icon-date"></i>2020-07-01 </span> <span class="publish-author">
|
我们需要找的是
- 文章链接 -> 在
<a href="xxx">
的字符串中 - 文章标题 -> 在
<span class="card-title"> xxx </span>
- 简介(可选) -> 围绕在
<div class="summary block-with-text">
和最接近的 </div>
之间. - 时间 ->
<i class="fa fa-clock-o fa-fw icon-date"></i>
后面一点 - 文章分类(可选) -> 不找了,在下边一点.
接下来把这些规律拼接起来
1 2 3 4
| - 最开始的字段不需要加 {*} - 变化的字段删去用 {%} 代替. - 将固定且多余的字段删去用 {*} 代替. - 有换行的地方均需要添加 {*}.
|
这样替换后
1 2 3 4 5 6 7 8 9 10 11 12 13
| <div class="article col s12 m6 l4 overflow-policy" data-aos="zoom-in">{*} <div class="card">{*} <a href="{%}">{*} <div class="card-image"> {*} <span class="card-title">{%}</span> {*} <div class="summary block-with-text">{*} {%} </div> {*} <i class="fa fa-clock-o fa-fw icon-date"></i>{%}{*} </span>
|
写入 Step 2. Define extraction rules -> Item (repeatable) Search Pattern,点击 Extract.
1
| 如果规则同上,看起来抓取到了 12 条.一条 item 如下,{%1} 到下文类似变量.
|
1 2 3 4 5
| Item 1 <Mon, 02 Aug 2021 09:09:01 GMT> {%1} = https://superandroid.pro/2021/01/01/thinking-in-android-android-xi-tong-kai-fa-bo-wen-jia-gou-mei-zhou-geng-xin/ {%2} = 博文架构(Android 10.0) {%3} = 1、技术分类,建立索引;<br>2、渐进学习,跟踪总结;<br>3、资源拓展,每周更新! {%4} = 2021-01-01
|
接下来要在 Step 3. Define output format 完善这些信息.
RSS item properties
1 2 3
| - Item Title Template -> {%2} - Item Link Template -> {%1} - Item Content Template -> {%3}
|
点击 preview 查看最终抓取的效果
在 Optional features
- Change file name,更改订阅地址更改为更有意义的字符
- 可以绑定账号等等
最终我们的 rss 订阅地址是 Feed URL: https://node2.feed43.com/thinking_in_android.xml
如果有错误修改的地址是 Edit URL: https://feed43.com/feed.html?name=thinking_in_android
注意,没有绑定账户情况下,所有人都能修改这个订阅(应该是吧)
至此 feed43 抓取,完毕,如果不奢求效果,这样就足够了.
- 每条都会带上 feed43 的标签(毕竟免费服务吗),
- 不能抓取全文,只能跳转到源站才能阅读全文.
feedex
feedex 可以将 feed43 的订阅转换成全文输出.
打开 feedex 输入 Feed URL: https://node2.feed43.com/thinking_in_android.xml 即可,需要两三分钟.
最后会返回一个全文定于的 RSS.
注意 feedex 的转换并不完美,这里 只抓到了第一篇文章(可能是最新一篇文章是汇总性质文章,url 太多导致识别错误了),因此就不贴地址了.
结语
rss 的时代,早在 GR 关闭的时候就结束了,现在还在用 rss 的大概都是不喜欢算法推送的人吧.