Pull to refresh

Парсер Авито на 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. Ну и с полученным массивом объявлений можно сделать все что угодно. Я пишу их в базу. Естественно проверив перед записью на предмет новизны. Ну и отсылаю уведомления на емайл и ботом в Телеграм информацию по новым объявлениям.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.