将JSON与可能的差异进行比较
摘要-每10分钟CRON作业
我的应用程序从网站抓取数据并以以下格式检索JSON:
[{
price: '$12,500',
title: '2003 Jeep Wrangler X Sport Utility 2D',
location: 'Valrico, Florida',
miles: '90K miles',
imgUrl: '.0-0/c43.0.260.260a/p261x260/95585818_10158483215408453_5232171551314411520_n.jpg?_nc_cat=103&_nc_sid=843cd7&_nc_oc=AQnRkSY39Su7LJ3YcapqFxNeys_RLB964OEHIjAMP6T3PwHB2dhHyKL9Y8xLapOUpns&_nc_ht=scontent-mia3-2.xx&oh=48828c46faf75c08d28b656459caaf01&oe=5ED8EA6F',
itemURL: '/marketplace/item/525451485002934/'
},
{
price: '$15,500',
title: '2012 Jeep Wrangler Unlimited Sport SUV 4D',
location: 'Clearwater, Florida',
miles: '95K miles',
imgUrl: '.0-0/c63.0.260.260a/p261x260/92586992_10156757268737397_3495264851003965440_n.jpg?_nc_cat=111&_nc_sid=843cd7&_nc_oc=AQk_rGSLpKWlkQrYAfXAZXCuV2iZ2cdmVi2lwvjhABGFbFycuawGBR4O-ax3VqUIBX4&_nc_ht=scontent-mia3-1.xx&oh=af5d06bf5564aa9d062ed4427ed1873e&oe=5ED72FA5',
itemURL: '/marketplace/item/2901350359949722/'
}
]
此信息已保存到文件newjeeps.json
前端使用此数据显示在站点上。
但是...
我只希望新项目显示在页面上。意思是,每次运行脚本时,我要显示尚未显示的项目。
因此,我想我将比较两个结果,并将差异保存到newjeeps.json,因此网页将始终显示新项目。对吧?
我仅是比较标题。如果标题匹配,请从最终阵列中删除。 (是的,在一个完美的世界中……)
这是我的代码。它不会出错,但是也不会保存不同的项目。我要删除重复项,然后重新保存新数据。
const initScraper = async () => {
// Get currently listed items on Marketplace
const items = await getItems('Jeep Wrangler');
console.log(items);
// Get OLD Jeeps
const existingResults = jsonfile.readFileSync(fileName);
const ex = existingResults.length;
var existingTitle;
var newTitle;
var newItems = [];
/* Loop through EXISTING (newjeeps.json) */
for (var i = 0; i < ex.length; i++) {
/* Existing Title */
existingTitle = existingResults[i].itemTitle;
/* Loop through NEW data */
for (y = 0; y < items.length; y++) {
/* New Title */
newTitle = items[y].itemTitle;
/* Do we have a match? */
if (existingTitle == newTitle) {
//console.log("match");
// Remove from new results
items.splice(y, 1);
// Change detected?
changed = true;
}
}
}
if (changed) {
const page2 = await browser.newPage();
await page2.goto(`.php`);
jsonfile.writeFile(fileName, items, function (err) {
if (err) console.error(err)
})
}
console.log("done");
}
有人看见发生了什么事吗?
谢谢。
回答如下:此问题的根本原因是,您试图访问对象中不存在的属性itemTitle
。