Парсинг телефонов с Авито
Хочу вкратце поделится набросками о том как парсить телефоны с объявлений опубликованных на Авито, параллельно парсингу самих объявлений или же отдельно. Если вас интересует данная тема, то наверняка вы уже знаете, что номер телефона прячется за ссылочкой «Показать номер». При нажатии на которую происходит вызов JavaScript функции, генерация URL картинки с номером телефона, затем отправляется запрос на сервер авито и в ответ приходит картинка с номером. Все достаточно просто, но как получить телефонный номер в автоматическом режиме с помощью PHP скрипта?
Действие первое. Загружаем страницу с объявлением, средствами PHP с помощью CURL или file_get_contents(), затем в исходном полученном коде ищем две переменные, это item.phone и item_id.
Получаем их из страницы, и далее переходим к функции, которая оперируя этими переменными сформирует для нас hash код, который далее требуется подставить в URL вызова картинки с телефоном, что-бы получить её и сохранить на сервер, и затем передать скрипту который распознает цифры на картинки выдав номер телефона уже в текстовом формате.
URL картинки имеет вид:
http://www.avito.ru/items/phone/{$item_id}?pkey={$pkey}
Как видно, генерированный hash следует подставаить в переменную pkey.
Функция, для получения hash на javascript, присутствует среди скриптов самого Авито, но все скрипты хорошенько минимизированны и обфусцированны, по этому найти ее не так то просто. Раньше эта функция называлась phoneDemixer, сейчас она не имеет конкретного название и выглядит так:
function e(t) { var e, a = t.match(/[0-9a-f]+/g), o = (avito.item.id % 2 === 0 ? a.reverse() : a).join(""), n = o.length, i = ""; for (e = 0; n > e; ++e) e % 3 === 0 && (i += o.substring(e, e + 1)); return i } |
Думаю переписать данную функцию на PHP, программисту среднего звена не составит особого труда.
function phoneDemixer($key,$id) { preg_match_all("/[\da-f]+/",$key,$pre); $pre = $id%2==0 ? array_reverse($pre[0]) : $pre[0]; $mixed = join('',$pre); $s = strlen($mixed); $r=''; for($k=0; $k<$s; ++$k) { if ($k%3==0) { $r .= substr($mixed,$k,1); } } return $r; } |
После того, как URL картинки будет иметь законченный вид, следует подгрузить по нему картинку. В данном случае стоит учесть что запрос следует делать по протоколу HTTPS. В качестве реферера указывать URL объявления на Авито. Полученный URL картинки с телефоном, на сколько мне известно имеет постоянный вид и не меняется, даже не смотря на то, что при каждой перезагрузки страницы система выдает разное значение переменной item.phone.
Как распознать цифры с картинки, я писал однажды тут — PHP: распознать цифры, буквы с картинки
Алгоритм действий не поменялся и по сей день работает как часы.
Соединив воедино парсинг страницы, парсинг телефонного номера с распознаванием текста с картинки, мы получим на выходе готовый к использованию многофункциональный парсер.
Статья опубликована в рамках ознакомления.
Похожие записи
6 комментариев to “Парсинг телефонов с Авито”
Оставить комментарий
Full Stack
Senior, Architect
предложить оффер
- jQuery: как получить значение атрибута?
- PHP работа с изображением, класс SimpleImage
- Интеграция с API ОСАГО сайта sravni.ru
- Комментарии на PHP, Ajax, mySQL
- PHP: Категории бесконечного уровня вложенности.
- Nginx редирект на другой сервис с сохранением URL спросил (а) Сергей
- Исполнитель пропал, почему такое случается и понять с кем работать? спросил (а) Артем
- Можно ли WordPress считать универсальным движком? спросил (а) Андрей
- Что такое самописный скрипт или CMS? спросил (а) Антон
- Как при поиске в linux используя grep, добавить исключения? спросил (а) Алексей
- Обзор Insurance CMS — платформы для сайтов по страхованию к записи
- Консольный скрипт(JavaScript) для автоматических заказов на OZON к записи
- Консольный скрипт(JavaScript) для автоматических заказов на OZON к записи
- Как создать Telegram-бота с авторизацией через сайт к записи
- PHP скрипт: каталог закладок на сайты к записи
- Валидация на PHP к записи
- Сколько зарабатывают в бизнесе на совместных покупках к записи
Archive
- +2025 (3)
- Январь 2025 (3)
- +2024 (35)
- Декабрь 2024 (7)
- Ноябрь 2024 (13)
- Октябрь 2024 (8)
- Сентябрь 2024 (1)
- Август 2024 (5)
- Май 2024 (1)
- +2023 (27)
- Ноябрь 2023 (1)
- Октябрь 2023 (13)
- Сентябрь 2023 (10)
- Апрель 2023 (1)
- Март 2023 (1)
- Февраль 2023 (1)
- +2022 (21)
- Декабрь 2022 (11)
- Ноябрь 2022 (1)
- Май 2022 (2)
- Апрель 2022 (2)
- Март 2022 (3)
- Февраль 2022 (1)
- Январь 2022 (1)
- +2021 (17)
- Декабрь 2021 (5)
- Ноябрь 2021 (2)
- Июль 2021 (1)
- Июнь 2021 (2)
- Май 2021 (5)
- Апрель 2021 (1)
- Март 2021 (1)
- +2020 (20)
- Декабрь 2020 (6)
- Сентябрь 2020 (2)
- Август 2020 (1)
- Июль 2020 (2)
- Май 2020 (2)
- Апрель 2020 (2)
- Март 2020 (2)
- Февраль 2020 (1)
- Январь 2020 (2)
- +2019 (18)
- Декабрь 2019 (3)
- Ноябрь 2019 (2)
- Октябрь 2019 (2)
- Сентябрь 2019 (1)
- Август 2019 (2)
- Июль 2019 (1)
- Июнь 2019 (1)
- Апрель 2019 (2)
- Март 2019 (1)
- Февраль 2019 (3)
- +2018 (44)
- Декабрь 2018 (4)
- Ноябрь 2018 (7)
- Октябрь 2018 (8)
- Сентябрь 2018 (1)
- Август 2018 (4)
- Июль 2018 (5)
- Май 2018 (3)
- Апрель 2018 (7)
- Март 2018 (1)
- Февраль 2018 (2)
- Январь 2018 (2)
- +2017 (19)
- Декабрь 2017 (2)
- Ноябрь 2017 (1)
- Октябрь 2017 (1)
- Сентябрь 2017 (2)
- Июль 2017 (1)
- Июнь 2017 (1)
- Май 2017 (2)
- Апрель 2017 (3)
- Март 2017 (2)
- Февраль 2017 (1)
- Январь 2017 (3)
- +2016 (36)
- Декабрь 2016 (3)
- Ноябрь 2016 (3)
- Октябрь 2016 (2)
- Сентябрь 2016 (3)
- Август 2016 (7)
- Июнь 2016 (3)
- Май 2016 (3)
- Апрель 2016 (3)
- Февраль 2016 (1)
- Январь 2016 (8)
- +2015 (36)
- Ноябрь 2015 (5)
- Октябрь 2015 (4)
- Сентябрь 2015 (1)
- Август 2015 (8)
- Июнь 2015 (1)
- Май 2015 (4)
- Апрель 2015 (8)
- Март 2015 (3)
- Февраль 2015 (2)
- +2014 (26)
- Ноябрь 2014 (2)
- Октябрь 2014 (5)
- Сентябрь 2014 (6)
- Июль 2014 (1)
- Июнь 2014 (2)
- Май 2014 (3)
- Апрель 2014 (6)
- Февраль 2014 (1)
- +2013 (27)
- Декабрь 2013 (2)
- Ноябрь 2013 (1)
- Октябрь 2013 (1)
- Август 2013 (1)
- Июль 2013 (3)
- Июнь 2013 (10)
- Май 2013 (1)
- Апрель 2013 (2)
- Февраль 2013 (3)
- Январь 2013 (3)
- +2012 (41)
- Декабрь 2012 (2)
- Ноябрь 2012 (3)
- Октябрь 2012 (7)
- Сентябрь 2012 (2)
- Август 2012 (1)
- Июль 2012 (3)
- Июнь 2012 (2)
- Май 2012 (6)
- Апрель 2012 (2)
- Март 2012 (7)
- Февраль 2012 (5)
- Январь 2012 (1)
- +2011 (57)
- Декабрь 2011 (6)
- Ноябрь 2011 (2)
- Октябрь 2011 (3)
- Сентябрь 2011 (5)
- Август 2011 (4)
- Июль 2011 (3)
- Июнь 2011 (3)
- Май 2011 (3)
- Апрель 2011 (4)
- Март 2011 (10)
- Февраль 2011 (5)
- Январь 2011 (9)
- +2010 (43)
- Декабрь 2010 (7)
- Ноябрь 2010 (21)
- Октябрь 2010 (14)
- Сентябрь 2010 (1)
Свежие записи
- Плагин WordPress для настройки robots.txt 13.01.2025
- Скрипт проверки товара на оригинал (для WordPress и прочих) 08.01.2025
- Флаги Apache при переадресации RewriteRule 02.01.2025
- Интеграция сайта(ресторана) с API сервиса Quick Resto 23.12.2024
- Шифрование в PHP и расшифровка в JavaScript по ключу 15.12.2024
так просто? почти работает, но вместо картинки получается «ошибка. перегрузите страницу». хотя вроде все правильно и код не изменился (((
Авито проверяет также заголовки запроса, реферал в частности. Так, что при формировании запроса старайтесь подделать его максимально схожим с оригинальным запросом.
А каким способом авито генерирует ссылку при использовании мобильной версии? Просто при таком способе не нужно разворачивать OCR сервис, сразу выдается номер в текстовом формате?
Описанный способ парсинга в статье более не актуален.
Роман, а новый способ парсинга телефонов Вам известен?
Да, в ряде проектов я использовал PhantomJS, который позволяет написать и использовать JS скрипты для парсинга практически любых данных.