我创建了一个解析网站(IMDB)并将其组织成数据帧的python脚本。 我还有一个node.js应用程序,它允许我在python脚本中找到一个变量(基于名为 pyvar 的代码中的电影名称的电影ID)。那么如何在运行javascript应用程序到python脚本之后包含这个变量,运行脚本然后将结果发送回node.js应用程序? (这将是数据帧转换为让我们说json)
Node.js app
var express = require("express")
var app = express()
var request = require("request")
app.set("view engine", "ejs")
app.get("/", function(req, res){
res.render("search")
})
app.get("/results", function(req, res){
var query = req.query.search
var url = "http://www.omdbapi.com/?s=" + query + "&apikey=thewdb"
request(url, function(error, response, body){
if(!error && response.statusCode == 200){
var data = JSON.parse(body)
res.render("results", {data: data})
var pyvar = data["Search"][0]["imdbID"]
}
})
})
app.listen(process.env.PORT, process.env.IP, function(){
console.log("Movie App has started!!!");
})
简而言之,python脚本如下所示:
url = 'website.org/' + pyvar + '/blah'
parse(url)
return dataframe
之后我会以某种形式将数据帧发送回node.js应用程序并显示结果,如果它允许我下载转换为xlsx的数据帧,则可能会更加复杂。
答案 0 :(得分:1)
您可以使用child_process spawn
执行您的python脚本,如 Felix Kling 在其评论中提示,并将结果返回到您的nodejs应用。然后,您可以使用像node-xlsx这样的包将数据转换为Excel文件。
类似的东西:
app.js
// ...
const { spawn } = require('child_process');
const xlsx = require('node-xlsx');
// ...
app.get("/results", (req, res) => {
let query = req.query.search;
let url = "http://www.omdbapi.com/?s=" + query + "&apikey=thewdb";
request(url, (error, response, body) => {
if (!error && response.statusCode == 200) {
let data = JSON.parse(body);
let pyvar = data["Search"][0]["imdbID"];
// Call the python script
let pythonScript = spawn('./script.py', [pyvar]);
pythonScript.stdout.on('data', data => {
// Here transform the datatable to xls sheet
let xlsx = xlsx.build([{ name: "myXlsxSheet", data: data.toString() }])
// And send the file
res.end(new Buffer(xlsx, 'binary'));
});
}
})
})
// ...
script.py
#!/usr/bin/python
import sys
import pandas
pyvar = sys.argv[1]
# Here the script that parse the website
url = 'website.org/' + pyvar + '/blah'
data = parse(url)
print pandas.DataFrame(data)