这些 CSS 选择器看起来有点动态,所以这里有一个使用普通标签并下拉 32 个结果的方法:
const axios = require("axios"); // 1.4.0
const cheerio = require("cheerio"); // 1.0.0-rc.12
const url = "<Your URL>";
axios
.get(url)
.then(({data: html}) => {
const $ = cheerio.load(html);
const data = [...$("article dd > p")]
.map(e => $(e).text().match(/(.*?) *\((.*)\)/))
.filter(Boolean)
.map(e => e.slice(1, 3));
console.log(data);
})
.catch(err => console.error(err));
如果您想要获取的数据不仅仅是这一字段:
axios
.get(url)
.then(({data: html}) => {
const $ = cheerio.load(html);
const data = [...$("main > div > article")]
.map(e => ({
something: $(e).find("dd > p")
.text()
.match(/(.*?) *\((.*)\)/)
.slice(1, 3),
price: $(e).find("h3").text().trim(),
model: $(e).find("h1").text().trim(),
mileage: $(e).find('[data-parameter="mileage"]')
.text().trim(),
fuelType: $(e).find('[data-parameter="fuel_type"]')
.text().trim(),
}));
console.log(data);
})
.catch(err => console.error(err));
需要明确的是,如果您认为 CSS 选择器稳定,您可以使用它们——基本策略基本相同。首先选择容器,即 <article>
,然后深入到子项中以收集该项目的数据。我使用了
something
,因为我不知道该字段在英语中的含义。