Парсинг и обработка веб-страницы на PHP: выбираем лучшую библиотеку

Что вам делать дальше:

Приступайте к решению задач по следующей ссылке: задачи к уроку.

Источник

Что-то ещё?

Для PHP существуют ещё десятки разнообразных библиотек и инструментов для парсинга, но в этой статье мы рассмотрели только самые интересные, функциональные и производительные.

Подробнее о других способах парсинга средствами PHP можно прочитать в соответствующей теме на StackOverflow.

Если вы не используете PHP, то можете ознакомится с кратким списком похожих инструментов для других языков программирования:

C :htmlcxx, libxml ;

Python:lxml, BeautifulSoup, html5lib;

Java:JSOUP, TagSoup;

Ruby:Nokogiri, Oga, Rubyful Soup;

Perl:HTML::TokeParser, HTML::Parser, HTML::SimpleParse;

.NET: Html Agility Pack;

Swift:libxml 2, Hpple;

Ассемблер:AsmXml.

30 парсеров для сбора данных с любого сайта

Десктопные/облачные, платные/бесплатные, для SEO, для совместных покупок, для наполнения сайтов, для сбора цен… В обилии парсеров можно утонуть.

Мы разложили все по полочкам и собрали самые толковые инструменты парсинга — чтобы вы могли быстро и просто собрать открытую информацию с любого сайта.

A-parser

Стоимость: платная программа с пожизненной лицензией. Минимальный тарифный план — 119$, максимальный — 279$. Есть демо-версия.

Многофункциональный SEO-комбайн, объединяющий 70 разных парсеров, заточенных под различные задачи:

Кроме набора готовых инструментов, можно создать собственный парсер с помощью регулярных выражений, языка запросов XPath или Javascript. Есть доступ по API.

Comparser

Стоимость: 2000 рублей за 1 лицензию. Есть демо-версия с ограничениями.

Еще один десктопный парсер. С его помощью можно:

Google таблицы

С помощью двух несложных формул и Google Таблицы можно собирать любые данные с сайтов бесплатно.

IMPORTXML

Функция использует язык запросов XPath и позволяет парсить данные с XML-фидов, HTML-страниц и других источников.

Вот так выглядит функция:

Функция принимает два значения:

Хорошая новость в том, что вам не обязательно изучать синтаксис XPath-запросов. Чтобы получить XPath-запрос для элемента с данными, нужно открыть инструменты разработчика в браузере, кликнуть правой кнопкой мыши по нужному элементу и выбрать: Копировать → Копировать XPath.

С помощью IMPORTXML можно собирать практически любые данные с html-страниц: заголовки, описания, мета-теги, цены и т.д.

IMPORTHTML

У этой функции меньше возможностей — с ее помощью можно собрать данные из таблиц или списков на странице. Вот пример функции IMPORTHTML:

Она принимает три значения:

Об использовании 16 функций Google Таблиц для целей SEO читайте в нашей статье. Здесь все очень подробно расписано, с примерами по каждой функции.

Htmlsql

htmlSQL — экспериментальная PHP библиотека, позволяющая манипулировать HTML-разметкой посредством SQL-подобных запросов.

Простейший пример, извлекающий атрибуты href и title всех ссылок (элементы a) с классом list:

SELECT href,title FROM a WHERE $class == "list"

Как и с обычными mysql_ функциями, воспользовавшись методами fetch_array() или fetch_objects(), мы можем получить результат выполнения данного запроса в виде привычного ассоциативного массива или объекта.

Стоит также упомянуть о высоком быстродействии htmlSQL: часто она справляется в несколько раз быстрее phpQuery или того же Simple HTML DOM.

Тем не менее, для сложных задач вам может не хватить функциональности, а разработка библиотеки давно прекращена. Но даже несмотря на это, она всё ещё представляет интерес для веб-разработчиков: в ряде случаев значительно удобнее использовать язык SQL вместо CSS-селекторов. Особенно когда вы не знаете, что такое CSS-селекторы 😉

Netpeak spider

Стоимость: от 19$ в месяц, есть 14-дневный пробный период.

Парсер для комплексного анализа сайтов. С Netpeak Spider можно:

Phpquery

Как и Simple HTML DOM, phpQuery является PHP вариантом JQuery, но на этот раз более похожим на своего «старшего javascript-брата».

