Как парсить данные с сайта php

Hello-site.ru

Как парсить данные с сайта php. Смотреть фото Как парсить данные с сайта php. Смотреть картинку Как парсить данные с сайта php. Картинка про Как парсить данные с сайта php. Фото Как парсить данные с сайта php

Парсинг страниц сайтов(html-контента) на php.

Парсинг страниц сайтов(html-контента) на php.

Заметка посвящается парсингу, в частности парсинг сайтов, парсинг страниц, парсинг в веб-среде, парсинг html-контента сайта.

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

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

Для начала нам необходимо получить контент сайта в формате html. Для этого нам достаточно знать адреса нужных страниц.

Хочу показать 2 основных способа получения контента со страницы сайта:

В первую очередь приготовим массив с нужными адресами страниц:

Опять же хочу показать 3 варианта решения нашей задачи: “нативный” способ на php, с помощью встроенной библиотеки DOMDocument и библиотеки SimpleHTMLDOM.

1. php функция explode. Функция находит искомый символ или часть строки и делит целую строку на элементы массива.

Повторюсь, нам необходимо получить значения всех атрибутов href у тегов a, для этого будем делить общую строку на некоторые части\отрезки:

Если распечатать наш массив, будет примерно следующее:

2. встроенная библиотека DOMDocument. Работаем с классом примерно следующим образом:

Результат такого кода ровно такой же, что и с помощью функции explode.

3. библиотека SimpleHTMLDOM. Ее необходимо подключать из файла. Работа примерно схожа с DOMDocument. Работаем с классом:

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

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

Источник

Парсер на PHP – это просто

Вебмастеры часто сталкиваются с такой проблемой, когда нужно взять с какого-либо сайта определенную информацию и перенести ее на другой. Можно сначала сохранить информацию на промежуточный носитель, а уже с него загрузить куда-либо, но подобный подход не всегда удобен. В некоторых случаях гораздо быстрее залить парсер на сам сайт, поддерживающий PHP и запустить его удаленно, чтобы он автоматически спарсил информацию и загрузил ее в базу данных ресурса.
Среди уже готовых решений имеются популярные вроде Content Downloader и ZennoPoster, они конечно очень удобны и понятны любому человеку, даже незнакомому с программированием, однако имеют некоторые минусы. К примеру, они платные и не обладают достаточной гибкостью, которую можно вдохнуть в обычный php скрипт. Тем более, что разработка сложного парсера на них нисколько не уступает по времени написанию аналога на php.
Еще есть такая бесплатная вещь как iMacros – скриптовый язык, который может эмулировать действия пользователя в браузере, но тоже не везде такой подход работает лучшим образом.

Многие думают, что программирование, и уж тем более написание парсеров, – очень сложное занятие. На самом деле php – один из самых простых языков, изучить который можно на достаточном уровне за пару недель или месяц.
Парсеры тоже просты в написании, именно поэтому начинающие программисты пишут именно их, чтобы освоить язык.
Первое, что приходит на ум человеку, который решил написать подобный скрипт, — нужно использовать функции для работы со строками (strpos, substr и аналогичные) или регулярные выражения. Это совершенно верно, однако есть один нюанс. Если парсеров нужно будет писать много, то придется разрабатывать свою библиотеку, чтобы не переписывать сто раз одни и те же конструкции, но на это уйдет тонна времени, а учитывая то, что уже существуют аналогичные библиотеки, такое занятие и вовсе оказывается бессмысленным.
Идеальным вариантом для новичка станет изучение библиотеки PHP Simple HTML DOM Parser. Как можно догадаться из названия, она очень проста в освоении. Рассмотрим базовый код:

Более подробно можно посмотреть на сайте:
simplehtmldom.sourceforge.net

Библиотека, как уже было сказано выше, очень проста и лучше всего подходит для начинающего программиста, плюс ко всему она работает достаточно быстро и не сильно требовательна к ресурсам сервера.
Есть у этой библиотеки один минус – далеко не все страницы ей оказываются по зубам. Если какой-либо элемент не отображается, но точно известно, что он там есть, лучше воспользоваться библиотекой DOM (Document Object Model). Она хороша во всем, кроме скорости разработки и понятности.

Источник

Пишем парсер контента на PHP

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

Если вы попали на эту статью из поиска, то перед вами, наверняка, стоит конкретная задача и вы еще не задумывались над тем, для чего ещё вам может пригодится парсер. Поэтому, перед тем как вдаваться в теорию и непосредственно в код, предлагаю прочесть предыдущею статью – парсер новостей, где был рассмотрен один из простых вариантов, да и я буду периодически ссылаться на неё.

Работать мы будем с CURL, но для начала давайте разберёмся, что эта аббревиатура обозначает. CURL – это программа командной строки, позволяющая нам общаться с серверами используя для этого различные протоколы, в нашем случаи HTTP и HTTPS. Для работы с CURL в PHP есть библиотека libcurl, функции которой мы и будем использовать для отправки запросов и получения ответов от сервера.

