我正在编写web crawler
。你知道吗
我有server.js / crawling.js / dataCrawler.py
当我在server.js
调用crawling.js
中定义的crawlData
时,会调用我在crawling.js
中定义的使用spawn执行dataCrawler.py
的方法。你知道吗
我需要server.js
中的数据,但执行dataCrawler.py
需要一段时间,因此我无法获得正确的数据,但为null或未定义。你知道吗
你有什么解决办法吗?或者有同样问题的人?你知道吗
我的密码在下面。)我把这些放得不太好。结构参考)
你知道吗//服务器.js你知道吗
var crawler = require("./crawling")
var resultArr = crawler.crawlData();
console.log('nodeserver:', resultArr)
你知道吗//爬网.js你知道吗
exports.crawlData = ()=>{
var dataArr = [];
var temp;
var py = spawn('python', ['dataCrawler.py']);
var data = [totalUrl, gubun];
var dataFromPy = null;
py.stdout.on('data', function(result){
var dataArr = encoding.convert(result, 'utf-8')
dataArr = JSON.parse(encoding.convert(result, 'utf-8'));
py.stdout.on('end', function(){
temp = dataArr
});
});
py.stdin.write(JSON.stringify(data));
py.stdin.end();
return temp;
}
你知道吗//数据爬虫.py你知道吗
def crawling(url, gubun, page_count):
idx = 0
result = []
jsonData = {}
for i in range(1, page_count + 1):
....
crawling code
....
return result
def main():
lines = sys.stdin.readlines()
paraFromServer = json.loads(lines[0])
url = paraFromServer[0]
gubun = paraFromServer[1]
result = crawling(url, gubun, page_count)
print(result)
main()
或者,如果不需要考虑并行运行,可以使用spawnSync
你没有解释javascript的异步特性。您需要做的是,将回调方法传递给
crawlData
方法,一旦完成了刮取,就会调用该方法。你知道吗所以
server.js
变成:回调可能导致Callback hell。尝试探索
promises
或async
/await
。你知道吗相关问题 更多 >
编程相关推荐