我创建了一个Python脚本,用于解析网站(IMDB)并将其组织到一个数据框中。
我还拥有一个node.js应用程序,该应用程序允许我查找要包含在python脚本中的变量(基于代码名称pyvar中电影名称的电影ID)。那么,如何将运行javascript应用程序后获得的此变量包含到python脚本中,运行该脚本,然后将结果发送回node.js应用程序? (这将是数据框转换为可以说的json)
Node.js应用
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的数据帧,则显示结果甚至更好,但这可能太复杂了。
最佳答案
您可以按照Felix Kling在注释中的建议使用child_process spawn
执行python脚本,然后将其结果返回到您的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)