Парсинг сайтов при помощи библиотеки phpQuery:парсим заголовки статей на главной

Исходя из названия статьи, я думаю вы догадались, что дальше речь пойдет о том, как спарсить заголовки статей с главной страницы при помощи библиотеки phpQuery.  Вообще, тема пасрсинга очень интересна и достаточно актуальна, поскольку встречается в реальных проектах сплошь и рядом. Это может вам пригодиться для того, чтобы распарсить курсы валют, цены для определенных товаров и т.д. Как решить эту задачу? Можно, конечно, решить ее в лоб, с помощью регулярных выражений, но сайты бывают разные, и вытащить информацию с помощью регулярных выражений бывает достаточно сложно. Тут то и приходят нам на помощь всевозможные библиотеки, одна из которых phpQuery.

В качестве сайта для парсинга, я выбрал сайт tproger. Надеюсь они не обидятся.

Парсим заголовки статей

Перед тем, как начать парсить данные, нам нужно изучить страницу с котором мы будем работать. Можно сделать это через отладчик, встроенный в вашем браузере. Нас интересуют все статьи, которые находятся между <div></div> с идентификтором id=main_columns

parser phpQuery

Дальше мы видим что все статьи обернуты в парный тег <article></article> с классом class="post"

parser phpQuery

Изучая дальше стрктуру, мы видим, что заголовок находится между парным тегом <h2></h2> с классом class="entry-title". Нам нужно оттуда взять заголовок, который внутри находится между <span></span>. Можем взять еще ссылку на данную стать и сделать так, чтобы по нажатию на полученный заголовок, нас перекидывало на статью, которая находится на сайте tproger.

parser phpQuery

Перед тем, как начать писать наш парсер, нужно скачать библиотеку phpQuery

В принципе, изучив все эти данные и скачав библиотеку, мы легко можем написать наш парсер.

<?php
//Сначала мы указываем кодировку, чтобы у нас вдруг в дальнейшем ->
// не выскакивали кракозябры
header('content-type: text/html; charset=utf-8');

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

//В переменную $url мы помещаем адрес искомой страницы, с котором мы будем работать
$url = 'https://tproger.ru';
//Получаем ее контент-страницу при помощи функции file_get_contents
$file = file_get_contents($url);

//Создаем объект данной библиотеки в переменной $doc и в phpQuery вызываем ->
// статический метод newDocument.
//В качестве входящего параметра мы передаем считанный контент, который ->
// находится в переменной $file
$doc = phpQuery::newDocument($file);

//Запускаем цикл foreach
//Дальше обращаемся к нашему объекту $doc и вызываем метод find
//метод find ищет в DOM дереве соответствующий элемент
//В качестве параметра передаем класс/идентификатор которые, мы хотим найти
//В нашем случае мы ищем класс .main-page , и внутри него мы ищем запись с классом .post
//Каждый элемент массива мы помещаем в элемент $article
foreach ($doc->find('.main-page .post')as $article){
//Для того, чтобы дальше работать с данными и можно было применять все методы, ->
// нам нужно получить объект phpQuery
//Для этого нам понадобится использовать специальную функцию pq
//Функция pq - это аналог $() в jQuery, и она оборачивает DOMElement в объект phpQuery. 
    $article = pq($article);
//В переменной $article находим ссылку на статью, которая находится -> 
//в блоке .entry-title и там ссылка, a где нас интересует ->
//атрибут attr - href.
    $link = $article->find('.entry-title a')->attr('href');
//В переменной $article находим заголовок статьи, который находится -> 
//в блоке .entry-title-heading, где нас интересует весь html -> 
//который там находится
    $post = $article->find('.entry-title-heading ')->html();
//Выводим заголовки всех статей с главной страницы сайта tproger
    echo "<a href='$link'><p>$post</p></a>";
}

Вот так мы написали наш парсер заголовков статей. Дальше я буду писать более сложные парсеры ну и конечно же буду делиться ими с вами. Если у вас остались какие-то вопросы, обязательно пишите в комментариях, я постараюсь на всё оветить.

Оставьте ответ

comment-avatar

*