Портировано почти всё, что есть в JS-фреймворке: поддержка селекторов, атрибутов, манипуляций, обхода, плагинов, событий (в том числе имитации кликов и т.д.) и даже AJAX. Использовать можно как через PHP, так и через командную строку в виде отдельного приложения.

Более того, согласно нашим бенчмаркам, phpQuery оказался в 8 (!) раз быстрее Simple HTML DOM.

Вот небольшой пример на phpQuery, в котором происходит обработка заранее выбранных элементов списка (li):

foreach(pq('li') as $li) {
        // Можно вывести различные данные обычным текстом 
        $tagName = $li->tagName;
        $childNodes = $li->childNodes;
        // А можно добавить обертку phpQuery (аналог $() в JQuery) и, например, добавить к элементу какой-то класс
        pq($li)->addClass('my-second-new-class');
}

Подробную документацию и больше примеров найдете на официальной странице в Google Code.

Screaming frog seo spider

Стоимость: лицензия на год — 149 фунтов, есть бесплатная версия.

Многофункциональный инструмент для SEO-специалистов, подходит для решения практически любых SEO-задач:

В бесплатной версии доступен ограниченный функционал, а также есть лимиты на количество URL для парсинга (можно парсить всего 500 url). В платной версии таких лимитов нет, а также доступно больше возможностей. Например, можно парсить содержимое любых элементов страниц (цены, описания и т.д.).

Simple html dom

Simple HTML DOM — PHP-библиотека, позволяющая парсить HTML-код с помощью удобных jQuery-подобных селекторов.

Она лишена главного недостатка XPath — библиотека умеет работать даже с невалидным HTML-кодом, что значительно упрощает работу. Вы также забудете о проблемах с кодировкой: все преобразования выполняются автоматически.

Xenu’s link sleuth

Стоимость: бесплатно.

Десктопный парсер для Windows. Используется для парсинга все url, которые есть на сайте:

Часто применяется для поиска неработающих ссылок на сайте.

Xpath и dom

DOM и XPath не являются библиотеками в привычном смысле этого слова, это стандартные модули, которые встроены в PHP начиная с пятой версии. Именно отсутствие необходимости использовать сторонние решения делает их одними из лучших инструментов для парсинга HTML страниц.

На первый взгляд может показаться, что низкий порог входа — это не о них, некоторые места и вправду являются весьма сложными. Но это только на первый взгляд: стоит только немного разобраться с синтаксисом и базовыми принципами, как XPath тут же станет для вас инструментом для парсинга номер один.

Похожее:  Ростелеком не работает сегодня август 2022

Вот, например, код с использованием DOM и XPath, который ищет в разметке все теги и модифицирует их атрибуты src:

Автоматическая авторизация

Допустим, вы хотите парсить страницы, доступные только авторизованному пользователю.

В этом случае алгоритм действий такой: первый запрос отправляется на страницу авторизации сразу с POST данными, при этом автоматически сессионные куки пишутся в файл, а все остальные запросы отправляются на страницы, которые вы хотите парсить.

Учтите только, что сессия живет около 20 минут, если не обращаться к сайту. То есть, если после последнего обращения к сайту пройдет больше времени, то нужно авторизовываться заново.

Автоматическая запись и получение кук

Уже имеющиеся куки, это хорошо, но бывает очень редко. Чаще всего нам нужно автоматически принимать и отправлять куки. Это делается с помощью двух опций: CURLOPT_COOKIEFILE командует принимать и сохранять куки в файл, а CURLOPT_COOKIEJAR командует отправлять сохраненные куки на сервер:

Параметром эти опции принимают путь к файлу в который будут писаться куки.

Учтите нюанс: автоматическая отправка куки CURLOPT_COOKIEJAR работает только при включенной опции CURLOPT_COOKIEFILE.

Анализ сайта от pr-cy

Стоимость: платный сервис, минимальный тариф — 990 рублей в месяц. Есть 7-дневная пробная версия с полным доступом к функционалу.

Онлайн-сервис для SEO-анализа сайтов. Сервис анализирует сайт по подробному списку параметров (70 пунктов) и формирует отчет, в котором указаны:

Анализ сайта от se ranking

Стоимость: платный облачный сервис. Доступно две модели оплаты: ежемесячная подписка или оплата за проверку.

Стоимость минимального тарифа — 7$ в месяц (при оплате годовой подписки).

Возможности:

Браузерные расширения

Для парсинга данных есть много браузерных расширений, которые собирают нужные данные из исходного кода страниц и позволяют сохранять в удобном формате (например, в XML или XLSX).

