Скрипт Human Emulator парсинга HTML-страницы с использованием XPath

В этой статье мы рассмотрим один из примеров написания скрипта для парсинга HTML-страниц с использованием XPath на примере сайта bing.com.


Сперва определимся с тем, что такое XPath и зачем оно нужно, если есть регулярные выражения?


XPath (XML Path Language) — это язык запросов к элементам XML-подобного документа (далее для краткости просто XML).

XPath призван реализовать навигацию по DOM в XML.

Regexp — формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов.

По сути это строка-образец (шаблон), состоящая из символов и метасимволов и задающая правило поиска.

Итак, главная разница в том, что XPath специализируется на XML, а Regexp — на любом виде текста.

В: Зачем использовать XPath, если есть regexp, в котором можно сделать тоже самое?
О: Простота поддержки.

Синтаксис у regexp такой, что уже через неделю может быть проще всё переписать, чем вносить изменения,
а с XPath можно спокойно работать. И синтаксис у xpath довольно компактный,xml’ё-фобы могут быть спокойны.

Простой пример для вдохновения — получим значение атрибута «href» у, например, тега «a».

Быстро (несколько небольших страниц) пробежаться по основам XPath можно в туториале от W3Schools.

Как использовать XPath в PHP можно почитать в документации на php.net.
И в небольшом тутораильчике от IBM DeveloperWorks.

Теперь определимся с необходимым функционалом скрипта:

* Возможность указывать произвольный поисковый запрос


* Парсим только первую страницу поисковой выдачи


* Из поисковой выдачи нам нужно:


* заголовок


* ссылка


* номер в выдаче

Исходя из нашего ТЗ составляем примерный алгоритм работы скрипта:

1) Заходим на bing.com


2) Вводим поисковую фразу


3) Получаем со страницы необходимый результат

Приступим к написанию парсера поисковой выдачи http://bing.com.
Для начала, создадим базовый каркас скрипта.

В настройки добавим переменную для хранения поискового запроса.

Заходим на сайт.

Вводим поисковую фразу.

Сохраним в переменную содержимое страницы.

Настроим xpath-объект:

Теперь у объекта $xpath есть метод «query» в который мы будем передавать наше xpath-выражение.
Давайте начнём создавать xpath-выражение.
Открыв исходный код страницы с результатами поисковой выдачи увидим, что сами результаты находятся внутри тега «li».

Т.о. наше xpath-выражение выберет со страницы все поисковые результаты.

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

Здесь стоит обратить внимание на ветку if, где мы сравниваем кол-во результатов xpath-поиска с нулём.
Если наше xpath-выражение ничего не нашло, то это может означать две вещи:


* Bing действительно ничего не нашёл.


* Bing что-то нашёл, но поменял вёрстку на странице, и наше xpath-выражение необходимо исправлять.

2-й пункт достаточно коварный, в таких случаях, когда xpath-выражение ничего не находит необходимо дополнительно
сверятся, чтобы удостоверится, что xpath-выражение не устарело (хотя и это не даст 100% гарантий).

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

А если результатов по поисковому запросу нет, то:

Т.о. мы получаем такую конструкцию проверки:


— Если xpath-запрос ничего не нашёл и поисковый запрос ничего не нашёл, то на странице будет html-код с «No results found».


— Если xpath-запрос ничего не нашёл, а поисковый запрос что-то нашёл, то на странице будет html-код с «N results».

Обновим проверку результата xpath-запроса.

Если всё хорошо и что-то нашлось, то у нас в $results будет N сущностей с результатами отработки xpath-запроса.

Каждая сущность будет содержать такой HTML-код

Теперь можно приступить непосредственно к выборке интересующих нас данных.

Получаем номер в поисковой выдаче.

Получаем заголовок.

В данном случае мы в метод «query» передали вторым параметром текущий $item и в xpath-запросе не указывали «//» (т.е. искать сначала страницы).

2-й параметр означает контекст поиска для xpath-запроса, т.е. искать будем не по всей странице, а только по маленькому html-кусочку из $item.
И, наконец-то, получаем ссылку.

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

Полезные ссылки:

Wikipedia XPatch
Wikipedia Rugular expression
W3.org XPatch
W3schools XPatch
Mozilla.org XPatch
PHP.net
Ibm.com x-xpatch
Ibm.com x-xpatchphp

