我创建了一个 python 脚本来解析网站 (IMDB) 并将其组织成数据框。 我还有一个 node.js 应用程序,它允许我找到我将包含在 python 脚本中的变量(电影 ID 基于名为 pyvar 的代码中的电影名称)。那么,如何将运行 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 的数据帧甚至更好,但它可能太复杂了。
最佳答案
您可以使用 child_process spawn
来执行您的 python 脚本,正如 Felix Kling 在他的评论中所建议的那样,并将其结果返回给您的 nodejs 应用程序。然后你可以使用像 node-xlsx 这样的包将数据转换为 Excel 文件。
类似的东西:
应用程序.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'));
});
}
})
})
// ...
脚本.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)
关于javascript - 带有 python 脚本的 Node.js 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46779359/