python - 在从python获得的nodejs中打印csv字符串
问题描述
我请求所有有 NodeJS/python 经验的玩家看看我的问题。请至少将我引导到可以解决此问题的路径。
我在后端的 python 脚本./webextraction.py
处理 nodejs ( app.js
) 从客户端发送的 3 个参数(urls csv 文件或字符串、关键字和布尔复选框)。但问题是python脚本正在使用webdriver.Chrome
它首先在命令提示符下写一些如下所示的指令
此外,在我的 nodejs 脚本中,我成功地将上述系统参数发送到 python 脚本,并在 url 中获得了输出localhost:4000/formsubmit
,但问题是它只打印命令提示符的第一行,
例如,见下文
但是我构建代码来查看处理后的 csv 字符串而不是这个[WDM] - ====== WebDriver manager ======
请在下面查看我的 nodejs 代码文件app.js
,并请指导我
/* csv to json */
const express = require("express"),
app = express(),
upload = require("express-fileupload"),
csvtojson = require("csvtojson");
var http = require('http');
var path = require("path");
var bodyParser = require('body-parser');
var helmet = require('helmet');
var rateLimit = require("express-rate-limit");
let csvData = "test";
app.use(upload());
var server = http.createServer(app);
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100 // limit each IP to 100 requests per windowMs
});
app.use(bodyParser.urlencoded({extended: false}));
app.use(express.static(path.join(__dirname,'./Final')));
app.use(helmet());
app.use(limiter);
server.listen(process.env.PORT || 3000, function() {
console.log('server running on port 3000');
})
app.get('/', function(req, res){
res.sendFile(path.join(__dirname,'./index.html'));
});
// form submit request
app.post('/formsubmit', function(req, res){
/** convert req buffer into csv string ,
* "csvfile" is the name of my file given at name attribute in input tag */
csvData = req.files.csvfile.data.toString('utf8');
// Send request to python script
var spawn = require('child_process').spawn;
var process = spawn('python', ["./webextraction.py", csvData, req.body.keywords, req.body.full_search])
dataString = "";
process.stdout.on('data', function(data){
dataString += data.toString();
});
process.stdout.on('end', function(){
console.log(dataString);
});
process.stdin.end();
process.stderr.on('data', function(data){
res.send("<p>"+data.toString()+"</p>");
});
});
我尝试了下面的代码,它以块的形式接收数据,但仍然无法正常工作
process.stdout.on('data', chunk => chunks.push(chunk));
process.stdout.on('end', () => {
try {
// If JSON handle the data
const data = JSON.parse(Buffer.concat(chunks).toString());
console.log(data);
} catch (e) {
// Handle the error
console.log(result);
}
});
下面是./webextraction.py
使用数据框创建 csv 文件的 python 代码文件的一部分。此 python 代码具有 csv 字符串。请注意输入 csv 和输出 csv 文件可以有更多的行数,即 1000s
colList = ['Found urls', 'Not found urls','Error urls']
dframe = pd.DataFrame(columns = colList, dtype = str)
maxlen = get_max_of_list(found_results_A, found_keywords_list_changed, notfound_results, error_urls)
found_results_A = append_space(found_results_A, maxlen)
notfound_results = append_space(notfound_results, maxlen)
error_urls = append_space(error_urls, maxlen)
found_keywords_list_changed = append_space(found_keywords_list_changed, maxlen)
if(len(found_results_A) == maxlen and len(notfound_results) == maxlen and len(error_urls) == maxlen and len(found_keywords_list_changed) == maxlen):
dframe['Found urls'] = found_results_A
dframe['keywords'] = found_keywords_list_changed
dframe['Not found urls'] = notfound_results
dframe['Error urls'] = error_urls
dframe = dframe.sort_values(by=["Found urls"], ascending=False)
data = dframe.dropna(axis=0, how='all', thresh=None, subset=None, inplace=False)
export_csv = dframe.to_csv(encoding = 'ASCII', index = None, header = True)
print(export_csv)
下面的文件代码是index.html
将内容发送到nodejs
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Keyword searcher</title>
</head>
<body>
<div class="row">
<div class="col">
<form method="post" enctype="multipart/form-data" action="/formsubmit">
<label for="csvfile">Upload csv file (having URLs)</label><br>
<input type="file" name="csvfile" id="csvfile" accept=".csv"><br>
<p>Enter keywords to search (separated by comma(,))</p>
<input type="text" name="keywords" id="keywords"><br>
<label for="full_search">Full search</label>
<input type="checkbox" name="full_search" id="full_search"><br>
<button type="submit">Submit</button>
</form>
<div id="status"></div>
</div>
</div>
</body>
</html>
解决方案
推荐阅读
- python - 递归检查我是否可以从数字列表中创建给定数字的总和
- javascript - 如何命名 HTML 输入 ID 与 Google Places API 的 address_component 不同?
- delphi - 声明要从字符串变量转换的单位
- r - 在 gganimate 图中增加标题的字体大小?
- excel - Excel 数组公式产生 FALSE(不一致的行为)
- swift - 如何转换为类中的协议类型?
- ruby - 拆分字符串以获取数字
- node.js - 反应路由器直接网址
- javascript - Google Chrome 中的 Ajax / Jquery 和 window.open 触发弹出窗口阻止程序
- django - 如何使用谷歌地图 api 在 django 中获取用户位置?