Скрипт написан 28.04.2015 в Human Emulator 4.9.18 Advanced.

скачать скрипт

Сбор meta keywords с помощью Human Emulator

Парсер meta keywords с сайтов из поисковой выдачи Google по заданным поисковым запросам. Видео для наглядности ускорено.

Сайт программы

Присоединяйтесь к нам в ВК:
https://vk.com/humanemulator
https://vk.com/xscripts
https://vk.com/club130582676

Скрипт Human Emulator cборщик трастовых сайтов для размещения активных ссылок

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

Так же с помощью этого скрипта можно посмотреть активность любого интересующего вас сайта в яндекс за любой промежуток времени.

Собственно в чём фишка. Мы берём подобранный нами сайт и вводим в яндекс такой вот запрос — «http://site.ru» date:20110901..20111020. В выдачу яндекс выдаст все последние проиндексированные ссылки, которые появились в интрнете за заданный промежуток времени. Мы получаем все страницы, на которых стоят эти ссылки. Далее скрипт парсит выдачу яндекса. Теперь у нас есть ссылки из выдачи, далее проверяем их Тиц и удаляем ненужные, а затем проверяем оставшиеся ссылки на наличие обратной кликабельной ссылки. Опять таки удаляем лишнее. Вот и всё база готова.

Настройки скрипта:

Собственно сам скрипт:

Скрипт написан 16.07.2012 в Human Emulator 4.4.19 Advanced.
Скрипт исправлен 08.04.2013 в Human Emulator 4.6.5 Advanced.

скачать скрипт

Скрипт Human Emulator сборщик прокси с hidemyass.com

Этот скрипт собирает прокси с сайта hidemyass.com.

Скрипт достаточно простой. Перед сбором скрипт выставляет нужные галочки в настройках листа с прокси и нажимает обновить. В итоге мы имеем лист с прокси или socks, который и парсим в заданный в настройках скрипта файл. Единственный момент, который несколько усложнил скрипт это скрытые строки в поле ip. Эти строки пришлось вырезать и удалять лишнее.

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

Скрипт написан 11.03.2012 Human Emulator 4.4.9 Advanced.
Скрипт обновлён 11.08.2012
Скрипт обновлён 10.04.2013

скачать скрипт

Cкрипт Human Emulator сбора ключевых слов из meta keywords сайтов из выдачи Яндекс

Это скрипт аналогичен скрипту Cкрипт Human Emulator сбора ключевых слов из meta kyewords единственное отличие между ними этот скрипт написан под выдачу Яндекс, а предыдущий разбирает выдачу Google.

Скрипт работает следующим образом: вбивается поисковый запрос в yandex. Далее скрипт идёт по поисковой выдаче и собирает meta keywords со всех страниц, которые попали в выдачу по этому запросу.Все слова записываются в файл с названием в виде запроса. В конце обработки запроса скрипт сортирует слова и убирает дубликаты из файла. Затем берёт следующий запрос и всё по новой. И так до тех пор пока не закончатся поисковые запросы. В результате мы имеем текстовые файлы с ключевыми словами.

Скрипт на вход принимает файл с поисковыми запросами в формате:

сбор meta keywords
сбор кеев meta
сбор мета keywords
и т.д.

В результате работы скрипта имеем текстовые файлы, например: сбор meta keywords.txt,сбор кеев meta.txt и т.д. в формате:
оптимизация
оптимизация страниц сайта
паетки
пластик
пластика
подбор запросов для продвижения
подвеска
поисковая
поисковая выдача
поисковые запросы
поисковые системы
и т.д.

Настройки скрипта:

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

Скрипт написан 17.03.2013 в Human Emulator 4.6.5 Advanced.

скачать скрипт

Cкрипт Human Emulator сбора ключевых слов из meta keywords сайтов

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

Скрипт работает следующим образом: вбивается поисковый запрос в google. Далее скрипт идёт по поисковой выдаче и собирает meta keywords со всех страниц, которые попали в выдачу по этому запросу.Все слова записываются в файл с названием в виде запроса. В конце обработки запроса скрипт отсортировывает слова и убирает дубликаты из файла. Затем берёт следующий запрос и всё по новой. И так до тех пор пока не закончатся поисковые запросы. В результате мы имеем текстовые файлы с ключевыми словами.

