我创建了一个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)

09-30 13:21
查看更多