JavaScript 函数同步抓取 HTML 和 JS
JavaScript function to synchronously scrape HTML and JS
是否有支持同步 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,但我希望我的函数是同步的。
没有 Javascript 建议使用同步网络从某些外部服务器检索数据的环境。这不是 Javascript 的设计方式。 Javascript 旨在使用异步 I/O 结果将通过 promise 或回调 returned 而不能直接从函数调用中 returned。
"Ajax"中的"A"代表异步。这是在浏览器中从 Javascript 发出网络请求的基石。浏览器在技术上可以进行同步 Ajax 调用,但出于各种原因不推荐这样做(比如它在调用期间挂起 UI 在浏览器中)并且它在许多情况下也被弃用因为使用同步 ajax 几乎不是一个好主意。此外,来自浏览器的 Ajax 调用仅限于与您的网页来源相同的来源或明确允许跨来源请求的服务器。因此,您不能指望通过 Ajax 调用来获取 Internet 上的任意页面。您将无法从浏览器网页 Ajax 调用中获取大多数其他页面。
浏览器擅长的是异步网络,其中的结果是 return 通过回调或 promise 在未来的某个时间进行异步处理,而您的 Javascript 的其余部分将继续 运行 直到那时。这就是您应该如何对网络请求的访问进行编码。
如果您想在浏览器中从某个外部站点获取抓取结果,首选架构是设置一个服务器来为您完成工作。您网页中的 Javascript 将向您自己的服务器发出 Ajax 调用,要求它抓取特定网站。服务器(对于它可以从哪些主机发出请求没有跨源限制)然后将获取内容,将其抓取到所需的结果,然后 return 将抓取的结果数据发送到您的 Ajax 调用。
因此,您可以在客户端中设计一个基于 promise 的界面,它可以像这样异步工作:
getPageJS(someUrl).then(function(data) {
// process data here
}).catch(function(err) {
// process error here
});
是否有支持同步 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,但我希望我的函数是同步的。
没有 Javascript 建议使用同步网络从某些外部服务器检索数据的环境。这不是 Javascript 的设计方式。 Javascript 旨在使用异步 I/O 结果将通过 promise 或回调 returned 而不能直接从函数调用中 returned。
"Ajax"中的"A"代表异步。这是在浏览器中从 Javascript 发出网络请求的基石。浏览器在技术上可以进行同步 Ajax 调用,但出于各种原因不推荐这样做(比如它在调用期间挂起 UI 在浏览器中)并且它在许多情况下也被弃用因为使用同步 ajax 几乎不是一个好主意。此外,来自浏览器的 Ajax 调用仅限于与您的网页来源相同的来源或明确允许跨来源请求的服务器。因此,您不能指望通过 Ajax 调用来获取 Internet 上的任意页面。您将无法从浏览器网页 Ajax 调用中获取大多数其他页面。
浏览器擅长的是异步网络,其中的结果是 return 通过回调或 promise 在未来的某个时间进行异步处理,而您的 Javascript 的其余部分将继续 运行 直到那时。这就是您应该如何对网络请求的访问进行编码。
如果您想在浏览器中从某个外部站点获取抓取结果,首选架构是设置一个服务器来为您完成工作。您网页中的 Javascript 将向您自己的服务器发出 Ajax 调用,要求它抓取特定网站。服务器(对于它可以从哪些主机发出请求没有跨源限制)然后将获取内容,将其抓取到所需的结果,然后 return 将抓取的结果数据发送到您的 Ajax 调用。
因此,您可以在客户端中设计一个基于 promise 的界面,它可以像这样异步工作:
getPageJS(someUrl).then(function(data) {
// process data here
}).catch(function(err) {
// process error here
});