Хочу поделиться с сообществом небольшим скриптом для загрузки цен с сайта объявлений AVITO в Google Spreadsheet. Вдруг кому-нибудь еще пригодится.
Логика такая — в цикле бежим по ячейкам таблицы с адресами и запрашиваем странички. Из полученных страниц получаем цену и подставляем в соседние ячейки. Запуск скрипта через пункт меню Avito -> Update Prices.
(наименнннование sic!)
Далее пошаговая инструкция. Заранее прошу прощения, у не владеющих, что названия и пункты меню на английском языке. Думаю по картинкам вы сможете воспроизвести шаги в русском интерфейсе.
Чтобы получить подобную страничку делаем следующее:
1) Создаем документ Google Spreadsheet
(https://docs.google.com/spreadsheets -> Start a new spreadsheet -> Blank)
2) Поиском находим на авито интересующие нас объявления и подставляем их адреса в наш документ. Должно получиться что-то вроде
3) Создаем Named Range «URL». Для этого выбираем Data -> Named Ranges…
Ставим курсор на первый адрес в нашем списке и нажимаем + Add a range, вводим URL и нажимаем Done.
4) Заходим в редактор скриптов Tools -> Script Editor
Стираем существующий и вставляем следующий код:
function priceToStr(pPrice){
var res = parseInt(pPrice.replace(/D/g, ""));
return res;
}
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Avito')
.addItem('Update Prices', 'updatePrices')
.addToUi();
}
function updatePrices() {
var sheet = SpreadsheetApp.getActiveSheet();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var range = ss.getRangeByName('URL');
var firstRow = range.getRow();
var firstCol = range.getColumn();
var howManyRowsRead = 50;
Logger.log('firstRow = ' + firstRow);
Logger.log('firstCol = ' + firstCol);
var data = sheet.getRange(firstRow, firstCol, howManyRowsRead, 1).getValues();
LLL: for (var i = 0; i < data.length; i++) {
var url = data[i][0];
if (!url) break LLL;
var prevPriceCell = sheet.getRange(firstRow+i, firstCol+2);
var priceCell = sheet.getRange(firstRow+i, firstCol+1);
prevPriceCell.setValue(priceCell.getValue());
priceCell.setValue('0');
var options =
{
headers : {'Cache-Control' : 'max-age=0',
'Referer': 'https://www.avito.ru/tolyatti/doma_dachi_kottedzhi/prodam?pmax=2700000&pmin=600000&geo=53.50804496509228%2C49.1193614935664%2C53.52551454627456%2C49.183133695104516%2C15%2Cf',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'},
muteHttpExceptions: true,
};
var response = UrlFetchApp.fetch(url, options).getContentText();
var p1 = '<span itemprop="price">';
var l1 = response.indexOf(p1);
var p2 = '</span>';
var l2 = response.indexOf(p2, l1 + p1.length);
Logger.log('l1 = ' + l1);
Logger.log('l2 = ' + l2);
if (l1 != -1 && l2 != -1)
{
var price = response.substring(l1 + p1.length,l2);
Logger.log('price = ' + price);
priceInt = priceToStr(price);
Logger.log('priceInt = ' + priceInt);
priceCell.setValue(priceInt);
}
}
}
Сохраняем. Имя скрипта значения не имеет.
На этом все готово! Можно закрыть редактор скриптов, обновить Spreadsheet. Должен появиться пункт меню Avito -> Update Prices.
Выбираем его, даем нужные права и смотрим как заполняются цены в нашем документе.
PS Если в процессе произошла ошибка — в поиске причины помогут логи доступные из редактора скриптов Tools -> Script Editor -> View -> Logs.
Автор: LexB