Я очищаю веб-сайты, используя CasperJS, и одна из задач заключается в сканировании URL-адреса, заданного счетчиком цикла for.URL выглядит следующим образом:
www.example.com/page/no=
, где no - это любое число от 0 до 10, установленное счетчиком цикла for.Затем скребок просматривает все страницы, собирает данные в объект JSON и повторяется до тех пор, пока не будет = 10.
Данные, которые я пытаюсь получить, хранятся в отдельных группах на каждой странице - я хотел бы работать с одним объектом JSON, объединяя все извлеченные выходные данные каждой страницы.
Представьте, что у Page1 есть Расход 1, и объект, который я получаю, - {расход1}, а у Страницы 2 - Расход 2, а объект, который я получаю, - {расход2}.То, что я хотел бы иметь, это один JSON в конце очистки, который выглядит следующим образом:
scrapedData = {
"expense1": expense1,
"expense2": expense2,
}
У меня возникают проблемы при объединении всех объектов JSON в один массив.
Я инициализировал пустой массив, а затем каждый объект помещался в массив.Я попытался проверить, где, если итератор i в for цикл равен 10, то объект JSON распечатывается, но это, похоже, не работает.Я посмотрел вверх, и кажется, что распространение объекта это вариант, но я не уверен, как использовать его в этом случае.
Любые указатели будут полезны.Должен ли я использовать какие-либо функции массива, такие как map?
casper.then(function(){
var url = "https:example.net/secure/SaFinShow?url=";
//We create a for loop to go open the urls
for (i=0; i<11; i++){
this.thenOpen(url+ i, function(response){
expense_amount = this.fetchText("td[headers='amount']");
Date = this.fetchText("td[headers='Date']");
Location = this.fetchText("td[headers='zipcode']");
id = this.fetchText("td[headers='id']");
singleExpense = {
"Expense_Amount": expense_amount,
"Date": Date,
"Location": Location,
"id": id
};
if (i ===10){
expenseArray.push(JSON.stringify(singleExpense, null, 2))
this.echo(expenseArray);
}
});
};
});