JavaScript函数同步抓取HTML和JS

时间:2016-07-23 16:39:17

标签: javascript php scrape

是否有一个支持同步JavaScript函数的库,如下所示?

function getPageHTML(url){
     // scrape HTML from external web page
     return html;
}

function getPageJS(url){
     // scrape final JavaScript variable results from external web page
     return js;
}

我喜欢pjscrape背后的概念,但不想使用命令行脚本。我不介意使用PHP,但我希望我的功能是同步的。

1 个答案:

答案 0 :(得分:1)

没有Javascript环境,建议使用同步网络从某些外部服务器检索数据。这不是Javascript的设计方式。 Javascript旨在使用异步I / O,其中结果将通过promise或回调返回,并且不能直接从函数调用返回。

" A"在" Ajax"代表异步。这是在浏览器中从Javascript发出网络请求的基石。浏览器在技术上可以进行同步Ajax调用,但不建议出于各种原因(例如它在调用期间挂起浏览器中的UI),并且在许多情况下它也被弃用,因为它几乎从不使用同步ajax的好主意。此外,来自浏览器的Ajax调用仅限于您的网页来源或明确允许跨源请求的服务器。因此,您无法进行Ajax调用以获取互联网上的任意页面。您无法从浏览器网页Ajax调用中获取大多数其他页面。

浏览器擅长的是异步网络,其中结果将在未来的某个时间通过回调或承诺异步返回,其余的Javascript将继续运行直到那时。这就是您应该如何编码对网络请求的访问权限。

如果您希望从某个外部站点获取浏览器中的结果,那么首选的体系结构将是设置一个能够为您完成工作的服务器。您的网页中的Javascript将向您自己的服务器发出Ajax调用,要求它抓取特定的网站。服务器(对它可以发出请求的主机没有交叉来源限制)然后将获取内容,将其抓取到所需的结果中,然后将生成的已删除数据返回到Ajax调用。

因此,您可以在客户端中设计一个基于promise的接口,它可以像这样异步工作:

getPageJS(someUrl).then(function(data) {
    // process data here
}).catch(function(err) {
    // process error here
});