给定一个网页,我想提取文本以供读者查看。我知道SFSafariViewController提供了阅读器模式,但是对于我的应用程序,我需要实际的文本字符串。我也知道Mercury parser,但是我更喜欢在本地运行的解决方案。

我尝试了很多选择:


DZReadability(它可以工作,但输出通常不是很好,比Safari的阅读器差很多)
Mozilla Readability(我无法使其在iOS下运行)
luin/Readability(我非常努力,但无法使其在iOS下运行)


luin/Readability看起来非常有趣。这似乎是一个非常活跃的Github项目。但是,我无法使其在iOS下运行。我尝试过/做过的事情:

我安装并使用browserify来获取独立的JavaScript文件。但是,我收到一条错误消息Error: Mismatched anonymous define() module。我读到可以使用derequire解决此问题。我尝试过,但没有成功。

有人可以通过browserify或任何其他方式给我一些有关如何使Luin / Readability在iOS上工作的建议吗?

最佳答案

我的项目中遇到类似的问题,需要将HTML的可读性呈现为TextView。我最初的方法是使用WKWebView渲染,方法是使用evaluateJavaScriptWKWebView注入经过稍微修改的Mozilla可读性。

Mozilla可读性代码存储为本地文件,并通过添加以下代码进行了修改:

// Execute Readbility on the currently loaded DOM

var uri = {
spec: location.href,
host: location.host,
prePath: location.protocol + "//" + location.host,
scheme: location.protocol.substr(0, location.protocol.indexOf(":")),
pathBase: location.protocol + "//" + location.host +  location.pathname.substr(0, location.pathname.lastIndexOf("/") + 1)
}; var documentClone = document.cloneNode(true); var article = new Readability(uri, documentClone).parse(); article;


然后使用DTCoreText呈现结果内容。 WKWebView将加载网页的所有资源,包括所有图像,广告等。这使该方法非常占用内存,我尝试通过在将图像传递给WKWebView之前解析和删除图像来避免这种情况。总的来说,这是可行的,但是取决于您的用例,它可能不是很优雅或很快。

当前,我正在使用另一种方法,该方法涉及在使用phantomJS的服务器上运行luis Readability,这在内容提取方面可以提供更好的结果,并且在客户端上的内存占用要少得多。

10-06 02:56