Михаил Сисин Со-основатель облачного сервиса по сбору информации и парсингу сайтов Diggernaut. Работает в области сбора и анализа данных, а также разработки систем искусственного интеллекта и машинного обучения  более десяти лет.

Бесплатный парсер Авито поможет вам собрать информацию о товарах

Бесплатный парсер Авито поможет вам собрать информацию о товарах

Если вы просто ищете парсер Авито и не хотите научиться писать парсеры самостоятельно, вы можете просто загрузить готовый парсер AVITO.RU в ваш аккаунт на платформе Diggernaut из нашего каталога бесплатных парсеров

Представленный здесь парсер авито поможет вам собрать информацию и товарах из объявлений в системе Avito.ru. Авито является одной из самых популярных в России досок объявлений частных лиц, на которой представлены десятки миллионов товаров. С помощью этого парсера вы сможете забрать информацию о товарах, представленных в заданной категории, а также, если вы будете использовать собственный российский прокси — контактную информацию продавца.

обновление парсеров 15.11.2019 в связи с изменением некоторых селекторов на сайте

Небольшое дополнение. Основной парсер в данной статье парсит обычную версию сайта. В обычной версии сайта телефоны показываются как изображения, а потому требуют специальный OCR функционал, который есть у нас в облаке, но отсутствует в скомпилированной версии. Поэтому запуск парсера вне нашего облака был ранее практически невозможен (была возможность сбора данных без контактных телефонов). Теперь мы представляем вам также парсер для мобильной версии сайта. Этот парсер не требует OCR, и вы сможете использовать скомпилированную версию парсера у себя на компьютере или сервере.

Примерное количество товаров: в зависимости от категории от нескольких сотен до нескольких миллионов
Примерное количество запросов: в зависимости от категории от нескольких сотен до нескольких миллионов
Рекомендуемый план подписки: в зависимости от категории от Free до XX-Large

ВНИМАНИЕ! Количество запросов может превышать количество товаров, потому что данные о вариациях, изображениях и др. могут парсится используя запросы к дополнительным ресурсам. Также часть данных о товаре может доставляться с помощью XHR запросов, что также увеличивает общее количество необходимых запросов.

Как пользоваться парсером объявлений авито

Для использования парсера информации с сайта Авито вы должны иметь учетную запись в нашем сервисе Diggernaut.

  1. Пройдите по этой ссылке для регистрации в сервисе Diggernaut
  2. После регистрации и подтверждения email адреса войдите в свою учетную запись
  3. Создайте проект с любый именем и описанием, если вы не знаете как, обратитесь к нашей документации
  4. Войдите во вновь созданный проект и создайте в нем диггер с любым именем, если вы не знаете как, обратитесь к нашей документации
  5. Скопируйте в буфер обмена приведенный ниже сценарий диггера и вставьте его в созданный вами диггер, если вы не знаете как, обратитесь к нашей документации
  6. ВНИМАНИЕ! Базовые прокси сервера не позволят вам собирать контактную информацию продавцов если вы используете парсер для обычной версии сайта. Для этого вам будет нужен собственный российский прокси-сервер. Тип прокси должен быть HTTP/HTTPS (SOCKS4/5 в данный момент не поддерживаются). Вы должны будете прописать ваш прокси сервер в сценарии, как указано. Если этот пункт вам непонятен и вы затрудняетесь как это сделать, свяжитесь с нами через систему поддержки или используя наш онлайн чат, мы обязательно вам поможем. Обратите внимание что символа # не должно быть в строке с вашим прокси, очень многие делают ошибку, оставляя символ решетки перед своим прокси. Другими словами в строке с вашим прокси должно быть не:
    proxy: #1.1.1.1:8888

а

    proxy: 1.1.1.1:8888

