1.初衷
笔者发现sfgg里面有一个非常好用的工具,网址:https://segmentfault.com/news,截图如下:
当我们把它拖动到浏览器的书签栏的时候,我们就可以使用它分享自己感觉不错的文章了。
2.拿到sfgg的这段js脚本
当我们把鼠标放到“分享到SegmentFault”时,显示了一段js脚本,右键复制链接地址,得到如下内容:
javascript:(function(){var a=encodeURIComponent(window.document.title),b=encodeURIComponent(window.location.href);window.open("https://segmentfault.com/news#"+a+"/"+b)})();void 0;
3.分析js脚本的含义
看了一眼上面的js代码,笔者发现:先拿到分享页的标题和网址,再使用window.open发起一个get请求跳转到sfgg的分享页(当然如果没有登录会跳转到登录界面)
4.事情没有这么简单
我们打开一篇站内的文章:https://wenda.shukaiming.com/article/14,然后点击“分享到SegmentFault”,接着点击提交之后,查看分享内容:
嚓,竟然有一个站内阅读把文章采集了下来,我们看看:
原创内容就这么被盗了下来,而笔者发现sfgg的分享文章点击到原文阅读基本都是通过js跳转的,这就是它的高明之处,SEO的外链原则。
5.如何获取一张网页的主要内容?
这是一件比较复杂的任务,笔者先偷个懒看看PHP有没有对应的pkg帮我们解决这个问题,经过简单的Google搜索,我们找到了两个开源库:
https://github.com/scotteh/php-goose
https://github.com/andreskrey/readability.php
笔者选择了goose(鹅),这里没有过多的比较。
来吧,测试一下,笔者拿sfgg里面分享次数最多的几个网站作为测试对象跟sfgg进行对比,看看抽取主要内容的效果如何?
composer require scotteh/php-goose
结果各种慢到死,根本没法接受,第二个开源库看起来好像不错,但是稳定性好像不够。
后来笔者找到了一个使用nodejs实现的文章内容抽取开源项目,简单试用了两下,效果不错,速度也快了很多(笔者没有深究原因):
https://github.com/thomastuts/article-extractor
速度是很快,但是微信公众平台的图片却抓取不到,什么鬼?
经过一番探索,找到了个神奇项目:https://github.com/luin/readability,效果很不错。
但对于微信公众号文章,知乎专栏,GitHub等网站还需要做一些适配才行,
另外,笔者还发现一个问题:不可能匹配所有的网站,但可以添加一些通用的规则,否则得不偿失,例如网站改版之后就重新写适配规则。
6.保存各个网站的图片
我发现sfgg都是把图片保存到了自己的网站目录下,这样一来可以防止文章中的图片链接失效导致采集的文章显示出问题,另一方面保持了自己网站主动调配图片资源的灵活性。
7.适配三大平台:微信公众平台,知乎专栏,GitHub
代码稍后奉上,未完待续。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!