Парсеры-расширения — хороший вариант, если вам нужно собирать небольшие объемы данных (с одной или парочки страниц). Вот популярные парсеры для Google Chrome:

Где взять парсер под свои задачи

Есть несколько вариантов:

Первый вариант подойдет далеко не всем, а последний вариант может оказаться слишком дорогим.

Что касается готовых решений, их достаточно много, и если вы раньше не сталкивались с парсингом, может быть сложно выбрать. Чтобы упростить выбор, мы сделали подборку самых популярных и удобных парсеров.

Десктопные парсеры

Большинство десктопных парсеров разработаны под Windows — на macOS их необходимо запускать с виртуальных машин. Также некоторые парсеры имеют портативные версии — можно запускать с флешки или внешнего накопителя.

Популярные десктопные парсеры:

Для организаторов сп (совместных покупок)

Есть специализированные парсеры для организаторов совместных покупок (СП). Их устанавливают на свои сайты производители товаров (например, одежды). И любой желающий может прямо на сайте воспользоваться парсером и выгрузить весь ассортимент.

Чем удобны эти парсеры:

Популярные парсеры для СП:

Задача

Зайдите на следующую страницу: auth.php.

На данной странице находится форма авторизации.
Логин: ‘user’, пароль ‘123’. Если вбить правильный логин и пароль,
а затем зайти на страницы
1.php,
2.php,
3.php,
4.php,
5.php,
– вы увидите
содержимое, которое видит только авторизованный пользователь.

Напишите парсер, который авторизуется на данной странице,
а затем зайдет на 5 указанных страниц (спарсите ссылки на них со страницы auth.php), заберет оттуда
содержимое для авторизованного пользователя
и сохранит его в базу.

Законно ли парсить данные?

В законодательстве РФ нет запрета на сбор открытой информации в интернете. Право свободно искать и распространять информацию любым законным способом закреплено в четвертом пункте 29 статьи Конституции.

Допустим, вам нужно спарсить цены с сайта конкурента. Эта информация есть в открытом доступе, вы можете сами зайти на сайт, посмотреть и вручную записать цену каждого товара. А с помощью парсинга вы делаете фактически то же самое, только автоматизированно.

Но если вы хотите собрать персональные данные пользователей и использовать их для email-рассылок или таргетированной рекламы, это уже будет незаконно (эти данные защищены законом о персональных данных).

Зачем нужны парсеры

Парсер — это программа, сервис или скрипт, который собирает данные с указанных веб-ресурсов, анализирует их и выдает в нужном формате.

С помощью парсеров можно делать много полезных задач:

Для справки. Есть еще серый парсинг. Сюда относится скачивание контента конкурентов или сайтов целиком. Или сбор контактных данных с агрегаторов и сервисов по типу Яндекс.Карт или 2Гис (для спам-рассылок и звонков). Но мы будем говорить только о белом парсинге, из-за которого у вас не будет проблем.

Как авторизоваться на стороннем сайте через php?

Добрый день! Нужно авторизоваться на сайте и после этого спарсить одну страницу.

Сложность в том, что при авторизации форма передает токен, который всегда разный.
Поэтому нужно сначала узнать токен, а потом при авторизации через POST передать не только логин и пароль, но и токен.

Как это сделать в один присест? И токен получить и авторизвоаться сразу? Ведь при втором запросе токен то уже меняется.

Вот здесь у товарища, видимо, идентичная проблема (Авторизация на сайте с использование curl (PHP)? ). И он ее решил, но решение не описал. В качестве кода (нереботающего) приводит это:

