Парсим данные из olx

Как то раз мне пришлось искать квартиру и первые ссылки что были в интернете вели на площадку OLX.Но все новые предложения уходили в первые пол часа.Вот тогда и пришла идея парсить olx

1268 php, telegram Aвтор:
Рейтинг: 5/5 - 2 голосов

Парсим данные из olx

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

Для парсинга использовал самую простую библиотеку phpQuery.

Запросы делаю через Curl.

/*подключаем библиотеку*/
 require ('phpQuery.php');

 /*подключение к базе*/
 require ('bd.php');
/*функция получения контента в переменную*/

function curl_content($url){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; WinNT; en; rv:1.0.2) Gecko/20030311 Beonex/0.8.2-stable');
//curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefiles);
//curl_setopt($ch, CURLOPT_NOBODY,true);
//curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefiles);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER ,false);
//////курл
$html=curl_exec($ch);
return $html;
unset($url);
}
$html=curl_content('https://www.olx.ua/nedvizhimost/arenda-kvartir/dolgosrochnaya-arenda-kvartir/uman/');// адрес страници с которой парсим даные
phpQuery::newDocument($html);
//выводим в цыкле
$menu = pq('#offers_table')->find('.breakword');

$prices=pq('.space')->find('a.detailsLink');

$sr= new Test();
print_r($sr->b);
$i=0;
foreach ($menu as $res) {
 $pqres=pq($res);//оборачеваем в pq для использования в foreach
$linkarray=$pqres->find('a')->attr('href');//извлекаем ссылки
$pricearray=$pqres->find('p.price>strong')->text();//извлекаем цену
$img=$pqres->find('img.fleft')->attr('src');//извлекаем картинки
$url = $linkarray;

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

 

$cookie_path = $_SERVER['DOCUMENT_ROOT'].'/cookie.dat';
preg_match('|-ID(.*).html|', $url, $id);
$olx = curl_init($url);
curl_setopt($olx, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($olx, CURLOPT_RETURNTRANSFER, true);
curl_setopt($olx, CURLOPT_HEADER, 1);
curl_setopt($olx, CURLOPT_COOKIEFILE, $cookie_path);
curl_setopt($olx, CURLOPT_COOKIEJAR, $cookie_path);
$result = curl_exec($olx);
$content = $result; 
curl_close($olx);
preg_match("|phoneToken = '(.*)';|", $result, $token);
$olx_number = curl_init('https://www.olx.ua/ajax/misc/contact/phone/' . $id[1] . '/?pt=' . $token[1]);
    curl_setopt($olx_number, CURLOPT_HTTPHEADER, [
            'Host: www.olx.ua',
            'Accept: */*',
            'Accept-Language: uk,ru;q=0.8,en-US;q=0.5,en;q=0.3',
            'Accept-Encoding: gzip, deflate, br',
            'Connection: keep-alive',
            'X-Requested-With: XMLHttpRequest'
        ]);
        curl_setopt($olx_number, CURLOPT_REFERER, $url);
        curl_setopt($olx_number, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
        curl_setopt($olx_number, CURLOPT_COOKIEFILE, $cookie_path);
        curl_setopt($olx_number, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($olx_number, CURLOPT_RETURNTRANSFER, true);
        $result = curl_exec($olx_number);

        curl_close($olx_number);
        

        $json = json_decode($result);

Далее заходим на страницу чтобы получить текст что внутри (Описание).И подготовим данные для записи в базу

phpQuery::newDocument($content);
$htmlcon=pq('#textContent>p')->text();
$big_img=pq('.photo-glow')->find('img')->attr('src');

phpQuery::newDocument($json->value);
$tel=pq('span')->text();

echo $json->value;
echo $big_img;


if (empty($tel)) {
    $tel=$json->value;
}


$resarray= array(
  'imglink'=>$img,
  'link' => $linkarray,
  'price' =>$pricearray,
  'tel' => $tel,
  'content'=> $htmlcon,
);

$linkimgbd=$resarray['imglink'];
$linkbd=$resarray['link'];
$pricebd=$resarray['price'];
$telbd=$resarray['tel'];
$conrentbd=trim($resarray['content']) ;

Следующий шаг, работа с базой и api телеграма

/*выборка з бази*/
$resultbd =mysqli_query($mysqli,"SELECT * FROM base ORDER BY id DESC") or die (mysql_error());
$rowbd =mysqli_fetch_array($resultbd);



if ($rowbd['link']==$resarray['link']) {
	echo "нету новых";
	echo$resarray['content'];
}
else{



echo "Есть новые обявления";
$mysqli->query("INSERT INTO base (link,tel,price,content) 	VALUES ('$linkbd','$telbd','$pricebd','$conrentbd'); ") or die (mysql_error());


$tokens = 'XXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';// токен что выдал вам @BotFather 
$idChat = -XXXXXXXXXXXXXX;//id чата куда нужно отправить


//отправляем фотку
$param = [
'chat_id'=> $idChat,
'photo'	 => $big_img,
];

curl_content('https://api.telegram.org/bot'.$tokens.'/sendPhoto?'.http_build_query($param));



//отправляем ссылку

$masenge = $conrentbd.chr(10).'------------- '.chr(10).'Цена оренди '.$pricebd.''.chr(10).'-----'.chr(10).'тел: '.$telbd.''.chr(10).$linkbd;
$param = [
'chat_id'=> $idChat,
'text'	 => $masenge,
];

curl_content('https://api.telegram.org/bot'.$tokens.'/sendMessage?'.http_build_query($param));



}





echo "---------------
";
echo $rowbd['link'];

echo "---------------
";

echo $resarray['link'];








if(++$i == 1) break;//ограничение в 1 вывода

}

phpQuery::unloadDocuments();

3 случайных Поста

Card image cap
Сайты помошники для начинающих фрилансеров и профи.
Card image cap
Товары что нет в наличие в конце списка в теме journal2 opencart 2.1
Card image cap
Cron wordpress

коммент.

avatar

Anatoly

- 29 апреля 2018, 13:03
красавчик! ты лучший! у меня столько времени ушло, чтобы это разрулить… и так и не пришло в мою голову поиграться с опциями курла… но аякс на телефон это вообще!!!
12++++++++++++
avatar

Admin

- 29 апреля 2018, 14:49
Спасибо))
avatar

Игорь

- 05 мая 2018, 12:49
Здравствуйте, так и не могу сделать вывод номера. Пустая страница. Помогите. Возможно они улучшили защиту.
avatar

Игорь

- 05 мая 2018, 12:59
Исправил агента. Работает.
За код спасибо. Взамен могу сказать что раньше работало через мобайл версию.
avatar

Admin

- 05 мая 2018, 14:55
Возможно этот метот вскоре перестанет работать. Буду следить за изминениями
avatar

Вася

- 27 августа 2018, 17:13
Что делать, если ссылка вида «www.olx.ua/ajax/misc/contact/phone/'. $id[1]. '/?pt='. $token[1]» возвращает {«value»:«000 000 000»}
avatar

Admin

- 27 августа 2018, 17:16
Нужно поставить задержку на загрузку url 1-2 сек
avatar

Admin

- 31 августа 2018, 14:13
удаляйте файл
unlink( $_SERVER['DOCUMENT_ROOT'].'/cookie.dat');
avatar

Николай Федоркин

- 30 августа 2018, 03:40
Добрый день. Нужно посмотреть телефон с неактивного объявления на олх. Помогите пожолуйста. Будут благодарен и в долгу не останусь.
avatar

Admin

- 31 августа 2018, 14:09
Пришлите ссылку
avatar

Admin

- 31 августа 2018, 14:10
Если в номере телефона появились 00000 нужно удалять файл куки
unlink( $_SERVER['DOCUMENT_ROOT'].'/cookie.dat');
avatar

Алихан

- 01 октября 2018, 22:03
Благодарствую, все работает!
avatar

Михаил

- 17 октября 2018, 09:58
Приветствую, спасибо тебе большое, на основании твоей статью — сделал парсер множества записей, хотя я в php если честно слабенький…
Такой вот вопрос, сейчас я парсю по 15-20 страниц сразу, загрузка 7-10 минут. Не подскажешь, как это все можно ускорить?
avatar

Admin

- 17 октября 2018, 10:21
Все уже зависит от хостинга. Количества памяти php.
Можно оптимизировать код. Не делать лишних запросов.
Код представлен в целях ознакомления и понятия принципа работы.

Контакти

Contact

info@pechenki.top

Начать чат со мной

© SiteBlog designer