【发布时间】:2021-07-01 05:51:20
【问题描述】:
我正在尝试将 ${car}、${link}、${price} 写入 csv 文件。我当前的代码可以做到这一点,但它运行我的函数不止一次,我最终在我的 csv 文件中分别使用了 ${car}、${link} 和 ${price} 5 次,我只想要一次。任何帮助将非常感激!提前谢谢!
const request = require('request');
const cheerio = require('cheerio');
const fs = require('fs');
const writeStream = fs.createWriteStream('post.csv');
//Write Headers
writeStream.write(`Title,Link,Price \n`)
request('https://bringatrailer.com/bmw/e46/?q=e46', (error, response, html) => {
if(!error && response.statusCode == 200) {
const $ = cheerio.load(html);
//Grabs the title and link of the featured e46 listings off of bring a trailer
$('.featured-listing-title-link').each((a, title) => {
const car = $(title).text();
const link = $(title).attr('href');
//Grabs the prices of the featured e46 listings off of bring a trailer
$('.featured-listing-meta-value').each((i, value) => {
const price = $(value).text().replace(/,/,"");
writeStream.write(`${car}, ${link}, ${price} \n`);
});
});
//Write to CSV
console.log('Scraping Complete...')
}
});
仅供参考,这是我希望我的 csv 文件看起来像的样子
【问题讨论】:
-
它只运行一次,但你正在循环元素,所以也许这就是问题所在?
-
@Andy 我尝试将
$('.featured-listing-title-link').each((a, title)和$('.featured-listing-meta-value').each((i, value)作为单独的函数运行,这确实解决了这个问题,但是这会产生一个新问题,即 ${price} 没有正确写入 csv 文件并且位于下方标题和网址,而不是与它们排成一行。
标签: javascript node.js csv web-scraping cheerio