如何访问NodeWebkit中html代码中的节点模块中的抓取数据
How do I access the scraped data from node module in my html code in NodeWebkit
我正在尝试使用NodeWebkit创建一个应用程序。我正在使用节点幻影简单模块抓取内容。使用该模块,我能够从网站上抓取内容。但是我应该如何在html端访问它。我不认为我能为这个案子创建一个休息服务。这是代码示例:
var file = require('file.js');
var gui = require('nw.gui');
var menu = new gui.Menu({ type: 'menubar' });
var express = require('express');
var fs = require('fs');
var request = require('request');
var cheerio = require('cheerio');
var app = express();
var driver = require('node-phantom-simple');
url = 'http://www.espncricinfo.com/';
request(url, function(error, response, html){
if(!error){
var $ = cheerio.load(html);
var title, release, rating;
var json = { title : "", release : "", rating : ""};
$('.scoreline-list').first().filter(function(){
var data = $(this);
var numOfMatches = data.children().length;
console.log("Number of Matches: ",numOfMatches);
var matches=[];
//GET URL FOR EACH MATCH
for(x=0;x<numOfMatches;x++)
{
var lielem = data.children().eq(x);
matches[x] = "http://www.espncricinfo.com" + lielem.children().first().attr('href');
$('#editor').val(matches[x]);
console.log(matches[x]);
}
//FOR EACH MATCH URL
for(x=0;x<numOfMatches;x++)
{
var matchurl = matches[x];
//console.log(matchurl);
driver.create({ path: require('phantomjs').path }, function (err, browser) {
return browser.createPage(function (err, page) {
return page.open(matchurl, function (err,status) {
console.log("opened site? ", status);
page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js', function (err) {
// jQuery Loaded.
// Wait for a bit for AJAX content to load on the page. Here, we are waiting 5 seconds.
setTimeout(function () {
return page.evaluate(function () {
//Get what you want from the page using jQuery. A good way is to populate an object with all the jQuery commands that you need and then return the object.
var h2Arr = [];
$('.innings-information').each(function () { h2Arr.push($(this).html()); });
return {
h2: h2Arr
};
}, function (err,result) {
console.log(result);
browser.exit();
});
}, 5000);
});
});
});
});
setTimeout(function(){
//waiting for the jquery to load
}, 5000);
} //END FOR LOOP EACH MATCH URL
})
}
})
谢谢你的帮助!
为什么不能为此创建一个rest端点?只需缓存每个抓取操作的结果,然后在http端点上返回缓存。
var cache={};
app.get('/myendpoint', function(req, res) {
res.json(cache);
})
request(url, function(error, response, html){
...
setTimeout(function () {
...
console.log(result);
//set cache here
cache=result;
browser.exit();
});
}, 5000);
});
app.listen(1338);
如果要缓存以进行更新,请将抓取函数封装在setInterval中。
var cache={};
app.get('/myendpoint', function(req, res) {
res.json(cache);
})
function updateCache() {
request(url, function(error, response, html){
...
setTimeout(function () {
...
console.log(result);
//set cache here
cache=result;
browser.exit();
});
}, 5000);
});
}
//Update cache every 60 secs.
setInterval(updateCache, 60000);
app.listen(1338);
相关文章:
- 如何发送作为节点请求响应函数中的代码块的响应
- 查找将 onclick 事件分配给节点的代码
- 节点 js 中的客户端代码
- 节点 - 将 JSON 文件加载到代码中
- 如何在节点的沙盒环境中执行用户提交的javascript代码
- 如何将多行javascript代码写入带有节点的文件
- 将jQuery节点转义为文本,以便HTML代码可见
- 从HTML代码段创建节点列表后,.find()未按预期工作
- 这是什么'...${...}节点文档中的代码意味着
- PhantomJS的Phantom节点包等效代码
- 使节点.js代码在浏览器中工作
- 在节点.js代码中实现回调的问题
- jQuery或JS代码,用于获取网页中当前选定的表单项/文本/图像的确切节点数据
- 在节点.js中强制使用顺序代码
- 节点 js 退出状态 8,错误代码 0 在 Mac 上运行
- 为什么这段代码卡住了节点.js - Javascript上的错误
- Webpack 在目标节点时忽略代码拆分
- 节点 JS:使用状态代码 503 重试函数
- 获取未定义的节点.js代码
- 套接字在服务器端代码节点内发出