Как парсить данные с сайта php. Смотреть фото Как парсить данные с сайта php. Смотреть картинку Как парсить данные с сайта php. Картинка про Как парсить данные с сайта php. Фото Как парсить данные с сайта php

Как можно увидеть из скриншота все категории находятся в ненумерованном списке, а подкатегории:

Как парсить данные с сайта php. Смотреть фото Как парсить данные с сайта php. Смотреть картинку Как парсить данные с сайта php. Картинка про Как парсить данные с сайта php. Фото Как парсить данные с сайта php

Внутри отельного элемента списка в таком же ненумерованном. Структура несложная, осталось только её получить. Товары мы возьмем из раздела «Все телефоны»:

Как парсить данные с сайта php. Смотреть фото Как парсить данные с сайта php. Смотреть картинку Как парсить данные с сайта php. Картинка про Как парсить данные с сайта php. Фото Как парсить данные с сайта php

На странице получается 24 товара, у каждого мы вытянем: картинку, название, ссылку на товар, характеристики и цену.

Пишем скрипт парсера

Если вы уже прочли предыдущею статью, то из неё можно было подчеркнуть, что процесс и скрипт парсинга сайта состоит из двух частей:

Основной метод, который у нас будет – это getPage() и у него всего один обязательный параметр URL страницы, которой мы будем парсить. Что ещё будет уметь наш замечательный метод, и какие значения мы будем обрабатывать в нем:

Конечно, обрабатываемых значений много и не всё мы будем использовать для нашей сегодняшней задачи, но разобрать их стоит, так как при парсинге больше одной страницы многое выше описанное пригодится. И так добавим их в наш скрипт:

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

Так мы обезопасим себя от ситуации, когда по какой-либо причине не создался файл.

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

После того, как мы инициализировали соединения через функцию curl_setopt(), установим несколько параметров для текущего сеанса:

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

Если вывести на экран, то у вас должна быть похожая картина:

Как парсить данные с сайта php. Смотреть фото Как парсить данные с сайта php. Смотреть картинку Как парсить данные с сайта php. Картинка про Как парсить данные с сайта php. Фото Как парсить данные с сайта php

Если произойдет ошибка, то результат будет выглядеть так:

Как парсить данные с сайта php. Смотреть фото Как парсить данные с сайта php. Смотреть картинку Как парсить данные с сайта php. Картинка про Как парсить данные с сайта php. Фото Как парсить данные с сайта php

При успешном запросе мы получаем заполненную ячейку массива data с контентом и информацией о запросе, при ошибке заполняется ячейка error. Из первого скриншота вы могли заметить первую неприятность, о которой я выше писал контент сохранился не в переменную, а отрисовался на странице. Чтобы решить это, нам нужно добавить ещё один параметр сеанса CURLOPT_RETURNTRANSFER.

Обращаясь к страницам, мы можем обнаружить, что они осуществляют редирект на другие, чтобы получить конечный результат добавляем:

Теперь можно увидеть более приятную картину:

Как парсить данные с сайта php. Смотреть фото Как парсить данные с сайта php. Смотреть картинку Как парсить данные с сайта php. Картинка про Как парсить данные с сайта php. Фото Как парсить данные с сайта php

Для того, чтобы получить заголовки ответа, нам потребуется добавить следующий код:

Мы отключили вывод тела документа и включили вывод шапки в результате:

Как парсить данные с сайта php. Смотреть фото Как парсить данные с сайта php. Смотреть картинку Как парсить данные с сайта php. Картинка про Как парсить данные с сайта php. Фото Как парсить данные с сайта php

Для работы со ссылками с SSL сертификатом, добавляем:

Предлагаю проверить, а для этого я попробую вытянуть куки со своего сайта:

Как парсить данные с сайта php. Смотреть фото Как парсить данные с сайта php. Смотреть картинку Как парсить данные с сайта php. Картинка про Как парсить данные с сайта php. Фото Как парсить данные с сайта php

Всё получилось, двигаемся дальше и нам осталось добавить в параметры сеанса: прокси, заголовки и возможность отправки запросов POST:

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

Теперь, при помощи нашего класса Parser, мы можем сделать запрос и получить страницу с контентом. Давайте и поступим:

Следующим шагом разбираем пришедший ответ и сохраняем название и ссылку категории в результирующий массив:

Чуть более подробно работу с phpQuery я разобрал в первой статье по парсингу контента. Если вкратце, то мы пробегаемся по DOM дереву и вытягиваем нужные нам данные, их я решил протримить, чтобы убрать лишние пробелы. А теперь выведем категории на экран:

