Парсер Авито на PHP

в 16:33, , рубрики: php, Программирование, метки: , , ,

Часто возникает необходимость парсинга Авито. Была статья на Хабре с парсером на перле. Но перл, не часто используемый язык. Решил поделиться актуальным на сегодня парсером Авито на 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

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js