Если вы просто ищете парсер Авито и не хотите научиться писать парсеры самостоятельно, вы можете просто загрузить готовый парсер AVITO.RU в ваш аккаунт на платформе Diggernaut из нашего каталога бесплатных парсеров
Представленный здесь парсер авито поможет вам собрать информацию и товарах из объявлений в системе Avito.ru. Авито является одной из самых популярных в России досок объявлений частных лиц, на которой представлены десятки миллионов товаров. С помощью этого парсера вы сможете забрать информацию о товарах, представленных в заданной категории, а также, если вы будете использовать собственный российский прокси — контактную информацию продавца.
обновление парсеров 15.11.2019 в связи с изменением некоторых селекторов на сайте
Небольшое дополнение. Основной парсер в данной статье парсит обычную версию сайта. В обычной версии сайта телефоны показываются как изображения, а потому требуют специальный OCR функционал, который есть у нас в облаке, но отсутствует в скомпилированной версии. Поэтому запуск парсера вне нашего облака был ранее практически невозможен (была возможность сбора данных без контактных телефонов). Теперь мы представляем вам также парсер для мобильной версии сайта. Этот парсер не требует OCR, и вы сможете использовать скомпилированную версию парсера у себя на компьютере или сервере.
Примерное количество товаров: в зависимости от категории от нескольких сотен до нескольких миллионов
Примерное количество запросов: в зависимости от категории от нескольких сотен до нескольких миллионов
Рекомендуемый план подписки: в зависимости от категории от Free до XX-Large
ВНИМАНИЕ! Количество запросов может превышать количество товаров, потому что данные о вариациях, изображениях и др. могут парсится используя запросы к дополнительным ресурсам. Также часть данных о товаре может доставляться с помощью XHR запросов, что также увеличивает общее количество необходимых запросов.
Как пользоваться парсером объявлений авито
Для использования парсера информации с сайта Авито вы должны иметь учетную запись в нашем сервисе Diggernaut.
- Пройдите по этой ссылке для регистрации в сервисе Diggernaut
- После регистрации и подтверждения email адреса войдите в свою учетную запись
- Создайте проект с любый именем и описанием, если вы не знаете как, обратитесь к нашей документации
- Войдите во вновь созданный проект и создайте в нем диггер с любым именем, если вы не знаете как, обратитесь к нашей документации
- Скопируйте в буфер обмена приведенный ниже сценарий диггера и вставьте его в созданный вами диггер, если вы не знаете как, обратитесь к нашей документации
- ВНИМАНИЕ! Базовые прокси сервера не позволят вам собирать контактную информацию продавцов если вы используете парсер для обычной версии сайта. Для этого вам будет нужен собственный российский прокси-сервер. Тип прокси должен быть HTTP/HTTPS (SOCKS4/5 в данный момент не поддерживаются). Вы должны будете прописать ваш прокси сервер в сценарии, как указано. Если этот пункт вам непонятен и вы затрудняетесь как это сделать, свяжитесь с нами через систему поддержки или используя наш онлайн чат, мы обязательно вам поможем. Обратите внимание что символа # не должно быть в строке с вашим прокси, очень многие делают ошибку, оставляя символ решетки перед своим прокси. Другими словами в строке с вашим прокси должно быть не:
proxy: #1.1.1.1:8888
а
proxy: 1.1.1.1:8888
Естественно вы должны использовать IP, порт (и возможно логин и пароль для прокси) именно вашего прокси, а не примера данного в этой статье. Для парсера мобильной версии сайта российский прокси не требуется.
- При необходимости, в 10 строке сценария поставьте URL категории, которую вы хотите парсить, то есть замените категорию, которая стоит сейчас, нужной вам.
- Переключите режим работы диггера с Debug на Active, если вы не знаете как, обратитесь к нашей документации
- Запустите ваш диггер и дождитесь окончания его работы, если вы не знаете как, обратитесь к нашей документации
- Скачайте собранный набор данных в нужном вам формате, если вы не знаете как, обратитесь к нашей документации
В дальнейшем вы можете установить расписание для запуска вашего парсера и забирать информацию регулярно. Также вы можете скомпилировать ваш диггер для запуска его на вашем компьютере или сервер, для получения дополнительной информации, обратитесь к документации.
Сценарий парсера мобильного сайта Avito
---
config:
debug: 2
agent: "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Mobile Safari/537.36"
do:
- link_add:
pool: catalog
url: 'https://m.avito.ru/ufa/kvartiry/sdam/na_dlitelnyy_srok/ne_posledniy?cd=1&pmax=60000&pmin=40000'
- walk:
to: links
pool: catalog
do:
- variable_clear: key
- variable_clear: sp
- variable_clear: laststamp
- find:
path: script
do:
- variable_get: key
- if:
match: \S
else:
- parse:
attr: src
- if:
match: mstatic\/build
do:
- set_converter:
content_type: application/javascript
converter: image
- walk:
to: value
do:
- variable_clear: filt
- find:
path: imgbase64
do:
- parse
- normalize:
routine: Base64Decode
- filter:
args:
- params\:\s*\{\s*key\:\s*\"?([A-Za-z0-9\$]+)\"?\s*\}\,data
- normalize:
routine: replace_substring
args:
\$: '\$'
- variable_set: filt
- parse
- normalize:
routine: Base64Decode
- filter:
args:
- \,\s*<%filt%>\s*\=\s*\"([^"]+)\"\;
- var\s*<%filt%>\s*\=\s*\"([^"]+)\"
- if:
match: \S
do:
- variable_set: key
- clear_converter:
content_type: application/javascript
- find:
path: script:contains('window.__initialData__')
do:
- parse
- eval:
routine: js
body: (function () {var window = {}; <%register%>; return JSON.stringify(window.__initialData__);})();
- normalize:
routine: json2xml
- to_block
- find:
path: search > searchparams > *
do:
- variable_get: nodeName
- normalize:
routine: replace_substring
args:
- categoryid: categoryId
- locationid: locationId
- if:
match: 'owner'
do:
- register_set: owner%5B0%5D
- variable_set: nodeName
- variable_set: nodeName
- parse
- register_set: <%sp%>&<%nodeName%>=<%register%>
- variable_set: sp
- register_set: key=<%key%><%sp%>
- variable_set: sp
- find:
path: search > laststamp
do:
- parse
- variable_set: laststamp
- variable_set:
field: repeat
value: "yes"
- variable_set:
field: page
value: 1
- walk:
to: https://m.avito.ru/api/9/items?<%sp%>&page=<%page%>&lastStamp=<%laststamp%>&display=list&limit=30
repeat: <%repeat%>
do:
- sleep: 3
- variable_set:
field: repeat
value: "no"
- find:
path: status
do:
- eval:
routine: js
body: (function () {var page = <%page%>; return page + 1;})();
- variable_set: page
- find:
path: result > laststamp
do:
- parse
- variable_set: laststamp
- find:
path: result > items > value > uri_mweb
do:
- variable_set:
field: repeat
value: "yes"
- parse
- if:
match: \w+
do:
- normalize:
routine: url
- variable_set:
field: repeat2
value: "yes"
- walk:
to: value
repeat: <%repeat2%>
do:
- sleep: 3
- find:
path: 'div#app'
do:
- variable_set:
field: repeat2
value: "no"
- object_new: item
- static_get: url
- object_field_set:
object: item
field: url
- find:
path: script:matches(window\.\_\_initialData\_\_\s*\=)
in: doc
do:
- parse
- eval:
routine: js
body: (function () {var window = {}; <%register%>; return JSON.stringify(window.__initialData__);})();
- normalize:
routine: json2xml
- toblock
- find:
path: body_safe
do:
- find:
path: list:hasChild(type:matches(phone)) > value > uri
do:
- parse:
filter:
- number\=(.+)\s*$
- if:
match: \d
do:
- normalize:
routine: URLDecode
- object_field_set:
object: item
field: phone
- find:
path: 'images > safe_640x480'
do:
- parse
- if:
match: \S
do:
- object_field_set:
object: item
field: image
joinby: "|"
- find:
path: coords
do:
- find:
path: lat
do:
- parse
- if:
match: \S
do:
- object_field_set:
object: item
field: lat
type: float
- find:
path: lng
do:
- parse
- if:
match: \S
do:
- object_field_set:
object: item
field: lng
type: float
- find:
path: item > id
do:
- parse:
filter: (\d+)
- space_dedupe
- trim
- object_field_set:
object: item
field: id
- walk:
to: https://m.avito.ru/api/1/items/<%register%>/phone?key=<%key%>
do:
- find:
path: uri
do:
- parse:
filter:
- number\=([^?]+)
- if:
match: \d
do:
- normalize:
routine: URLDecode
- object_field_set:
object: item
field: phone
- find:
path: item > time
do:
- parse:
filter: (\d+)
- if:
match: \d+
do:
- normalize:
routine: date_format
args:
format_in: "%s"
format_out: "%Y-%m-%d %T"
- object_field_set:
object: item
field: actualized
- find:
path: item > stats > views > total
do:
- parse:
filter: (\d+)
- if:
match: \d+
do:
- object_field_set:
object: item
field: views_total
- find:
path: item > stats > views > today
do:
- parse:
filter: (\d+)
- if:
match: \d+
do:
- object_field_set:
object: item
field: views_today
- find:
path: 'h1[itemprop="name"]'
in: doc
do:
- parse
- space_dedupe
- trim
- object_field_set:
object: item
field: title
- find:
path: 'meta[itemprop="priceCurrency"]'
do:
- parse:
attr: content
- object_field_set:
object: item
field: currency
- find:
path: 'meta[itemprop="price"]'
do:
- parse:
attr: content
- object_field_set:
object: item
field: price
- find:
path: 'meta[itemprop="description"]'
do:
- parse:
attr: content
- space_dedupe
- trim
- object_field_set:
object: item
field: description
- find:
path: 'span[data-marker="delivery/location"]'
do:
- parse
- space_dedupe
- trim
- object_field_set:
object: item
field: address
- find:
path: 'span[data-marker="seller-info/name"]'
do:
- parse
- space_dedupe
- trim
- object_field_set:
object: item
field: seller
- object_save:
name: item
- find:
path: body
do:
- variable_get: repeat2
- if:
match: "yes"
do:
- proxy_switch
Обратите внимание, что стартовый URL должен вести на мобильный сайт, а не на основной: m.avito.ru вместо www.avito.ru
Сценарий парсера обычной версии сайта Авито
ВНИМАНИЕ!!! парсер обычной версии сайта больше не поддерживается ввиду малого спроса из-за присутствия платной опции OCR. Используйте парсер мобильной версии сайта. Если вам нужна именно обычная версия сайта и этот парсер перестал работать, мы можем обновить парсер лично для вас, но не бесплатно.
---
config:
debug: 2
proxy: #ВСТАВЬТЕ СЮДА ВАШ ПРОКСИ СЕРВЕР В ВИДЕ 1.1.1.1:8888
agent: "Firefox"
do:
- link_add:
pool: catalog
url:
- https://www.avito.ru/kostroma/detskaya_odezhda_i_obuv
- walk:
to: links
pool: catalog
do:
- sleep: 3
- find:
path: a.js-pagination-next
do:
- parse:
attr: href
- space_dedupe
- trim
- if:
match: \w+
do:
- normalize:
routine: url
- link_add:
pool: catalog
- find:
path: a.item-description-title-link
do:
- parse:
attr: href
- space_dedupe
- trim
- if:
match: \w+
do:
- normalize:
routine: url
- link_add:
pool: pages
- walk:
to: links
pool: pages
do:
- find:
path: div.item-view-content
do:
- object_new: item
- static_get: url
- object_field_set:
object: item
field: url
- find:
path: .item-view-header span.title-info-title-text
in: doc
do:
- parse
- space_dedupe
- trim
- object_field_set:
object: item
field: title
- find:
path: div.title-info-metadata-item-redesign
slice: 0
in: doc
do:
- parse
- space_dedupe
- trim
- object_field_set:
object: item
field: actualized
- find:
path: span[data-marker="item-view/item-id"]
in: doc
do:
- parse:
filter: (\d+)
- object_field_set:
object: item
field: id
- find:
path: div.title-info-metadata-item.title-info-metadata-views
in: doc
do:
- node_remove: i
- parse:
filter: (\d+)\s*\(
- object_field_set:
object: item
field: views_total
- parse:
filter: (\d+)\s*\)
- object_field_set:
object: item
field: views_today
- find:
path: span[itemprop="price"]
slice: 0
in: doc
do:
- parse:
attr: content
filter: (\d+)
- object_field_set:
object: item
field: price
- find:
path: span[itemprop="priceCurrency"]
slice: 0
in: doc
do:
- parse:
attr: content
- object_field_set:
object: item
field: currency
- find:
path: div.item-description-text
do:
- parse
- space_dedupe
- trim
- object_field_set:
object: item
field: description
- find:
path: span[itemprop="address"]
do:
- find:
path: meta[itemprop="addressLocality"]
do:
- parse:
attr: content
- space_dedupe
- trim
- object_field_set:
object: item
field: city
- parse
- space_dedupe
- trim
- object_field_set:
object: item
field: address
- find:
path: div.gallery-img-frame
do:
- parse:
attr: data-url
- space_dedupe
- trim
- if:
match: \w+
do:
- normalize:
routine: url
- object_field_set:
object: item
field: image
joinby: "|"
- find:
path: div.item-view-seller-info div.seller-info-name
do:
- parse
- space_dedupe
- trim
- object_field_set:
object: item
field: seller
- find:
in: doc
path: script:contains('avito.item.phone')
do:
- static_get: url
- variable_set: referer
- parse:
filter: avito\.item\.phone\s*\=\s*'([^']+)'
- variable_set: key
- parse:
filter: avito\.item\.url\s*\=\s*'[^']+_(\d+)';
- variable_set: id
- eval:
routine: js
body: '(function (){var key = "<%key%>"; var id = "<%id%>"; var pre = key.match(/[\da-f]+/g); if (id % 2 == 0) {pre = pre.reverse();} var mixed = pre.join(""); var s = mixed.length; var r = ""; for (var k = 0; k < s; k++) {if (k%3 == 0) {r += mixed.substr(k, 1);}} return r; })();'
- variable_set: pkey
- sleep: 10
- walk:
to: https://www.avito.ru/items/phone/<%id%>?pkey=<%pkey%>
do:
- find:
path: image64
do:
- parse:
filter: data\:image\/png\;base64\,(.+)
- ocr:
do:
- text
- object_field_set:
object: item
field: phone
- object_save:
name: item
Пример данных, собранных парсером с сайта (номера телефонов замаскированы намеренно)
Ниже приведен пример датасета с несколькими товарами в формате JSON (для наглядности). Датасет может быть скачан и как CSV, XLSX, XML, и любой другой текстовый формат используя темплейтный подход.
[{
"item": {
"address": "",
"city": "Кострома",
"currency": "RUB",
"description": "Качественная куртка на девочку рост 152-156,очень хорошее состояние , ещё есть плащ,пальто,ветровки все вещи очень хорошего качества и состояния.Торг",
"image": "https://57.img.avito.st/640x480/3767143557.jpg|https://44.img.avito.st/640x480/3767143544.jpg|https://06.img.avito.st/640x480/3767143606.jpg",
"phone": "8 910 951-XX-XX",
"price": "1000",
"seller": "Владелец",
"title": "Куртка orbi",
"url": "https://www.avito.ru/kostroma/detskaya_odezhda_i_obuv/kurtka_orbi_1216046098"
}
}
,{
"item": {
"address": "р-н Центральный",
"city": "Кострома",
"currency": "RUB",
"description": "Очень теплый фирменный костюм. Современные непромокаемые ткани, утеплитель термофайбер, на замочке в самые сильные морозы пристегивается овечья жилеточка. Натуральная опушка енота. Атласная ткань очень красиво смотрится. Цвет куртки серебро.Размер 98+6(в наличии 2 шт) Есть в размере 92+, в сиреневом цвете и черно малиновом цвете. Смотрим мой профиль.",
"image": "https://94.img.avito.st/640x480/3937582594.jpg|https://11.img.avito.st/640x480/3991374611.jpg|https://81.img.avito.st/640x480/3991375181.jpg|https://34.img.avito.st/640x480/3991375634.jpg",
"phone": "8 953 643-XX-XX",
"price": "2900",
"seller": "Анна",
"title": "Новый фирменный зимний костюм 98(+6)",
"url": "https://www.avito.ru/kostroma/detskaya_odezhda_i_obuv/novyy_firmennyy_zimniy_kostyum_986_971178895"
}
}
,{
"item": {
"address": "р-н Заволжский",
"city": "Кострома",
"currency": "RUB",
"description": "Продам очень красивый комбинезон фирмы PULKA, спереди и сзади расшит жемчужными бусинами, на капюшоне мех кролика. Рост 86+6 зимний, очень тёплый. Носили не долго, очень быстро выросли, поэтому состояние нового. Стоил 10000 руб, отдаю значительно дешевле, могу переслать.",
"image": "https://77.img.avito.st/640x480/4000143977.jpg|https://89.img.avito.st/640x480/4000143989.jpg|https://50.img.avito.st/640x480/4000144650.jpg|https://90.img.avito.st/640x480/4000144890.jpg|https://28.img.avito.st/640x480/4000146328.jpg|https://18.img.avito.st/640x480/4005046218.jpg|https://48.img.avito.st/640x480/4005059848.jpg",
"phone": "8 953 644-XX-XX",
"price": "3500",
"seller": "Ирина",
"title": "Зимний комбинезон для девочки",
"url": "https://www.avito.ru/kostroma/detskaya_odezhda_i_obuv/zimniy_kombinezon_dlya_devochki_1179134523"
}
}
,{
"item": {
"address": "",
"city": "Кострома",
"currency": "RUB",
"description": "Новый шлем Ралли Цвет: Серый, размер 52-54",
"image": "https://08.img.avito.st/640x480/4072842008.jpg",
"phone": "8 953 653-XX-XX",
"price": "300",
"seller": "Светлана",
"title": "Новая шапка-шлем на мальчика",
"url": "https://www.avito.ru/kostroma/detskaya_odezhda_i_obuv/novaya_shapka-shlem_na_malchika_1161685106"
}
}]
он не скачивается, то есть компилируется, но загрузить его не удается, пробовал вначале в xlsx, затем в CSV
Для запуска парсера не нужно его компилировать, если вы хотите запустить его в облаке. Для того, чтобы скачать файл с данными нужно запускать диггер в активном режиме. В режиме отладки скачивание запрещено, доступен только просмотр. Более подробно с работой сайта можно ознакомиться здесь: Создаем диггер и работаем с ним
Он не парсит номера телефонов, как это можно исправить?
Для того, чтобы сайт показывал телефоны, запрос должен быть сделан с российского IP. Вам нужно использовать российский прокси.
В компилированном виде не дает телефоны (свои прокси прописаны — аж полсотни штук, и на облаке телефоны есть).
Не собирает title и price. Ни в облаке, ни компилированный. Проверял CSS запросы из сценария на страницах собранных в базу — все четко находится.
Для компилироаных сборок в пакете — файл настроек. Изменения в нём учитываются роботом? А то в документации не удалось найти ответа на этот вопрос.
По поводу title и price разберёмся и обновим статью в ближайшее время. Спасибо!
Да телефоны в скомпилированном диггере получить не получится т.к OCR работает только в облаке. Можно сохранять картинки с телефонами как base64.
Файл в сборке конфиг с которым был скомпилирован диггер, и никак не влияет на его работу.
Обновлено.
Не выдаёт телефоны, собирает всю информацию, а в файле результатов столбца «phone» просто нет.
Для того, чтобы сайт показывал телефоны, запрос должен быть сделан с российского IP. Вам нужно использовать российский прокси.
Михаил, именно российский прокси и использовал. Вот он: 109.173.7.85:8081
Этот прокси не работает в данный момент
Перепробовал несколько российских прокси серверов, ни с одним не получается собрать телефоны. Все данные, кроме телефона, собираются.
Завтра проверим, отпишу
Видимо Вы используете бесплатные или заблокированные прокси, с ними не получится нормально работать. Мы протестировали с заведомо хорошим прокси, телефоны забираются нормально, проблемы в логике парсера нет.
Ну и запускать парсер нужно в облаке, в скомпилированном парсере отсутствует доступ к OCR функционалу (поскольку это наш облачный микросервис), а потому телефоны извлекаться тоже не будут.
Помогите, пожалуйста. Скопировал сценарий, вставил ссылку на Авито с примененными фильтрами, вставил прокси, купленный на одном из сайтов (IPv4. приватный).
Должно работать, но выдает ошибку в логах: Proxy Authentication Required.
Я так понял, нужно где-то логин и пароль прокси-сервера ввести? Где это нужно сделать?
Если прокси требует авторизацию по паролю, прокси в конфиге надо указывать следующим образом:
user:pass@proxyip:port
где
user — логин для доступа к прокси
pass — пароль для доступа к прокси
proxyip — ip адрес прокси сервера
port — порт прокси сервера
Например: johndoe23:qwe123@1.1.1.1:3128
Михаил, Евгений, спасибо Вам большое. Теперь все работает отлично.
А можно ли использовать этот сценарий для парсинга Юлы? Или хотя бы адаптировать его каким-то образом для этого?
К сожалению для других доменов данный конфиг использовать не получится, только если писать новый с повторением структуры датасета.
Добрый день, указывайте прокси как username:password@1.1.1.1:8080.
Скажите, пожалуйста, а можно ли как-то парсить данные за определенный промежуток времени? Допустим я спарсил данные 21.09.18, на сегодня, 27.09.18, много новых товаров добавилось, но парсить все, что парсил до этого нет смысла повторно ради этого.
Да это возможно, у нас есть документация https://www.diggernaut.ru/dev/meta-yazyk-metody-navigatsiya-walk.html (раздел параметры, mode) где можно посмотреть как это сделать.
В данном примере нужно добавить в
спецальный режим:
здравствуйте.все настроил. ошибка вылетает: JSON Schema error: invalid character ‘-‘ in numeric literal
У Вас ошибка в валидационной JSON схеме. Скорее всего вставили конфиг диггера не в то окно редактора.
Запустил. настроил. все парсит, кроме телефонов. таких строк даже нет. пробовал разные российские прокси. проверил их на работоспособность. оказались рабочие. а телефоны не могу парсить
Проверили парсер с нашим прокси, все работает как надо. Проблема в Вашем прокси, возможно он заблокирован Авито. Если вы используете бесплатные публичные прокси, то такая ситуация весьма частая.
Свяжитесь с нами через форму поддержки, сообщите ID диггера, попробуем помочь.
Здравствуйте, Михаил. Парсить скрытые номера он умеет? А именно номера из резюме.
Добрый день, Ольга. Насколько я знаю, доступ до резюме в Авито платный, посему подразумевает авторизацию в Авито. Данный парсер предназначен только для сбора публично доступной информации, поэтому для резюме его использовать не получится, к сожалению.
Здравствуйте, есть ли возможность парсить только новые объявления? Чтобы он при включении, например, раз в неделю, собирал свежие посты и не трогал уже обработанные.
Возможно, нужно использовать команду walk в режиме unique. Для этого в основном парсере нужно найти строку 44:
и заменить на
А если используете парсер для мобильной версии то в строке 42:
меняем на
Но данный режим работает только при запуске парсера у нас в облаке.
Здравствуйте, а возможно ли сделать так, чтобы диггер парсил только новые объявления? Например, чтобы при включении раз-два в неделю, он игнорировал уже пройденные ссылки.
Прошу прощения за двойной пост — браузер почему-то не показывал, что сообщение было отправлено. Спасибо за помощь с проблемой.
А можно сделать чтоб парсил дату объявления?
Нужно найти CSS селектор для контейнера на странице в котором находится дата и использовать команду find по аналогии с другими такими же командами. Более подробно о мета-языке можно прочитать здесь
Здравствуйте .Такой вопрос мне нужен парсер Авито недвижимость ,есть ли возможность у вас создать мне парсер по моим пожеланиям.Конечно за плату.Мне до этого создали парсер ,ну почему то она не парсит.На мой вопрос он отвечает мол VPN блокирует.А ничего сделать он не может.И мне нужен именно компетентный в этом вопросе человек.
Добрый вечер, да это возможно. Вы можете заполнить форму запроса кастомного парсера и мы свяжемся с Вами по email, пришлем информацию по стоимости и срокам разработки. Постарайтесь максимально описать что именно Вы хотите забирать (какие поля), с какой страницы и тд.
Добрый день!
Сегодня воспользовался режимом unique. Первый запуск не дал результата — он спарсил все товары в категории. Второй запуск успешный — спарсил 9 новых товаров и остановился.
До этого последний раз парсер запускался две недели назад. Получается, с данными двухнедельной давности он уже не может сравнивать?
Добрый день, Дамир. Все правильно. Пока режим не включен, система не кэширует адреса страниц. Поэтому после включения режима первым запуском заберется все, а далее уже будут забираться только новые страницы.
Михаил, а если я теперь в следующий раз запущу парсер допустим через 2 недели, он вспомнит какие страницы уже забирал? Или кэш хранится только неделю?
Дамир, кэш хранится неограниченное количество времени. Поэтому можно смело запускать и через 2 недели и через 2 месяца.
Добрый день!
Недавно Авито добавил услугу «Бесплатная защита номера» в категории «Недвижимость» моего региона. Теперь парсер собирает «левые» номера. Есть ли какие-то способы борьбы с этим?
Добрый день, нет никакого способа получить реальный номер, т.к авито всегда будет предоставлять подменный(но насколько я понимаю стоит переадресация на реальный номер)
Добрый день!
Как установить еженедельное расписание запуска парсера? Когда пытаюсь это сделать, сверху на красном фоне пишет «Не удалось сохранить расписание».
Добрый день, про установку расписания можно прочитать в документации: Запуск по расписанию. Если Вы по прежнему не можете настроить расписание, свяжитесь с нами через онлайн чат или через онлайн систему поддержки
Очень удобный сервис, еще немного потестирую и ориентируюсь на тарифный план. Пока, конечно, перед этим вопросы остаются. Один из вопросов — представленный сценарий по парсингу с авито работает хорошо, но у меня вопрос — как сделать, чтобы парсилась еще и дата добавления (актуализации) объявления?
На следующей неделе добавим в парсер
Спасибо! И еще почему-то заметил, что переменные {{ }} не выводятся, когда настраиваешь шаблон XML, вместо них одни пробелы. Сами переменные берутся из образцов ваших же шаблонов (был где-то под YML для Я.М). В итоги пришлось на регулярных выражениях в notepad++ написать конвертер вашего xml в фид Я.Недвижимость.
Пожалуйста, помогите через удаленный доступ установить все вместе с конвертером на мой комп. Об оплате договоримся.
Спишитесь с нами через онлайн чат на сайте, попробуем помочь
Добрый день! Давно не проверял — добавили, получилось?
Вы про дату добавления?
Да
Сегодня обновили парсеры, добавили ряд полей: id, дату и статистику просмотров
Не сохраняет дату ни в одном из полей. По скрипту видно, что забирает, но сохранения нигде нет — ни xml, ни в других форматах, ни когда просто смотришь данные на странице диггеров.
Изменилась разметка на сайте, внесли изменения в конфиг диггера
Почему-то комментарий с вопросом в ветке про выход из беты удалили — задам тут. Парсер стал требовать лицензионной версии для распознавания номеров телефонов при парсинге с авито. Это теперь навсегда?
OCR функционал доступен только в платных аккаунтах. На беспплатном плане всегда есть возможность использовать вариант без OCR, а также всегда есть возможность скомпилировать диггер и запускать его локально абсолютно бесплатно.
Ага. Скомпилированный в w64 парсер формирует пул по страницам и потом вываливается в аут:
26T09:05:09.016115+04:00″}
{«level»:»info»,»msg»:»Iterating over pool of 697 links»,»time»:»2019-06-26T09:05:12.1562947+04:00″}
{«level»:»error»,»msg»:»Run time panic: runtime error: invalid memory address or nil pointer dereference»,»time»:»2019-06-26T09:05:12.1572947+04:00″}
Вы не можете использовать mode: unique когда компилируете диггер, т.к это работает только в облаке.
Добрый день, попробовал воспользоваться парсером для сбора номеров телефона с авито, но либо я что-то не допонял, либо руки у меня не из того места ростут. Делал все согласно инструкции, проксю добавлял РФ рабочую. Но не пойму где взять результат парсинга.При сохранении лога получаю следующмй результат:
«2019-07-28T18:51:41.569173 info Starting digger: Телефоныыы [7717]
2019-07-28T18:51:41.596350 info Using proxy: 95.47.183.23 :3128 (0/1)
2019-07-28T18:51:41.729444 info Starting scrape
2019-07-28T18:51:41.733158 info Iterating over pool of 1 links
2019-07-28T18:51:41.737207 info Retrieving page (GET): https://www.avito.ru/krasnodar/avtomobili
2019-07-28T18:51:45.995683 info Retrieving page (GET): https://www.avito.ru/krasnodar/avtomobili?p=2&radius=200
2019-07-28T18:51:49.941375 info Retrieving page (GET): https://www.avito.ru/krasnodar/avtomobili?p=3&radius=200
2019-07-28T18:51:53.873019 info Retrieving page (GET): https://www.avito.ru/krasnodar/avtomobili?p=4&radius=200
2019-07-28T18:51:57.806079 info Retrieving page (GET): https://www.avito.ru/krasnodar/avtomobili?p=5&radius=200
2019-07-28T18:52:01.742113 info Retrieving page (GET): https://www.avito.ru/krasnodar/avtomobili?p=6&radius=200»
И так далее, а где посмотреть информацию которую я парсил, что-то не нашел в инструкции.
Спасибо за ответ.
Добрый день, эта (https://www.diggernaut.ru/dev/vebsayt-proekty-zapusk-diggera.html) страница документации должна помочь.
Спасибо за ответ, но я эту статью читал перед началом использования. У меня после остановке диггера и при нажатии кнопки «показать данные» вот что показывается:
https://i.imgur.com/OOqiWX2.png
Вы используете обычную (не мобильную) версию? В таком случае Вам нужно дождаться когда диггер закончит сбор ссылок на товары и начнет ходить уже на сами товары. Пагинатор на авито лимитирован 100 страницами, так что бы увидеть какие-то результаты нужно подождать дольше(110-120 запросов), либо выбрать категорию поменьше.
Парсер сначала проходит по всем страницам каталога и собирает линки на объявления, и только после этого начинает собирать объявления. Вы останавливаете диггер до того как начинают собираться сами объявления, поэтому в данных ничего нет. Нужно подождать пока диггер сделает более 100 запросов, после чего уже можно будет смотреть данные
Тема Рулит
У вас не пасит если стоит общая категория у которой 2 ступени под категории. Работает если одна ступень под категории.
Можете сделать чтобы парсило категорию объявления?
Вы можете изменить логику работы парсера самостоятельно, либо нанять наших специалистов, заполнив эту форму
Можно ли спарсить объявления только одного выбранного магазина?
Для этого придется менять конфиг, поскольку разметка на страницах магазина другая
Мобильный парсер не работает :((((
Все должно работать, удостоверьтесь что страница со статьей в Вашем браузере обновлена. Дата изменения должна быть 17.09.2018.
Перестал парситься телефон в мобильной версии. У всех так?
21 сентября еще точно всё работало
Сегодня попробуем починить, но будет дополнительно один запрос на каждое объявление. Телефон теперь забирается отдельным запросом.
Парсер в статье обновлен до актуальной версии
Спасибо большое! А есть ли возможность парсером еще и координаты забирать? Это очень нужно многим, заранее спасибо!
Возможность такая есть, но геокодинг доступен только в облаке, в скомпилированных парсерах это работать не будет.
Не вижу в коде парсера парсинга координат, парсинг основной версии сайта в облаке вернет мне координаты, или нужно дополнительно что-то делать?
Парсеры основной и мобильной версии не парсят координаты в настоящий момент, попробуем добавить на этой неделе, следите за обновлениями статьи
Как оказалось, функция парсинга координат уже давно готова, забыли обновить статью, статья обновлена. В парсер мобильной версии добавлены гео координаты.
Добрый день! Купил прокси, запустил парсер в облаке, но номера собирать он отказался. Как я понял, в бесплатной версии номера теперь можно собрать только через парсер мобильной версии. Но в мобильной версии парсера не нашел где указать свой прокси. Или для мобильной версии прокси не трубется?
И еще хотелось бы уточнить, могу ли я использовать mode: unique в парсере мобильной версии сайта?
В мобильной прокси не требуется, mode: unique использовать можно в любой версии
Добрый день.
Пробую спарсить авито, но по какой-то причине парсинг вообще не идёт. Пробовал и копировать сценарий отсюда, заменяя категорию поиска, как показано. Пробовал импортировать встроенный сценарий авито. Пробовал и с прокси и без. Результат нулевой. Скрин http://joxi.ru/Drl4nGhVxQnkrP
Приходите к нам в онлайн чат, попробуем помочь
Мобильную версию совем закрыли? Как давно?
Мобильная версия должна работать, планируем убрать обычную, в ней по большому счету нет смысла.
Большое спасибо и номера выгрузились. Отличная вещь!
Добрый день. В мобильной версии парсера в строке 31 добавил mode: unique, но парсер все равно собирает все данные заново. Подскажите, пожалуйста, в чем моя ошибка?
Добрый день, Дамир. Вы поставили режим unique не в ту команду walk. Смотрите 138 строку.
Добрый день. Мобильный парсер не запускается последние 2 дня, не может получить ключ (key). Не подскажите в чем дело?
Добрый день, только что проверили, все работает. Проверьте Ваш конфиг, возможно он отличается от нашего.
Добрый день. Несколько дней назад перестал работать мобильный парсер. Заметил, что key странно выглядит:
Retrieving page (GET): https://m.avito.ru/api/9/items?key=redesign_mavaf0deccbgcgidddjgnvljitntccdduijhdinfgjgfjir&categoryId=24&cd=1&locationId=646600¶ms%5B1460%5D=16180¶ms%5B201%5D=1060¶ms%5B504%5D=5256&pmax=60000&pmin=40000&page=1&lastStamp=1589276520&display=list&limit=30
Соответственно парсер не запускается. После попытки получения данной страницы сообщение «Scrape is done»
Попробовал вручную убрать «redesign_mav» и перейти по ссылке — данные увидел. Не подскажите, что это за приставка к ключу появилась?
Добрый день, используйте свежую версию из каталога (ссылка вначале статьи). Проблема именно в redesign_mav. Регексп стал захватывать лишнее.
Спасибо большое, всё заработало. Увидел изменения в regexp, добавил их в свой диггер, всё отлично, еще раз спасибо.
Но из каталога использовать напрямую диггер не очень удобно, мне нужно не просто парсить раздел, а получать исключительно частные объявления, в своём диггере я это сделал. Также у меня немного другие временные интервалы в циклах, чтоб парсер работал быстрее.
Добрый день
Опять regexp захватывает лишнее (диггер из каталога). В key попадает «INPUT»
Сегодня исправили в каталоге, давно загружали конфигурацию?
Сегодня утром загружал, только что попробовал сделать импорт из каталога, тоже самое.
Оказалось, только вечером проапдейтили репозиторий, прошу прощения за дезинформацтю. Сейчас в каталоге свежая версия.
Добрый день. Только что загрузил, сценарий остался прежним, не работает
Извиняюсь. Сравнил код парсинга ключа, изменения есть. Диггер не сработал на вашем ресурсе, а вот скомпилированная версия работает.
Самое интересное, что я сам эти же изменения сделал, но не компилировал, а запустил на сайте, у меня не работало, решил, что не только в них дело. Когда вы залили новую версию, у меня также на сайте не отработал диггер. Но я увидел изменения, решил попробовать скомпилировать, и всё пошло. Спасибо большое, в следующий раз буду сразу пытаться компилировать в том числе
Разницы быть не должно в облаке запускается парсер или нет, я только что загрузил из каталога и запустил, все работает:
Добрый день
С воскресенья парсер перестал правильно работать с категориями (версия из каталога). Выдержка из лога:
{«level»:»info»,»msg»:»Retrieving page (GET): https://m.avito.ru/samara/kvartiry/sdam/na_dlitelnyy_srok«,»time»:»2020-06-22T16:30:39.4840121+03:00″}
Далее выполняются скрипты
{«level»:»info»,»msg»:»Retrieving page (GET): https://m.avito.ru/api/9/items?key=af0deccbgcgidddjgnvljitntccdduijhdinfgjgfjir\u0026page=1\u0026lastStamp=\u0026display=list\u0026limit=30″,»time»:»2020-06-22T16:30:41.3126167+03:00″}
{«level»:»info»,»msg»:»Retrieving page (GET): https://m.avito.ru/moskva/oborudovanie_dlya_biznesa/masochnyy_stanok_v_nalichii._sdelano_v_rossii_1929506164«,»time»:»2020-06-22T16:30:44.7079305+03:00″}
Как видно парсер не подставляет id категории в ссылку, и выгружает объявления совсем из других категорий
Добрый день, сегодня исправим, выложим в каталог
Добрый день.
Импортировал из каталога, ошибки парсинга категорий
{«level»:»info»,»msg»:»Retrieving page (GET): https://www.avito.st/mstatic/build/main.8d617ae2cdf2e.js«,»time»:»2020-07-10T13:53:31.7824941+03:00″}
{«level»:»error»,»msg»:»Eval error: SyntaxError: invalid character ‘%!'(MISSING) looking for beginning of value»,»time»:»2020-07-10T13:53:32.1306515+03:00″}
{«level»:»error»,»msg»:»Cannot parse JSON: invalid character ‘u’ looking for beginning of value»,»time»:»2020-07-10T13:53:32.1345329+03:00″}
{«level»:»info»,»msg»:»Retrieving page (GET): https://m.avito.ru/api/9/items?key=af0deccbgcgidddjgnvljitntccdduijhdinfgjgfjir\u0026page=1\u0026lastStamp=\u0026display=list\u0026limit=30\u0026owner[]=private»,»time»:»2020-07-10T13:53:32.1375249+03:00″}
{«level»:»info»,»msg»:»Retrieving page (GET): https://m.avito.ru/sankt-peterburg/predlozheniya_uslug/razvozka_sotrudnikov_arenda_mikroavtobusa_542976260«,»time»:»2020-07-10T13:53:34.5506372+03:00″}
{«level»:»error»,»msg»:»Eval error: SyntaxError: invalid character ‘%!'(MISSING) looking for beginning of value»,»time»:»2020-07-10T13:53:36.9470897+03:00″}
{«level»:»error»,»msg»:»Cannot parse JSON: invalid character ‘u’ looking for beginning of value»,»time»:»2020-07-10T13:53:36.9500816+03:00″}
Внесли изменения в парсер, можно забрать из каталога
Спасибо, всё работает
Решил попробовать данную тему. И… просто убил час времени. С проксями/без, мобильную версию, обычную — ничего не получается(
То bad request, то ещё чего.
Вот последний лог например. Вот в чём дело? Парсер вписал в сценарий. Парсер проверил — рабочий. Что ему надо?
2020-08-20 18:13:40:512 error No key found, probably proxy is banned, retrying Копия
2020-08-20 18:13:40:508 error Cannot open URL: Get «https://www.avito.ru/moskva_i_mo/noutbuki»: Not Found Копия
2020-08-20 18:13:23:098 info Retrieving page (GET): https://www.avito.ru/moskva_i_mo/noutbuki Копия
2020-08-20 18:13:23:085 info Iterating over pool of 1 links Копия
2020-08-20 18:13:23:058 info Starting scrape Копия
2020-08-20 18:13:22:960 info Using proxy: 202.90.198.1:8080 (0/1) Копия
2020-08-20 18:13:22:926 info Starting digger: avito.ru [17018]
Нужно использовать хорошие, коммерческие прокси и обязательно самую последнюю версию парсера из каталога
Не работает. Ввел данные из примера, скрипт быстро завершился и результатов 0.
На бесплатном плане нужно использовать свои прокси
Добрый день.
А что случилось с авторизацией на сайте? Ссылка Login переадресовывает на страницу 404. Не могу авторизоваться и отредактировать свои диггеры.
p.s. перестал работать парсер мобильной версии на локальном ПК
{«level»:»info»,»msg»:»Starting scrape»,»time»:»2020-10-07T17:51:14.3637437+03:00″}
{«level»:»info»,»msg»:»Iterating over pool of 1 links»,»time»:»2020-10-07T17:51:14.3657329+03:00″}
{«level»:»info»,»msg»:»Retrieving page (GET): https://avito.ru/samara/kvartiry/sdam/na_dlitelnyy_srok«,»time»:»2020-10-07T17:51:14.3657329+03:00″}
{«level»:»error»,»msg»:»No key found, probably proxy is banned, retrying»,»time»:»2020-10-07T17:51:14.9805161+03:00″}
{«level»:»info»,»msg»:»Scrape is done»,»time»:»2020-10-07T17:51:14.9814683+03:00″}
По авторизации, лучше обратиться в поддержку: на сайте заполнить форму поддержки или обратиться в чат. По Авито, да. Произошел ряд изменений, парсер в каталоге уже обновлен до актуальной версии.
Добрый день.
Авторизация сегодня успешно заработала, код из каталога забрал.
Запускаю локально скомпилированный диггер, такая проблема: после 20-30 распарсенных объявлений сообщение «Page changed layout or proxy is banned». Переключаюсь на другого провайдера, запускаю, и опять тоже самое после 20-30 объявлений.
Задержка между парсингом стоит 3 секунды (как в каталоге).
Что можете посоветовать?
{«level»:»info»,»msg»:»Retrieving page (GET): https://m.avito.ru/samara/kvartiry/1-k_kvartira_36_m_1516_et._2039947878«,»time»:»2020-10-13T17:00:58.9729388+03:00″}
{«level»:»info»,»msg»:»Retrieving page (GET): https://m.avito.ru/api/1/items/2039947878/phone?key=af0deccbgcgidddjgnvljitntccdduijhdinfgjgfjir«,»time»:»2020-10-13T17:01:02.6339823+03:00″}
{«level»:»info»,»msg»:»Retrieving page (GET): https://m.avito.ru/samara/kvartiry/1-k_kvartira_46_m_1117_et._1996206862«,»time»:»2020-10-13T17:01:02.7773102+03:00″}
{«level»:»info»,»msg»:»Retrieving page (GET): https://m.avito.ru/api/1/items/1996206862/phone?key=af0deccbgcgidddjgnvljitntccdduijhdinfgjgfjir«,»time»:»2020-10-13T17:01:06.0884762+03:00″}
{«level»:»info»,»msg»:»Retrieving page (GET): https://m.avito.ru/samara/kvartiry/1-k_kvartira_32_m_35_et._1997591466«,»time»:»2020-10-13T17:01:06.316937+03:00″}
{«level»:»info»,»msg»:»Retrieving page (GET): https://m.avito.ru/api/1/items/1997591466/phone?key=af0deccbgcgidddjgnvljitntccdduijhdinfgjgfjir«,»time»:»2020-10-13T17:01:10.0414722+03:00″}
{«level»:»info»,»msg»:»Retrieving page (GET): https://m.avito.ru/samara/kvartiry/2-k_kvartira_48_m_15_et._2004209976«,»time»:»2020-10-13T17:01:10.1471114+03:00″}
{«level»:»error»,»msg»:»Page changed layout or proxy is banned, retrying»,»time»:»2020-10-13T17:01:13.2487656+03:00″}
{«level»:»info»,»msg»:»Retrieving page (GET): https://m.avito.ru/samara/kvartiry/2-k_kvartira_48_m_15_et._2004209976«,»time»:»2020-10-13T17:01:13.2487656+03:00″}
{«level»:»error»,»msg»:»Page changed layout or proxy is banned, retrying»,»time»:»2020-10-13T17:01:16.4064011+03:00″}
{«level»:»info»,»msg»:»Retrieving page (GET): https://m.avito.ru/samara/kvartiry/2-k_kvartira_48_m_15_et._2004209976«,»time»:»2020-10-13T17:01:16.4064011+03:00″}
{«level»:»error»,»msg»:»Page changed layout or proxy is banned, retrying»,»time»:»2020-10-13T17:01:19.9861663+03:00″}
Можно попробовать увеличить паузы или использовать пул прокси с опцией -p при запуске.
Подскажите парсер все еще работает?, у меня скомпилированный ничего не собирает.
Все должно работать, но нужно использовать свежий парсер из каталога. Также для компиляции потребуется внести изменения для заполнения пула, поскольку парсер из каталога использует пул ссылок из пользовательского Diggernaut аккаунта, а компилированные диггеры не имеют связи с нашим сервером.