Скрипт на вход принимает файл с поисковыми запросами в формате:

сбор meta keywords
сбор кеев meta
сбор мета keywords
и т.д.

В результате работы скрипта имеем текстовые файлы, например: сбор meta keywords.txt,сбор кеев meta.txt и т.д. в формате:

оптимизация
оптимизация страниц сайта
паетки
пластик
пластика
подбор запросов для продвижения
подвеска
поисковая
поисковая выдача
поисковые запросы
поисковые системы
и т.д.

Настройки скрипта:

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

Скрипт написан 1.03.2013 в Human Emulator 4.6.5 Advanced.

скачать скрипт

Скрипт Human Emulator сборщик WordPress сайтов

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

Скрипт работает следующим образом: берёт ключи из файла с поисковыми фразами и вводит их в поле поиска google. Затем разбирает поисковые результаты Google на ссылки. Переходит по ссылкам и проверяет действительно это WordPress или нет. Если сайт прошёл проверку добавляет его в наш список WordPress сайтов. В конце скрипт удаляет дубликаты из списка. И у вас на руках уникальная база WordPress сайтов. С помощью добавления в скрипт дополнительных проверок вы сможете отфильтровать список для ваших целей.

На входе скрипт принимает файл с поисковыми фразами в формате:

/wp-admin/
/wp-admin/ seo
/wp-admin/ ceo
/wp-admin/ sites
wordpress сайты

На выходе получаем файл со списком WP сайтов в формате:

wordpress.org
fr.wordpress.org
t-prod.net
wordpress.buldozer.fr
wp-admin.org.ua
wordpresso.org
nerdfrat.com
fr.forums.wordpress.com
… и т.д.

Настройки скрипта:

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

Скрипт написан 18.01.2013 в Human Emulator 4.6.2 Advanced.
На момент публикации статьи 21.01.2013 скрипт был рабочий.

скачать скрипт

Скрипт Human Emulator парсер поисковой выдачи mail.ru

Ещё один парсер выдачи поисковых результатов пополнил нашу коллекцию парсеров. На этот раз это парсер Маил.ру.
Это скрипт, который как и предыдущие парсеры демонстрирует как можно разобрать поисковую выдачу теперь на примере mail.ru.

Скрипт работает следующим образом: берём ключи из файла с поисковыми фразами и вводим их в поле поиска mail.ru.
Затем разбираем поисковую выдачу маил.ру на ссылки.

Этот скрипт так же является заготовкой под любой ваш скрипт, который будет работать с выдачей Mail.ru.
Диапозон его применения аналогичен трём предыдущим парсерам поисковой выдачи: парсеру Яндекса и парсеру Гугла и парсеру Рамблер

На входе скрипт принимает файл с поисковыми фразами в формате:
human emulator
парсер human emulator
парсер mail.ru xhe
xhe парсер
mail.ru parser

Настройки скрипта:

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

Скрипт написан 8.10.2012 в Human Emulator 4.4.19 Advanced.
На момент публикации статьи 14.10.2012 скрипт был рабочий.

скачать скрипт

Cкрипт Human Emulator парсер поисковой выдачи Рамблера

Мы решили дополнить свою коллекцию парсеров выдачи поисковых машин ещё одним и представляем вашему вниманию парсер Рамблера.
Это скрипт, работает аналогично двух предыдущим парсерам:Яндекса и Гугл.

Скрипт берёт ключи из файла с поисковыми фразами и вводим их в поле поиска на сайте rambler.ru. Затем разбирает поисковую выдачу Rambler на ссылки. Эти ссылки выводит в окно отладки для наглядности работы скрипта.

Как и предыдущие скрипты этот скрипт является заготовкой под любой ваш скрипт, который будет работать с выдачей Rambler.

На входе скрипт принимает файл с поисковыми фразами в формате:

human emulator
парсер human emulator
парсер рамблер xhe
xhe парсер
rambler parser

Настройки скрипта:

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

Скрипт написан 4.10.2012 в Human Emulator 4.4.19 Advanced.
На момент публикации статьи 5.10.2012 скрипт был рабочий.

скачать скрипт