public function authUser($url=null,$token = '1'){
    
    $parser = EvilApplication::getInstance()->getConfig('parser');
    $EvilCurl = curl_init();
    curl_setopt($EvilCurl,CURLOPT_URL,(isset($url)) ? $url : $parser['url']);
    curl_setopt($EvilCurl, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36");
    curl_setopt($EvilCurl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($EvilCurl, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($EvilCurl, CURLOPT_POST, 1);
    curl_setopt($EvilCurl, CURLOPT_POSTFIELDS, 'action=login&autologin=1&login='.$parser['user_login'].'&passwd='.$parser['user_password'].'&u_token_key='.$token);
    curl_setopt($EvilCurl, CURLOPT_HEADER, 0);
    curl_setopt($EvilCurl, CURLOPT_REFERER, (isset($url)) ? $url : $parser['url']);
    curl_setopt($EvilCurl, CURLOPT_COOKIESESSION, true);
    curl_setopt($EvilCurl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($EvilCurl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($EvilCurl, CURLOPT_COOKIEJAR,  dirname(__FILE__).'/cookie.txt'); 
    curl_setopt($EvilCurl, CURLOPT_COOKIEFILE, dirname(__FILE__).'/cookie.txt'); 
    $response = curl_exec($EvilCurl);
    #закрываем соединение
    if($token=='1'){
      $pos = strpos($response,'var _TOKEN_KEY =');
      $data = substr($response, $pos,strlen($response));
      $pos = strpos($data,"';");
      $data = substr($data, 0,$pos);
      $this->authUser($url,str_replace("var _TOKEN_KEY = '",'',$data));
    }else{
      die($response);
    }
    curl_close($EvilCurl);
    #return $response;
  }

И затем свое же сообщение комментирует:

Похожее:  Dozarplati (До зарплаты) - вход в личный кабинет, подробная инструкция -

в результате скопировав cookie которые были выданы после авторизации, парсить сайт получилось.

Вопрос: как сделать то, что он написал?
Мне как и ему нужно спарсить одну страницу после авторизации с осложнением: каждый раз уникальные токены.

Большое спасибо за помощ!

Надстройки для excel

Программное обеспечение в виде надстройки для Microsoft Excel. Например, ParserOK. В подобных парсерах используются макросы — результаты парсинга сразу выгружаются в XLS или CSV.

Облачные парсеры

Основное преимущество облачных парсеров — не нужно ничего скачивать и устанавливать на компьютер. Вся работа производится «в облаке», а вы только скачиваете результаты работы алгоритмов. У таких парсеров может быть веб-интерфейс и/или API (полезно, если вы хотите автоматизировать парсинг данных и делать его регулярно).

Например, вот англоязычные облачные парсеры:

Из русскоязычных облачных парсеров можно привести такие:

Любой из сервисов, приведенных выше, можно протестировать в бесплатной версии. Правда, этого достаточно только для того, чтобы оценить базовые возможности и познакомиться с функционалом. В бесплатной версии есть ограничения: либо по объему парсинга данных, либо по времени пользования сервисом.

Отправка куки на сервер

Предположим у вас уже есть название куки и ее значение. В этом случае ее можно отправить на сервер с помощью опции CURLOPT_COOKIE.

Давайте установим куку с именем name и значением ‘Дима’:

Парсеры для seo-специалистов

Отдельная категория парсеров — узко- или многофункциональные программы, созданные специально под решение задач SEO-специалистов. Такие парсеры предназначены для упрощения комплексного анализа оптимизации сайта. С их помощью можно:

Пройдемся по нескольким популярным парсерам и рассмотрим их основные возможности и функционал.

Стоимость: первые 500 запросов — бесплатно. Стоимость последующих запросов зависит от количества: до 1000 — 0,04 руб./запрос; от 10000 — 0,01 руб.

Возможности

С помощью парсера метатегов и заголовков можно собирать заголовки h1-h6, а также содержимое тегов title, description и keywords со своего или чужих сайтов.

Инструмент пригодится при оптимизации своего сайта. С его помощью можно обнаружить:

Также парсер полезен при анализе SEO конкурентов. Вы можете проанализировать, под какие ключевые слова конкуренты оптимизируют страницы своих сайтов, что прописывают в title и description, как формируют заголовки.

Сервис работает «в облаке». Для начала работы необходимо добавить список URL и указать, какие данные нужно спарсить. URL можно добавить вручную, загрузить XLSX-таблицу со списком адресов страниц, или вставить ссылку на карту сайта (sitemap.xml).

Парсер метатегов и заголовков — не единственный инструмент системы PromoPult для парсинга. В SEO-модуле системы можно бесплатно спарсить ключевые слова, по которым добавленный в систему сайт занимает ТОП-50 в Яндексе/Google.

Здесь же на вкладке “Слова ваших конкурентов” вы можете выгрузить ключевые слова конкурентов (до 10 URL за один раз).

Подробно о работе с парсингом ключей в SEO-модуле PromoPult читайте здесь.

Парсеры для быстрого наполнения сайтов

Такие сервисы собирают названия товаров, описания, цены, изображения и другие данные с сайтов-доноров. Затем выгружают их в файл или сразу загружают на ваш сайт. Это существенно ускоряет работу по наполнению сайта и экономят массу времени, которое вы потратили бы на ручное наполнение.

В подобных парсерах можно автоматически добавлять свою наценку (например, если вы парсите данные с сайта поставщика с оптовыми ценами). Также можно настраивать автоматический сбор или обновление данных по расписания.

Примеры таких парсеров:

Парсеры цен конкурентов

Инструменты для интернет-магазинов, которые хотят регулярно отслеживать цены конкурентов на аналогичные товары. С помощью таких парсеров вы можете указать ссылки на ресурсы конкурентов, сопоставлять их цены с вашими и корректировать при необходимости.

Вот три таких инструмента:

Парсинг сайта с помощью curl и phpquery на php

Сегодня я расскажу про то, как парсить сайт спомощью библиотеки php CURL и библиотеки phpQuery.

phpQuery — это аналог jQuery, только на PHP. Все методы, которые есть в jQuery, должны присутствовать и этой библиотеке. Это удобно тем, что можно легко перемещаться по DOM дереву html документа и с легкостью находить нужные элементы.

Первым делом нам нужно получить html содержимое нужной страницы сайта для парсинга. Можно сделать это несколькими способами. Первый, самый простой — это использовать функцию file_get_content, указав url страницы в качестве параметра:

Так же, в эту функцию есть возможность добавлять заголовки и т. д, с помощью использования потоковых контекстов:

Чтобы этот способ работал, опция allow_url_fopen в php.ini должна быть включена.

Так же получить содержимое web сайта можно с помощью сокетов (pfsockopen), но проще воспользоваться библиотекой php CURL, если она установлена на вашем сервере. Ниже я продемонстрирую, как получить содержимое страницы сайта с помощью библиотеки CURL.

Парсинг сайта с применением авторизации

Любой, кто когда-либо пытался парсить сайты на языке программирования python начинал с простого запроса «get» библиотеки «requests». Запрос «get» выгружает html код страницы, который можно обрабатывать под свои нужды.

Парсинг сайтов

Сейчас мы с вами научимся работать с сессиями и куками, а также выполнять автоматическую авторизацию на сайтах.

Перед изучением данного урока изучите работу с сессиями и куками в PHP.

Применение curl в php парсерах сайтов

В этой статье разберём одну из ключевых деталей любого парсера сайтов. Это составление запросов к серверу источнику информации и получение от него ответа.

Похожее:  Разработка личных кабинетов для автоматизации отделов продаж. Стоимость разработки личного кабинета — Сибирикс

Один из самых простых вариантов воспользоваться PHP функцией file_get_contents(), но часто этого бывает мало, так как многие сайты для того, чтобы отдать нужный контент требуют отправить запрос с определёнными заголовками или куками. Также нам бывает нужна информация о заголовках в ответе сервера.

Для более сложных случаев удобнее составлять запросы с помощью функции из модуля cURL. cURL — это модуль для PHP, обеспечивающий поддержку библиотеки функций libcurl. Эта библиотека позволяет формировать POST или PUT запросы к веб-серверам, скачивать файлы. Набор функций поддерживает различные протоколы обмена http, https, ftp и пр. Расширение cURL  позволяет работать с поддержкой прокси-серверов, cookies и проводить аутентификацию пользователей. Получается хороший  инструмент для имитации действий пользователя в браузере.

Для разработки парсеров я написал аналог функции file_get_contents() с помощью cURL.

/* --- 1.2 --- Загрузка страницы при помощи cURL */
function curl_get_contents($page_url, $base_url, $pause_time, $retry) {
	/*
	$page_url - адрес страницы-источника
	$base_url - адрес страницы для поля REFERER
	$pause_time - пауза между попытками парсинга
	$retry - 0 - не повторять запрос, 1 - повторить запрос при неудаче
	*/
	$error_page = array();
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20220101 Firefox/38.0");   
	curl_setopt($ch, CURLOPT_COOKIEJAR, str_replace("\", "/", getcwd()).'/gearbest.txt'); 
	curl_setopt($ch, CURLOPT_COOKIEFILE, str_replace("\", "/", getcwd()).'/gearbest.txt'); 
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // Автоматом идём по редиректам
	curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); // Не проверять SSL сертификат
	curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); // Не проверять Host SSL сертификата
	curl_setopt($ch, CURLOPT_URL, $page_url); // Куда отправляем
	curl_setopt($ch, CURLOPT_REFERER, $base_url); // Откуда пришли
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Возвращаем, но не выводим на экран результат
    $response['html'] = curl_exec($ch);
	$info = curl_getinfo($ch);
	if($info['http_code'] != 200 && $info['http_code'] != 404) {
		$error_page[] = array(1, $page_url, $info['http_code']);
		if($retry) {
			sleep($pause_time);
			$response['html'] = curl_exec($ch);
			$info = curl_getinfo($ch);
			if($info['http_code'] != 200 && $info['http_code'] != 404)
				$error_page[] = array(2, $page_url, $info['http_code']);
		}
	}
	$response['code'] = $info['http_code'];
	$response['errors'] = $error_page;
	curl_close($ch);
	return $response;

}

Разберём детали работы функции curl_get_contents($page_url, $base_url, $pause_time, $retry). Основная её задача отвравить запрос по заданному URL ($page_url) и получить ответ от сервера.

С помощью функции curl_setopt() мы задаём нужные нам заголовки запроса. Например, через CURLOPT_USERAGENT настраивается User-Agent, можно менять тип браузера, из-под которого якобы делается запрос.

Панель разработчика в браузере FireFoxПодробно изучить параметры и заголовки запросов можно с помощью панели для веб-разрабочиков прямо в браузере по вкладке «Сеть». Очень полезный инструмент для начинающих и опытных разработчиков парсеров.

Кроме User-Agent для имитации действий реального пользователя полезно задать CURLOPT_REFERER — это заголовок Referer, на некоторых сайтах веб-мастера проверяют его наличие, чтобы отфильтровать совсем тупых ботов.

CURLOPT_FOLLOWLOCATION — позволяет переходить по редиректам в автоматическом режиме, то же полезная настройка, чтобы не обрабатывать по отдельности разные 301-редиректы.

CURLOPT_URL — задаёт URL целевой страницы — источника данных.

Настройки curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); — не проверять SSL сертификата и curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); — не проверять Host SSL сертификата, удобно использовать при работе по протоколу HTTPS, когда вам не нужно проверять валидность SSL сертификат у сервера.

CURLOPT_COOKIEJAR и CURLOPT_COOKIEFILE — задают пути к файлам для записи и считывания параметров COOKIE, нужны, например, для авторизации на сайте или когда интернет-ресурс хранит какие-либо настройки в файлах куков.

Самые интересные на мой субъективный взгляд настройки для cURL я описал. Детальное описание всех применяемых настроек лучше почитать в более официальных справочниках PHP.

Дальше в функции curl_get_contents() идёт отправка запроса и получение ответа в переменную. По заголовкам ответа проверяем удалось ли достучаться до заданной страницы. Если код ответа 200 или 400, то возвращаем HTML ответ от сервера. При другом коде ответа сервера после некоторой паузы делаем повторный запрос. Это бывает полезно, когда хостинг сайта работает нестабильно и при частых запросах выдаёт 500-ю ошибку.

В следующих статьях по теме парсеров рассмотрим варианты скриптов с авторизацией и варианты работы с применением технологии AJAX, не переключайтесь.

Работа с сессией

Зачем нам нужно уметь работать с сессиями через CURL? Затем, что авторизация на сайтах реализуется с помощью сессий. Соответственно, умея работать с сессиями, можно реализовать автоматическую авторизацию и парсить контент, доступный только авторизованному пользователю.

Сессии в PHP работают на основе кук. При старте сессии в куку пишется переменная sessionid, которая будет иметь что-то вроде такого значения 27za9c2lel3tk4zhhm7lmtzt6bbm3atj. Поэтому, для работы сессий всего лишь необходимо получать и отправлять куки на сайт, что мы и разобрали чуть выше.

Регулярные выражения

Даже не смотря на то, что «регулярки» — это первое, что приходит на ум, использовать их для настоящих проектов не стоит.

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

Вместо «допиливания» своего регулярного выражения при каждом малейшем изменении кода рекомендуем использовать инструменты ниже — это и проще, и удобнее, и надежнее.

Чек-лист по выбору парсера

Краткий чек-лист, который поможет выбрать наиболее подходящий инструмент или сервис.

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

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

Источник

Вывод

В своем мини-исследовании мы пришли к выводу, что в большинстве случаев для парсинга лучше использовать библиотеку phpQuery: она быстрая, функциональная и современная.

С другой стороны, для совсем простых задач логично было бы использовать стандартные модули PHP, такие как XPath, DOM или, на крайний случай, регулярные выражения.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *