使用 Cordova 从网站中提取文本

Posted

技术标签:

【中文标题】使用 Cordova 从网站中提取文本【英文标题】:Extract text from Website with Cordova 【发布时间】:2017-05-15 19:32:27 【问题描述】:

我正在开发一个移动应用程序,我想使用 Cordova 从一个不是我的网站中提取文本值,我用谷歌搜索但找不到有效的示例。有没有插件可以做到这一点?

由于访问源策略,我无法使用 Ajax 执行此操作。

谢谢

【问题讨论】:

【参考方案1】:

可能的方法:

使用 inAppbrowser 加载页面并在该页面中运行脚本以提取使用跨浏览器通信所需的元素。阅读此article,其中说明了如何操作。 在 ajax 调用中加载页面并使用正则表达式基于标记解析响应,或使用此 API 将响应转换为 html 标记并通过 JS API 查询 DOM。阅读这个有趣的article 混合应用程序中的网络抓取,由Ashteya Biharisingh 解释 使用运行在 Node.js 服务器上的库 JSDOM。通过使用这个库,您可以在 NodeJS 环境中加载网页并使用流行的 Jquery API 提取 dom 部分。这需要一个中间服务器并卸载抓取逻辑。

【讨论】:

【参考方案2】:

由于您提到的 CORS 问题,我怀疑这种方法是否实用。

最好的办法是创建自己的 API 或微服务来抓取和公开这些数据以供 Cordova 应用使用。这也便于在必要时缓存数据。

【讨论】:

我尝试使用我的服务器来抓取该数据,但外部域会根据 IP 更改值,这对每个用户都不起作用。 听起来有点像一个不寻常的用例。如果第三方站点有一个 API,您可以使用它来获取该数据,那将是理想的。否则,抓取网站可能是实现它的唯一方法。 您的用例到底是什么?如果我能更多地了解您想要做什么,这可能会有所帮助。 该网站正在提供基于 IP 的流媒体链接,我想从该网站获取该链接并将其放入我的应用程序中。【参考方案3】:

我想你需要Cordova whitelist plugin。正如您在页面底部看到的,对于 AJAX 和其他请求,您将需要以下元标记

<!-- This policy allows everything (eg CSS, AJAX, object, frame, media, etc) except that 
    * CSS only from the same origin and inline styles,
    * scripts only from the same origin and inline styles, and eval()
-->
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">

【讨论】:

以上是关于使用 Cordova 从网站中提取文本的主要内容,如果未能解决你的问题,请参考以下文章

从网站中提取正文文本,例如仅提取文章标题和文本而不是站点中的所有文本

C#.NET Web API 2,如何使用 HTTPGET 异步方法上的 HttpContent 从网站中提取特定文本?

cordova 使用啥浏览器

Cordova 3.6:如何从 Android 的照片库中提取 GPS Exif 数据?

Cordova 插件无法加载

如何通过 Python Selenium BeautifulSoup 从网站中提取证券价格作为文本