Как парсить данные с сайта php. Смотреть фото Как парсить данные с сайта php. Смотреть картинку Как парсить данные с сайта php. Картинка про Как парсить данные с сайта php. Фото Как парсить данные с сайта php

В результате мы получили все ссылки на категории. Для получения товаров используем тот же принцип:

Получаем страницу, тут я увеличил время соединения, так как 5 секунд не хватило, и разбираем её, парся необходимый контент:

Теперь проверим, что у нас получилось, и выведем на экран:

Как парсить данные с сайта php. Смотреть фото Как парсить данные с сайта php. Смотреть картинку Как парсить данные с сайта php. Картинка про Как парсить данные с сайта php. Фото Как парсить данные с сайта php

Источник

Парсинг сайтов регулярными выражениями PHP

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

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

Получение страниц сайтов с помощью file_get_contents

Итак, давайте для примера получим главную страницу моего сайта и выведем ее на экран (сделайте это):

Давайте теперь выведем не страницу сайта, а ее исходный код. Запишем его в переменную $str и выведем на экран с помощью var_dump:

Должна быть включена директива allow_url_fopen http://php.net/manual/ru/filesystem.configuration.php#ini.allow-url-fopen

Парсинг с помощью регулярных выражений

Подводные камни

Таким образом я рекомендую вам всегда работать с этими двумя модификаторами, вот так:

Попробуем разобрать теги

Пусть мы каким-то образом (например, через file_get_contents) получили HTML код сайта. Вот он:

Итак, получим содержимое тега (в переменной $str хранится HTML код, который мы разбираем):

В общем-то ничего сложного нет, только обратите внимание на то, что как уголки тегов, так и слеш от закрывающего тега экранировать не надо (последнее верно, если ограничителем регулярки является не слеш /, а, например, решетка #, как у нас сейчас).

Итак, перепишем регулярку с учетом атрибутов:

Поправим эту проблему и вернемся к дальнейшему обсуждению:

Получение блока по id

Давайте рассмотрим следующий код:

Напишем регулярку, которая получит содержимое блока с id, равным content.

Итак, попытка номер один (не совсем корректная):

Давайте поправим нашу регулярку:

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

Обратите внимание, что после

А вот регулярка title\s*?=\s*?([“\’])(.+?)\1 будет корректно обрабатывать

Проблема вложенных блоков

Наша регулярка вытянет только

Вытягиваем заданные блоки

Получение href ссылок

Ссылки из блока

Получение элементов по классу

Кодировка документа

В этом случае следует воспользоваться функцией iconv, которая перекодирует текст из устаревшего windows-1251 в современный utf-8:

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

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

Источник

Учимся писать парсер сайта своими руками

Сегодня я приведу вам в пример, который возможно понадобиться начинающим парсерам и возможно вы найдете в нем ценную информацию. В комментариях очень хотелось бы увидеть возможные изменения для упрощения задачи, так что всегда рад услышать ваши мнения.
Передо мной стояла задача заполнить интернет магазин товарами в количестве свыше 50 тыс наименований. Оригиналы товаров лежали на сайтах поставщиков.
Особо заморачиваться с кодом и решением я не стал, поэтому сделал все максимально просто и быстро.
Прикрепленные файлы буду выкладывать на проекте моих друзей и партнеров 2file.ru Будьте уверены что все ссылки всегда будут действующими и вы всегда сможете скачать любой файл из данной инструкции. +размер файлов не ограничен, нет времени ожидания и нет рекламмы.

Ок, теперь у нас стоит апач, есть скачанный сайт. Далее для удобства я перенес все скачанные странички в папку xampp для дальнейшей работы с ними. Чтобы не усложнять код, я переименовал все страницы в порядковые номера чтобы получилось 1.html, 2.html… и так далее. Сделать это очень просто. Например через total commender в меню файлы-групповое переименование. Далее в папке с переименованными страницами я создал index.php файл. Теперь начнем разбираться в коде:

Первой строчкой я указываю на открытие 132.html, в котором будет осуществляться выборка данных.

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

Далее осуществляется вывод полученных данных на экран и спуск на строчку вниз br.

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

Должно получится что-то вроде (значение1, значение2, значение3 &ltbr>)

Теперь немного дополним наш код чтобы прогнать все наши скачанные страницы. Решил сделать с помощью цикла и получилось что-то вроде этого:

Отлично, теперь мы видим что-то вроде этого:
значение#значение#значение
значение#значение#значение

Для удобства дальнейшей работы я использовал #. Теперь копируем все что получилось, загоняем в excel, нажимаем данные-текст по столбцам и ставим # в качестве разделителя столбцов. Отлично, мы получили таблицу с результатами нашего парсинга. УРА

Дальнейшая работа зависит от вашей фантазии и цели. Спасибо за внимания, надеюсь на инвайт.

Источник

Leave a Reply

Your email address will not be published. Required fields are marked *