因此,我一直在使用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;
答案 0 :(得分:0)
如果找到正则表达式库,则可以在抓取时或在将字符串取回类似的东西后应用正则表达式模式
<table>*</table>
这应该返回遵循<table> ANYTHING </table>
模式的所有字符串
答案 1 :(得分:0)
我使用了tabletojson包
npm install --save 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);
}
});
});
}
这是功能,可以正常工作。输出有点混乱,但是您可以进行处理。