javascript - 抓取 html 页面并将其转换为 json 对象

标签 javascript html json node.js

我尝试抓取 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/

相关文章:

javascript - jQuery .find ("body").html() == null

javascript - 按下表格行时选中复选框

Java:在 Restful 服务中创建包含多个值的 JSON 响应

javascript - 在 Angular 8 中使用 window.history.state 导致页面重新加载时出错

javascript - 为什么我的 AJAX post 请求不起作用?

javascript - Internet Explorer 11 忽略列表样式 :none on the first load

html - 单个文本行的背景宽度

javascript - 使用 webkitRelativePath 时,路径分隔符是操作系统特定的吗?

javascript - 从 JSON 数据创建 html 表

php - 通过MYSQL检索数据正确制作json对象