Естественно вы должны использовать IP, порт (и возможно логин и пароль для прокси) именно вашего прокси, а не примера данного в этой статье. Для парсера мобильной версии сайта российский прокси не требуется.

  1. При необходимости, в 10 строке сценария поставьте URL категории, которую вы хотите парсить, то есть замените категорию, которая стоит сейчас, нужной вам.
  2. Переключите режим работы диггера с Debug на Active, если вы не знаете как, обратитесь к нашей документации
  3. Запустите ваш диггер и дождитесь окончания его работы, если вы не знаете как, обратитесь к нашей документации
  4. Скачайте собранный набор данных в нужном вам формате, если вы не знаете как, обратитесь к нашей документации

В дальнейшем вы можете установить расписание для запуска вашего парсера и забирать информацию регулярно. Также вы можете скомпилировать ваш диггер для запуска его на вашем компьютере или сервер, для получения дополнительной информации, обратитесь к документации.

Сценарий парсера мобильного сайта 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"
    }
}]
Михаил Сисин Со-основатель облачного сервиса по сбору информации и парсингу сайтов Diggernaut. Работает в области сбора и анализа данных, а также разработки систем искусственного интеллекта и машинного обучения  более десяти лет.

118 Replies to “Бесплатный парсер Авито поможет вам собрать информацию о…”

  1. он не скачивается, то есть компилируется, но загрузить его не удается, пробовал вначале в xlsx, затем в CSV

    1. Для запуска парсера не нужно его компилировать, если вы хотите запустить его в облаке. Для того, чтобы скачать файл с данными нужно запускать диггер в активном режиме. В режиме отладки скачивание запрещено, доступен только просмотр. Более подробно с работой сайта можно ознакомиться здесь: Создаем диггер и работаем с ним

    1. Для того, чтобы сайт показывал телефоны, запрос должен быть сделан с российского IP. Вам нужно использовать российский прокси.

  2. В компилированном виде не дает телефоны (свои прокси прописаны — аж полсотни штук, и на облаке телефоны есть).
    Не собирает title и price. Ни в облаке, ни компилированный. Проверял CSS запросы из сценария на страницах собранных в базу — все четко находится.
    Для компилироаных сборок в пакете — файл настроек. Изменения в нём учитываются роботом? А то в документации не удалось найти ответа на этот вопрос.

    1. По поводу title и price разберёмся и обновим статью в ближайшее время. Спасибо!

      Да телефоны в скомпилированном диггере получить не получится т.к OCR работает только в облаке. Можно сохранять картинки с телефонами как base64.

      Файл в сборке конфиг с которым был скомпилирован диггер, и никак не влияет на его работу.

  3. Не выдаёт телефоны, собирает всю информацию, а в файле результатов столбца «phone» просто нет.

    1. Для того, чтобы сайт показывал телефоны, запрос должен быть сделан с российского IP. Вам нужно использовать российский прокси.

  4. Перепробовал несколько российских прокси серверов, ни с одним не получается собрать телефоны. Все данные, кроме телефона, собираются.

    1. Видимо Вы используете бесплатные или заблокированные прокси, с ними не получится нормально работать. Мы протестировали с заведомо хорошим прокси, телефоны забираются нормально, проблемы в логике парсера нет.

    2. Ну и запускать парсер нужно в облаке, в скомпилированном парсере отсутствует доступ к OCR функционалу (поскольку это наш облачный микросервис), а потому телефоны извлекаться тоже не будут.

  5. Помогите, пожалуйста. Скопировал сценарий, вставил ссылку на Авито с примененными фильтрами, вставил прокси, купленный на одном из сайтов (IPv4. приватный).
    Должно работать, но выдает ошибку в логах: Proxy Authentication Required.
    Я так понял, нужно где-то логин и пароль прокси-сервера ввести? Где это нужно сделать?

    1. Если прокси требует авторизацию по паролю, прокси в конфиге надо указывать следующим образом:
      user:pass@proxyip:port
      где
      user — логин для доступа к прокси
      pass — пароль для доступа к прокси
      proxyip — ip адрес прокси сервера
      port — порт прокси сервера

      Например: johndoe23:qwe123@1.1.1.1:3128

      1. Михаил, Евгений, спасибо Вам большое. Теперь все работает отлично.
        А можно ли использовать этот сценарий для парсинга Юлы? Или хотя бы адаптировать его каким-то образом для этого?

        1. К сожалению для других доменов данный конфиг использовать не получится, только если писать новый с повторением структуры датасета.

  6. Скажите, пожалуйста, а можно ли как-то парсить данные за определенный промежуток времени? Допустим я спарсил данные 21.09.18, на сегодня, 27.09.18, много новых товаров добавилось, но парсить все, что парсил до этого нет смысла повторно ради этого.

    1. Да это возможно, у нас есть документация https://www.diggernaut.ru/dev/meta-yazyk-metody-navigatsiya-walk.html (раздел параметры, mode) где можно посмотреть как это сделать.
      В данном примере нужно добавить в

      - walk:
          to: links
          pool: pages
          do:
      

      спецальный режим:

      - walk:
          to: links
          pool: pages
          mode: unique
          do:
      
  7. здравствуйте.все настроил. ошибка вылетает: JSON Schema error: invalid character ‘-‘ in numeric literal

    1. У Вас ошибка в валидационной JSON схеме. Скорее всего вставили конфиг диггера не в то окно редактора.

  8. Запустил. настроил. все парсит, кроме телефонов. таких строк даже нет. пробовал разные российские прокси. проверил их на работоспособность. оказались рабочие. а телефоны не могу парсить

    1. Проверили парсер с нашим прокси, все работает как надо. Проблема в Вашем прокси, возможно он заблокирован Авито. Если вы используете бесплатные публичные прокси, то такая ситуация весьма частая.

    2. Свяжитесь с нами через форму поддержки, сообщите ID диггера, попробуем помочь.

  9. Здравствуйте, Михаил. Парсить скрытые номера он умеет? А именно номера из резюме.

    1. Добрый день, Ольга. Насколько я знаю, доступ до резюме в Авито платный, посему подразумевает авторизацию в Авито. Данный парсер предназначен только для сбора публично доступной информации, поэтому для резюме его использовать не получится, к сожалению.

  10. Здравствуйте, есть ли возможность парсить только новые объявления? Чтобы он при включении, например, раз в неделю, собирал свежие посты и не трогал уже обработанные.

    1. Возможно, нужно использовать команду walk в режиме unique. Для этого в основном парсере нужно найти строку 44:

      - walk:
          to: links
          pool: pages
          do:
      

      и заменить на

      - walk:
          to: links
          mode: unique
          pool: pages
          do:
      

      А если используете парсер для мобильной версии то в строке 42:

                  - walk:
                      to: value
                      do:
      

      меняем на

                  - walk:
                      to: value
                      mode: unique
                      do:
      

      Но данный режим работает только при запуске парсера у нас в облаке.

  11. Здравствуйте, а возможно ли сделать так, чтобы диггер парсил только новые объявления? Например, чтобы при включении раз-два в неделю, он игнорировал уже пройденные ссылки.

    1. Прошу прощения за двойной пост — браузер почему-то не показывал, что сообщение было отправлено. Спасибо за помощь с проблемой.

    1. Нужно найти CSS селектор для контейнера на странице в котором находится дата и использовать команду find по аналогии с другими такими же командами. Более подробно о мета-языке можно прочитать здесь

  12. Здравствуйте .Такой вопрос мне нужен парсер Авито недвижимость ,есть ли возможность у вас создать мне парсер по моим пожеланиям.Конечно за плату.Мне до этого создали парсер ,ну почему то она не парсит.На мой вопрос он отвечает мол VPN блокирует.А ничего сделать он не может.И мне нужен именно компетентный в этом вопросе человек.

    1. Добрый вечер, да это возможно. Вы можете заполнить форму запроса кастомного парсера и мы свяжемся с Вами по email, пришлем информацию по стоимости и срокам разработки. Постарайтесь максимально описать что именно Вы хотите забирать (какие поля), с какой страницы и тд.

  13. Добрый день!
    Сегодня воспользовался режимом unique. Первый запуск не дал результата — он спарсил все товары в категории. Второй запуск успешный — спарсил 9 новых товаров и остановился.
    До этого последний раз парсер запускался две недели назад. Получается, с данными двухнедельной давности он уже не может сравнивать?

    1. Добрый день, Дамир. Все правильно. Пока режим не включен, система не кэширует адреса страниц. Поэтому после включения режима первым запуском заберется все, а далее уже будут забираться только новые страницы.

      1. Михаил, а если я теперь в следующий раз запущу парсер допустим через 2 недели, он вспомнит какие страницы уже забирал? Или кэш хранится только неделю?

        1. Дамир, кэш хранится неограниченное количество времени. Поэтому можно смело запускать и через 2 недели и через 2 месяца.

  14. Добрый день!
    Недавно Авито добавил услугу «Бесплатная защита номера» в категории «Недвижимость» моего региона. Теперь парсер собирает «левые» номера. Есть ли какие-то способы борьбы с этим?

    1. Добрый день, нет никакого способа получить реальный номер, т.к авито всегда будет предоставлять подменный(но насколько я понимаю стоит переадресация на реальный номер)

  15. Добрый день!
    Как установить еженедельное расписание запуска парсера? Когда пытаюсь это сделать, сверху на красном фоне пишет «Не удалось сохранить расписание».

  16. Очень удобный сервис, еще немного потестирую и ориентируюсь на тарифный план. Пока, конечно, перед этим вопросы остаются. Один из вопросов — представленный сценарий по парсингу с авито работает хорошо, но у меня вопрос — как сделать, чтобы парсилась еще и дата добавления (актуализации) объявления?

      1. Спасибо! И еще почему-то заметил, что переменные {{ }} не выводятся, когда настраиваешь шаблон XML, вместо них одни пробелы. Сами переменные берутся из образцов ваших же шаблонов (был где-то под YML для Я.М). В итоги пришлось на регулярных выражениях в notepad++ написать конвертер вашего xml в фид Я.Недвижимость.

        1. Пожалуйста, помогите через удаленный доступ установить все вместе с конвертером на мой комп. Об оплате договоримся.

          1. Спишитесь с нами через онлайн чат на сайте, попробуем помочь

          1. Сегодня обновили парсеры, добавили ряд полей: id, дату и статистику просмотров

          2. Не сохраняет дату ни в одном из полей. По скрипту видно, что забирает, но сохранения нигде нет — ни xml, ни в других форматах, ни когда просто смотришь данные на странице диггеров.

          3. Изменилась разметка на сайте, внесли изменения в конфиг диггера

  17. Почему-то комментарий с вопросом в ветке про выход из беты удалили — задам тут. Парсер стал требовать лицензионной версии для распознавания номеров телефонов при парсинге с авито. Это теперь навсегда?

    1. OCR функционал доступен только в платных аккаунтах. На беспплатном плане всегда есть возможность использовать вариант без OCR, а также всегда есть возможность скомпилировать диггер и запускать его локально абсолютно бесплатно.

      1. Ага. Скомпилированный в 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″}

  18. Добрый день, попробовал воспользоваться парсером для сбора номеров телефона с авито, но либо я что-то не допонял, либо руки у меня не из того места ростут. Делал все согласно инструкции, проксю добавлял РФ рабочую. Но не пойму где взять результат парсинга.При сохранении лога получаю следующмй результат:
    «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»
    И так далее, а где посмотреть информацию которую я парсил, что-то не нашел в инструкции.
    Спасибо за ответ.

      1. Спасибо за ответ, но я эту статью читал перед началом использования. У меня после остановке диггера и при нажатии кнопки «показать данные» вот что показывается:
        https://i.imgur.com/OOqiWX2.png

        1. Вы используете обычную (не мобильную) версию? В таком случае Вам нужно дождаться когда диггер закончит сбор ссылок на товары и начнет ходить уже на сами товары. Пагинатор на авито лимитирован 100 страницами, так что бы увидеть какие-то результаты нужно подождать дольше(110-120 запросов), либо выбрать категорию поменьше.

        2. Парсер сначала проходит по всем страницам каталога и собирает линки на объявления, и только после этого начинает собирать объявления. Вы останавливаете диггер до того как начинают собираться сами объявления, поэтому в данных ничего нет. Нужно подождать пока диггер сделает более 100 запросов, после чего уже можно будет смотреть данные

  19. У вас не пасит если стоит общая категория у которой 2 ступени под категории. Работает если одна ступень под категории.
    Можете сделать чтобы парсило категорию объявления?

    1. Для этого придется менять конфиг, поскольку разметка на страницах магазина другая

    1. Все должно работать, удостоверьтесь что страница со статьей в Вашем браузере обновлена. Дата изменения должна быть 17.09.2018.

    1. Сегодня попробуем починить, но будет дополнительно один запрос на каждое объявление. Телефон теперь забирается отдельным запросом.

      1. Спасибо большое! А есть ли возможность парсером еще и координаты забирать? Это очень нужно многим, заранее спасибо!

        1. Возможность такая есть, но геокодинг доступен только в облаке, в скомпилированных парсерах это работать не будет.

          1. Не вижу в коде парсера парсинга координат, парсинг основной версии сайта в облаке вернет мне координаты, или нужно дополнительно что-то делать?

          2. Парсеры основной и мобильной версии не парсят координаты в настоящий момент, попробуем добавить на этой неделе, следите за обновлениями статьи

          3. Как оказалось, функция парсинга координат уже давно готова, забыли обновить статью, статья обновлена. В парсер мобильной версии добавлены гео координаты.

  20. Добрый день! Купил прокси, запустил парсер в облаке, но номера собирать он отказался. Как я понял, в бесплатной версии номера теперь можно собрать только через парсер мобильной версии. Но в мобильной версии парсера не нашел где указать свой прокси. Или для мобильной версии прокси не трубется?

    1. И еще хотелось бы уточнить, могу ли я использовать mode: unique в парсере мобильной версии сайта?

    2. В мобильной прокси не требуется, mode: unique использовать можно в любой версии

  21. Добрый день.
    Пробую спарсить авито, но по какой-то причине парсинг вообще не идёт. Пробовал и копировать сценарий отсюда, заменяя категорию поиска, как показано. Пробовал импортировать встроенный сценарий авито. Пробовал и с прокси и без. Результат нулевой. Скрин http://joxi.ru/Drl4nGhVxQnkrP

    1. Мобильная версия должна работать, планируем убрать обычную, в ней по большому счету нет смысла.

  22. Добрый день. В мобильной версии парсера в строке 31 добавил mode: unique, но парсер все равно собирает все данные заново. Подскажите, пожалуйста, в чем моя ошибка?

    1. Добрый день, Дамир. Вы поставили режим unique не в ту команду walk. Смотрите 138 строку.

  23. Добрый день. Мобильный парсер не запускается последние 2 дня, не может получить ключ (key). Не подскажите в чем дело?

    1. Добрый день, только что проверили, все работает. Проверьте Ваш конфиг, возможно он отличается от нашего.

  24. Добрый день. Несколько дней назад перестал работать мобильный парсер. Заметил, что key странно выглядит:

    Retrieving page (GET): https://m.avito.ru/api/9/items?key=redesign_mavaf0deccbgcgidddjgnvljitntccdduijhdinfgjgfjir&categoryId=24&cd=1&locationId=646600&params%5B1460%5D=16180&params%5B201%5D=1060&params%5B504%5D=5256&pmax=60000&pmin=40000&page=1&lastStamp=1589276520&display=list&limit=30

    Соответственно парсер не запускается. После попытки получения данной страницы сообщение «Scrape is done»

    Попробовал вручную убрать «redesign_mav» и перейти по ссылке — данные увидел. Не подскажите, что это за приставка к ключу появилась?

    1. Добрый день, используйте свежую версию из каталога (ссылка вначале статьи). Проблема именно в redesign_mav. Регексп стал захватывать лишнее.

  25. Спасибо большое, всё заработало. Увидел изменения в regexp, добавил их в свой диггер, всё отлично, еще раз спасибо.

    Но из каталога использовать напрямую диггер не очень удобно, мне нужно не просто парсить раздел, а получать исключительно частные объявления, в своём диггере я это сделал. Также у меня немного другие временные интервалы в циклах, чтоб парсер работал быстрее.

  26. Добрый день
    Опять regexp захватывает лишнее (диггер из каталога). В key попадает «INPUT»

    1. Сегодня исправили в каталоге, давно загружали конфигурацию?

      1. Сегодня утром загружал, только что попробовал сделать импорт из каталога, тоже самое.

        1. Оказалось, только вечером проапдейтили репозиторий, прошу прощения за дезинформацтю. Сейчас в каталоге свежая версия.

          1. Добрый день. Только что загрузил, сценарий остался прежним, не работает

          2. Извиняюсь. Сравнил код парсинга ключа, изменения есть. Диггер не сработал на вашем ресурсе, а вот скомпилированная версия работает.

            Самое интересное, что я сам эти же изменения сделал, но не компилировал, а запустил на сайте, у меня не работало, решил, что не только в них дело. Когда вы залили новую версию, у меня также на сайте не отработал диггер. Но я увидел изменения, решил попробовать скомпилировать, и всё пошло. Спасибо большое, в следующий раз буду сразу пытаться компилировать в том числе

          3. Разницы быть не должно в облаке запускается парсер или нет, я только что загрузил из каталога и запустил, все работает:

            2020-05-30 22:03:05:468 info    Retrieving page (GET): https://m.avito.ru/api/9/items?key=af0deccbgcgidddjgnvljitntccdduijhdinfgjgfjir&categoryId=114&locationId=621540&query=%D0%B8%D0%B7%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%2B%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2&page=1&lastStamp=1590865380&display=list&limit=30
            
  27. Добрый день
    С воскресенья парсер перестал правильно работать с категориями (версия из каталога). Выдержка из лога:
    {«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 категории в ссылку, и выгружает объявления совсем из других категорий

  28. Добрый день.
    Импортировал из каталога, ошибки парсинга категорий

    {«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″}

    1. Внесли изменения в парсер, можно забрать из каталога

  29. Решил попробовать данную тему. И… просто убил час времени. С проксями/без, мобильную версию, обычную — ничего не получается(
    То 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]

    1. Нужно использовать хорошие, коммерческие прокси и обязательно самую последнюю версию парсера из каталога

  30. Не работает. Ввел данные из примера, скрипт быстро завершился и результатов 0.

  31. Добрый день.
    А что случилось с авторизацией на сайте? Ссылка 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″}

    1. По авторизации, лучше обратиться в поддержку: на сайте заполнить форму поддержки или обратиться в чат. По Авито, да. Произошел ряд изменений, парсер в каталоге уже обновлен до актуальной версии.

  32. Добрый день.
    Авторизация сегодня успешно заработала, код из каталога забрал.

    Запускаю локально скомпилированный диггер, такая проблема: после 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″}

    1. Можно попробовать увеличить паузы или использовать пул прокси с опцией -p при запуске.

  33. Подскажите парсер все еще работает?, у меня скомпилированный ничего не собирает.

    1. Все должно работать, но нужно использовать свежий парсер из каталога. Также для компиляции потребуется внести изменения для заполнения пула, поскольку парсер из каталога использует пул ссылок из пользовательского Diggernaut аккаунта, а компилированные диггеры не имеют связи с нашим сервером.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт защищен reCAPTCHA и применяются Политика конфиденциальности и Условия обслуживания применять.

Срок проверки reCAPTCHA истек. Перезагрузите страницу.