【发布时间】:2020-09-27 23:03:03
【问题描述】:
正在使用 Cheerio 和 nodejs 从 allegro 网站获取数据,以在 API 中创建端点,返回 csv 数据,这些数据将在以后作为数据科学项目的一部分进行研究:
为了获取汽车信息,我设法从第一页刮掉了链接,每个链接将您发送到汽车(汽车项目)以查看汽车的完整信息我需要从每个链接中刮取更多数据如何做我这样做?
以及如何让 json 数据显示为 csv?
这里使用的代码:
const url =
"https://allegro.pl/kategoria/samochody-osobowe-4029?bmatch=baseline-al-product-cl-eyesa2-engag-dict45-aut-1-3-0605";
//const writeStream = fs.createWriteStream("allegro.csv");
// Write Headers
//writeStream.write(`Price,Link \n`);
function getCars() {
return fetch(`${url}`)
.then((response) => response.text())
.then((body) => {
const cars = [];
const $ = cheerio.load(body);
$("._9c44d_2H7Kt").each(function (i, el) {
const $price = $(el).find("._9c44d_1zemI");
const $link = $(el).find("a");
const $year = $(el).find("dd");
const $make = $(el).find("h2");
const car = {
price: $price.text().replace(/\s\s+/g, ""),
link: $link.attr("href"),
year: $year.first().next().next().text(),
make: $make.text(),
};
cars.push(car);
});
// Write Row to CSV
// writeStream.write(`${price},${link} \n`);
return cars;
});
}
用于 nodejs 端点的代码:
app.get("/scraping/:allegro", (req, res) => {
scraper.getCars(req.param.allegro).then((cars) => {
//console.log(cars);
res.json(cars);
});
从每个链接获取的数据如下:添加日期,型号,电话号码,城市,vin
【问题讨论】:
标签: node.js api web-scraping cheerio