我尝试抓取 html 页面并将其转换为 json 对象
这是该页该页
<html><head><title>Index</title><meta charset="UTF-8"></head><body><div><p>[ <a href="index.html">Index</a> ] | [ <a href="config.html">Device Config</a> ]</p></div><div>Neighbors<pre>fe80::212:4b00:8b8:6ecb REACHABLE</pre></div><div>Default Route<pre>fe80::212:4b00:8b8:6ecb</pre></div><div>Routes<pre></pre></div><div>Sensors<pre>Battery Temp = 19 C
Battery Volt = 3320 mV
Air Pressure = 1031.12 hPa
Air Temp = 22.66 C
Object Temp = 12.375 C
Ambient Temp = 23.062 C
Light = 0.00 lux
HDC Humidity = 43.93 %RH
HDC Temp = 23.03 C
Acc X = 0.02 G
Acc Y = 0.02 G
Acc Z = -1.10 G
Gyro X = -2.93 deg per sec
Gyro Y = -2.74 deg per sec
Gyro Z = 5.18 deg per sec</pre></div><div>Page hits: 4<br>Uptime: 138 secs<br></div></body></html>
这是我的尝试:
var request = require('request');
var cheerio = require('cheerio');
request('http://[aaaa::212:4b00:c2a:b704]/index.html', function(error, response,html){
if(!error && response.statusCode == 200){
//JSON.parse(html)
//console.log('--------------------------------------');
var temp = {"id":html}
var obj = JSON.parse(temp)
console.log(JSON.stringify(obj));
}
});
如何将传感器 div 放入一个对象中,该对象包含传感器名称作为键,传感器数据作为属性
更新:
感谢 Rafal Wiliński 的帮助,我设法让它工作,但最后一个关键是将 div 作为对象中的值
新代码:
var request = require('request');
var cheerio = require('cheerio');
request('http://[aaaa::212:4b00:c2a:b704]/index.html', function(error, response,html){
if(!error && response.statusCode == 200){
var obj = {};
html.split('\n').forEach((line) => {
var key = line.split(' = ')[0];
var value = line.split(' = ')[1];
obj[key] = value;
});
console.log(JSON.stringify(obj,null,' '))
}});
但我的输出是
{
"Battery Temp": "22 C",
"Battery Volt": "3320 mV",
"Air Pressure": "1031.36 hPa",
"Air Temp": "26.09 C",
"Object Temp": "15.531 C",
"Ambient Temp": "26.312 C",
"Light": "0.08 lux",
"HDC Humidity": "34.73 %RH",
"HDC Temp": "26.38 C",
"Acc X": "0.02 G",
"Acc Y": "0.00 G",
"Acc Z": "-1.05 G",
"Gyro X": "-2.11 deg per sec",
"Gyro Y": "-1.10 deg per sec",
"Gyro Z": "3.64 deg per sec</pre></div><div>Page hits: 18<br>Uptime: 2968 secs<br></div></body></html>"
}
最佳答案
您需要用 =
符号分隔字符串。前面的部分是关键,后面的部分是你的值(value)。
以下函数可能会解决此问题:
function jsonify(str) {
var obj = {};
str.split('\n').forEach((line) => {
var key = line.split(' = ')[0];
var value = line.split(' = ')[1];
obj[key] = value;
});
return obj;
}
关于javascript - 抓取 html 页面并将其转换为 json 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43212808/