NodeJs解析网页JS代码
今天帮同事解析网页数据,分析源码后发现,网页展示的数据在页面定义的js变量里
这个变量里保存着上百条数据,整个对象也很大,最开始想着用python直接转成dict对象,返现怎么处理都报错,格式有问题,用了json.loads和simplejson.loads都不能解决,实在没招了,突然想到了node
想法是用python将数据post过去,node那边起一个服务,接收post请求,用node来解析json字符串
找了半天,用到express和body-parser
const express = require("express");
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json({
limit: '50mb' //nodejs 做为服务器,在传输内容或者上传文件时,系统默认大小为100kb,改为10M
}));
// app.use(bodyParser.urlencoded({
// limit: '50mb', //nodejs 做为服务器,在传输内容或者上传文件时,系统默认大小为100kb,改为10M
// extended: false
// }));
app.post('/login',function(req,res){
let name = req.body.name;
console.log(name);
var js_data = req.body.js_str;
// console.log(JSON.parse(js_data));
// let js_data_json= eval('(' + JSON.stringify(js_data) + ')');
let js_data_json = eval('(' + js_data +')')
// console.log(fk);
let model_list = js_data_json["features"]["comments"]["models"];
// var model_list = JSON.parse(js_data_json);
console.log(model_list instanceof Object);
var arr = new Array(3);
for(var p in model_list){
console.log(p);
arr.push(p);
}
// var user_name=req.body.user;
// var password=req.body.password;
// console.log("User name = "+user_name+", password is "+password);
// res.end("yes");
res.json({"ids":name});
});
//设置端口
app.listen(3000,'localhost');
console.log("服务器启动成功:http://localhost:3000");
在将json字符串转为json对象的过程中,最开始用JSON.parse,但是报错,无法处理成功,通过请教前端同事,给了一个
eval('(' + js_data +')') 的解决办法,这样就可以正常解析json对象了。
折腾了半天,其实无意间在python代码里给变量加入了一个r, r"" 的作用是去除转义字符
第一版是这样,json_data = json.loads(json_str)也是报错,格式有问题
第二版在变量前加入了r,然后通过json_data = json.loads(json_str)居然可以正常解析了

无论是python还是node,两种方案都可以解决了我的问题,也算对node熟悉了,后面再遇到python无法处理的问题,还可以用node来处理

浙公网安备 33010602011771号