Часто возникает необходимость парсинга Авито. Была статья на Хабре с парсером на перле. Но перл, не часто используемый язык. Решил поделиться актуальным на сегодня парсером Авито на PHP.
Часто возникает необходимость парсинга Авито. Была статья на Хабре с парсером на перле. Но перл, не часто используемый язык. Решил поделиться актуальным на сегодня парсером Авито на PHP, который я использую в своем сервисе Глиса, отслеживающим новые объявления.
Ниже приведен код функции, разбирающий html-код страницы результатов поиска мобильной версии Авито. На входе в функцию передается url страницы ($url), которую мы парсим и html-код данной страницы ($html). На выходе функция возвращает массив объявлений. Парсятся все основные данные, доступные в результатах поиска: номер объявления, url картинки, заголовок объявления, цена, дата выхода и ссылка на объявление.
function getads_avito($url,$html)
{
$pattern = "'<article.{0,10} class="(b-item js-catalog-item-enum |b-item js-catalog-item-enum item-highlight)".{0,10} data-item-id="(?<avito_id>.{7,10})".{1,1000}<span class="pseudo-img"(?<imgsrc>.*?)<.{1,1000}<h3 class="item-header">(?<title>.*?)</span>.*?</h3>(?<price>.*?)<div class="item-info">(?<details>.*?)<div .*? info-text">(?<data>.*?)</div>.*?<a href="(?<href>.*?)"'si";
$titre=preg_match_all($pattern, $html, $ads) ;
unset($ads[0]);
$pattern2="' url((?<imgsrc>.*?))'si";
for ($i=0;$i<count($ads["price"]);$i++)
{
$ads["price"][$i]=preg_replace('/[^d]+/', '',strip_tags($ads["price"][$i]));
$ads["title"][$i]=trim(strip_tags($ads["title"][$i]));
preg_match($pattern2, $ads["imgsrc"][$i], $ar) ;
$ads["imgsrc"][$i]=$ar["imgsrc"];
}
return $ads;
}
Пояснения по коду.
Самый сложный момент — задать регулярное выражение в $pattern. Каждое объявление начинается с <article — по нему и начинаем парсинг.
Отдельно сделан дополнительный паттерн.
$pattern2="' url((?<imgsrc>.*?))'si";
Это нужно для корректной обработки объявлений без картинок.
Далее в цикле очищаем некоторые данные:
— оставляем в цене только цифры;
— чистим от тегов заголовок;
— выбираем url картинки.
Думаю понятно откуда берется html-код страницы. Я использую для этого curl. Ну и с полученным массивом объявлений можно сделать все что угодно. Я пишу их в базу. Естественно проверив перед записью на предмет новизны. Ну и отсылаю уведомления на емайл и ботом в Телеграм информацию по новым объявлениям.
Автор: pull