Обработка тела запроса nodejs - PullRequest
0 голосов
/ 06 сентября 2018

Итак, я работал над этим приложением, используя nodejs, и мне нужно очистить несколько таблиц HTML с нескольких веб-сайтов. Я уже получил ответы на обещания. Но тело ответа - это строка целой страницы, это выглядит так.

output.json

[
   [
    "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd",
    "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd"
   ]
]

Я удалил часть контента, но вы поняли идею. У меня вопрос, как извлечь таблицу из этой строки. Или, может быть, я должен изменить подход?

server.js

var express = require('express');
var fs = require('fs-extra');
var request = require('request');
var cheerio = require('cheerio');
var tabletojson = require('tabletojson');
var app = express();

var baseURL = "https://guildstats.eu/bosses?world=Kenora&monsterName=";
var bosses = ["Ferumbras", "Ghazbaran"];
var bossesURL = []
var globalJson = [];
for (i = 0; i < bosses.length; i++) {
    bossesURL.push(`${baseURL}${bosses[i]}`)
}
function requestAsync(url) {
return new Promise(function(resolve, reject) {
    request(url, function(err, res, body) {
        if (err) { return reject(err); }
        else {
            return resolve(body);
        }

    });
});
}

app.get("/scrape",(req,res)=>{
    Promise.all(bossesURL.map(requestAsync))
        .then(function(allData) {    
            globalJson.push(allData)
        fs.writeFile('client/src/output.json',JSON.stringify(parsed,null,4))
            console.log(parsed)
        })
        .catch((err) => {
            console.log('Error:',err)
        });
})




app.listen('8081');


exports = module.exports = app;

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Я использовал пакет tabletojson

npm install - сохранить tabletojson

function requestAsync(url) {
return new Promise(function(resolve, reject) {
    request(url, function(err, res, body) {
        if (err) { return reject(err); }
        else {
            console.log(url)
            body = tabletojson.convertUrl(url, {
                forceIndexAsNumber: true,
            },
                (tableAsJson)=>{
                    return tableAsJson[3]
                })

            return resolve(body);
        }

    });
});
}

И эта функция работает как задумано.Вывод немного грязный, но вы можете работать над этим.

0 голосов
/ 06 сентября 2018

Если вы найдете библиотеку Regex, вы можете применить шаблон регулярных выражений при очистке или после того, как вы получите строку обратно, например,

<table>*</table>

Это должно вернуть любую строку, которая следует шаблону <table> ANYTHING </table>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...