Что такое парсинг и как правильно парсить

Содержание:

Парсер контента: введение

Допустим, интересующая нас информация есть на каком-нибудь стороннем сайте и там же обновляется. Разумеется, можно периодически посещать сайт с информацией, копировать ее оттуда и обновлять у себя на сайте пресловутыми: Ctrl+C и Ctrl+V. Но можно и не заходить, а поручить задачу несложному скрипту — парсеру, который по требованию: зайдет на сайт-донор, найдет и вырежет нужную нам информацию и отобразит ее на нашем сайте. Проще говоря, информация с другого сайта будет публиковаться на вашем в полностью автоматическом режиме. Если перспектива для вас радужная — читаем далее.

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

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

Ошибка парсера xml: что это?

Иногда пользователи данной программы встречают ошибку парсера xml. Что это означает, практически никто не знает. В основном проблема заключается в том, что используются разные версии синтаксического анализатора XML, когда одна строже другой.

Также вполне вероятно у Вас имеется не точная копия файла

Внимательно посмотрите, как копируются файлы и обратите внимание на то, как берется контрольная сумма MD5 двух файлов, одинакова ли она. Говорить о том, что такое простыми словами нейминг это все равно, что сказать об возможных проблемах данной программы.

В таких случаях единственное, что можно сделать, это проверить строку 1116371. Вышеуказанная программа на С # покажет данную строку, а Вы сможете изменить кодировку UTF-8.

Парсеры сайтов в зависимости от используемой технологии

Парсеры на основе Python и PHP

Такие парсеры создают программисты. Без специальных знаний сделать парсер самостоятельно не получится. На сегодня самый популярный язык для создания таких программ Python. Разработчикам, которые им владеют, могут быть полезны:

  • библиотека Beautiful Soup;
  • фреймворки с открытым исходным кодом Scrapy, Grab и другие.

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

Парсеры-расширения для браузеров

Парсить данные с сайтов могут бесплатные расширения для браузеров. Они извлекают данные из html-кода страниц при помощи языка запросов Xpath и выгружают их в удобные для дальнейшей работы форматы —  XLSX, CSV, XML, JSON, Google Таблицы и другие. Так можно собрать цены, описания товаров, новости, отзывы и другие типы данных.

Примеры расширений для Chrome: Parsers, Scraper, Data Scraper, kimono.

Парсеры сайтов на основе Excel

В таких программах парсинг с последующей выгрузкой данных в форматы XLS* и CSV реализован при помощи макросов — специальных команд для автоматизации действий в MS Excel. Пример такой программы — ParserOK. Бесплатная пробная версия ограничена периодом в 10 дней.

Парсинг при помощи Google Таблиц

В Google Таблицах парсить данные можно при помощи двух функций — importxml и importhtml.

Функция IMPORTXML импортирует данные из источников формата XML, HTML, CSV, TSV,  RSS, ATOM XML в ячейки таблицы при помощи запросов Xpath. Синтаксис функции:

  
IMPORTXML("https://site.com/catalog"; "//a/@href")
IMPORTXML(A2; B2)
  

Расшифруем: в первой строке содержится заключенный в кавычки url (обязательно с указанием протокола) и запрос Xpath.

Знание языка запросов Xpath для использования функции не обязательно, можно воспользоваться опцией браузера «копировать Xpath»:

Вторая строка указывает ячейки, куда будут импортированы данные.

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

У IMPORTHTML более узкий функционал — она импортирует данные из таблиц и списков, размещенных на странице сайта. Синтаксис функции:

  
IMPORTHTML("https://https://site.com/catalog/sweets"; "table"; 4)
IMPORTHTML(A2; B2; C2)
  

Расшифруем: в первой строке, как и в предыдущем случае, содержится заключенный в кавычки URL (обязательно с указанием протокола), затем параметр «table», если хотите получить данные из таблицы, или «list», если из списка. Числовое значение (индекс) означает порядковый номер таблицы или списка в html-коде страницы.

Вред парсинга для сайта-«донора»

Регулярно «шарящая» по твоему сайту программа создает конкретную нагрузку на серверы, мешая владельцу ресурса вести бизнес. А значит, что такое парсинг сайта для его владельца? – Паразитная нагрузка, не приносящая прибыли. Да и репутация ресурса, с которого «спарсили» данные пользователей, может оказаться подмоченной.

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

Что такое парсер и как он работает

Парсер представляет собой программу, скрипт, реализованный на одном из языков программирования (скажем, Python). Скрипт этот «тянет» данные с сайтов по нужным нам условиям.

Алгоритм работы парсера такой:

  • Получаем исходный код страницы (правый щелчок по интересующему элементу нам в помощь), и оправляем в парсер на обработку.
  • Проходясь по html-коду, как по обычному тексту, парсер отыскивает в нем определенные соответствия.
  • Программа сравнивает, сопоставляет и отбирает массивы данных, которые нам интересны.

Как итог, парсер сохраняет результат в удобном пользователю формате. Это может быть файл SQL, XML, банальный TXT, но чаще – XLS (таблица Excel). Проще говоря, парсер бродит по указанным ему ссылкам, собирая оттуда интересную нам информацию в файл.

Каков алгоритм, по которому работает парсер?

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

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

Для чего нужен парсинг

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

Парсеры имеют следующие возможности:

  • Обновление данных, позволяющих иметь самую свежую информацию (курс валют, новости, прогноз погоды).
  • Сбор и моментальное дублирование материала с других сайтов, для выкладки на своем интернет-проекте. Материал, полученный посредством парсинга, как правило подвергается рерайтингу.
  • Соединение потоков данных. Происходит получение огромного количества сведений с разных ресурсов, что очень удобно при наполнении новостных сайтов.
  • Парсинг существенно ускоряет работу с ключевыми словами или фразами. Благодаря этому становится возможным быстро выбирать необходимые запросы для раскрутки проекта.

Плюсы парсера

Программа, осуществляющая процесс парсинга, в сравнении с человеком обладает рядом преимуществ:

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

Конечно, итоговый результат все еще будет нуждаться в некоторой обработке

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

Что это дает, совершенно ясно — экономию времени и сил.

Для чего нужен парсинг?

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

В общем случае, парсинг необходим:

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

Что такое турбо парсер?

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

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

Определение цели

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

А в современном информационном мире парсить — что это значит? Эту задачу решает конкретный скрипт, написанный конкретным программистом для решения конкретной задачи. Постановщик задачи может и не предполагать, что и как делает этот скрипт. Но он всегда знает, что и как он хочет найти.

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

Хорошая идея — поставить цель найти информацию свежую, точную и объективно достоверную. Отличная идея — определить достижение цели как правильное движение по тегам страниц. HTML — это реальная среда для представления информации, и она идеально точно позволяет различить нужную информацию от рекламного спама.

Что такое парсинг

Узнай первым о новых статьях в нашем блоге

Парсинг — это сопоставление строки естественного языка или языка программирования с формальными правилами.

Парсинг — это инструмент работы со строковыми данными. Приведем пример, чтобы было понятно.

Представьте себя радистом на войне. Вы получаете зашифрованное сообщение. У вас есть правила дешифровки. Вы начинаете разгадывать послание согласно этому методу.Вы смотрите вначале на символ из полученного сообщения. Потом на свою таблицу с его значением. Например, цифре “1” соответствует буква “Я”. Вы сопоставляете все символы и получаете то сообщение, которое можно прочитать.

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

Парсинг сайта — что это

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

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

Программа в одном файле может собрать информацию.

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

Этапы парсинга данных

  • Сбор контента.Обычно в программу для парсинга загружается код страницы сайта. И с ним уже работает специальный скрипт — разбивает весь код на лексемы, анализирует, какая информация нужна пользователю.
  • Извлечение информации.Пользователю не нужна вся информация со страницы. Вернемся к примеру выше. Нас интересуют только отзывы клиентов под конкретными товарами — например, кормом для кошек. Парсер будет находить в коде страницы то место, где указана категория товара: “Корм для кошек”. Далее он определит то место на странице, где размещены комментарии. И извлечет в конечный файл только тексты комментариев.
  • Сохранение результатов.Когда вся нужная информация извлечена с сайтов, нужно ее сохранить. Обычно такие данные оформляют в виде таблиц, чтобы было наглядное представление. Можно вносить записи в базу данных. Как будет удобнее аналитику.
  • Защита сайта от парсинга Любой владелец сайта хочет защитить свой контент. Кража любой информации — плохо. Ваш контент может появиться на другом ресурсе, ваша статья может перестать считаться уникальной.Мы расскажем о нескольких методах, как можно предотвратить кражу контента с вашего ресурса.
  • Разграничение прав доступа.Это самый простой метод. Вы можете скрыть информацию о структуре сайта. Сделать так, чтобы она была доступна только администраторам.
  • Установка временной задержки между запросами.Этот метод хорошо работает, когда на сервер направляются хаотические интенсивные запросы. Они идут от одной машины с разными промежутками. Вы можете установить временную задержку между запросами, поступающими от одной машины.
  • Создание черного и белого списка.Это списки пользователей. В белом находятся добропорядочные пользователи. Черный список для тех людей, которые нарушили правила поведения сайта, пытались украсть контент и т. д.
  • Установка периода обновления страниц.Чтобы снизить эффективность парсинга, установите время обновления страниц в файле sitemap.xml. Вы можете ограничить частоту запросов, объем загружаемых данных.
  • Использование методов защиты от роботов.Сюда относится капча, подтверждение регистрации на ресурсе. То, что сможет выполнить человек, но не сможет проделать машина.

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

Застряв посередине

Попробуем научить парсер работать с инфиксными выражениями, вроде .

Текущая реализация вернёт нам , остановившись на токене . Этот токен как раз говорит нам о том, как парсить дальше.

Введём новый тип , который отличается от тем, что принимает на вход , идущий перед ним. В случае с это будет .

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

Бинарные операторы, типа и будем выражать через :

Добавим в метод использование инфиксных парслетов:

У этой реализации есть две проблемы:

  1. Все выражения разбираются как право-ассоциативные: =>
  2. Все операции имеют одинаковый приоритет: =>

Реализация парсера на PHP

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

Когда сайт-донор и нужная нам страница для парсинга найдена, запоминаем ее урл и переходим к следующему этапу. Создаем в блокноте текстовый файл, например parser.php и помещаем в него следующий код:

<?php

//откуда будем парсить информацию
 $content = file_get_contents('полный урл страницы с http:// с которого будем вырезать информацию');

// Определяем позицию строки, до которой нужно все отрезать
 $pos = strpos($content, 'здесь кусок кода/текста который размещен перед нужным текстом');

//Отрезаем все, что идет до нужной нам позиции
 $content = substr($content, $pos);

// Точно таким же образом находим позицию конечной строки
 $pos = strpos($content, 'здесь кусок кода/текста который стоит в конце нужного нам текста');

// Отрезаем нужное количество символов от нулевого
 $content = substr($content, 0, $pos);

//если в тексте встречается текст, который нам не нужен, вырезаем его
 $content = str_replace('текст который нужно вырезать','', $content);

// выводим спарсенный текст.
 echo $content;

echo "вставляем сюда завершающий код";
 ?>

Итак, какие-то 8 строчек кода и сторонний контент автоматически публикуется на нашем блоге. Красным цветом в коде обозначены места, которые вы обязательно должны отредактировать, зеленым цветом — при необходимости. Если необходимости нет, то можно просто удалить эти строчки или запретить им обрабатываться (я про строчки в которых зеленый текст)  —  ставим перед строчкой два слеша — //

Нужны пояснения к кускам кода/текста, которые обрамляют нужный нам текст? Тут все просто, мы должны указать начальную и конечную позицию в тексте, который нужно парсить. Открываем исходную страницу на сайте-доноре и ищем нужный нам текст. Как правило, он будет начинаться с какой нибудь html-разметки, что-то типа этого — <td><p><strong><em> и заканчиваться такой же абракадаброй — например, </td><td>&nbsp;</td><td>&nbsp;</td></tr>. Копируем эти символы в начальную и конечную позиции (2 и 3 красная строчки). Помним, наш скрипт спарсит текст, который находится между этими позициями на сайте.

parser.php готов. Копируем его в корень своего сайта и запускаем в браузере http://мой сайт/parser.php. Если вы все сделали правильно, вы увидите вырезанный/спарсенный кусок текста. Разумеется, он индексируется и не содержит никаких следов того, что вы его забрали с другого сайта.

Парсер сайта: что это за программа?

Многим будет интересно узнать, что это за программа «парсер сайта». Её используют для обработки и сбора данных, преобразовывая их в дальнейшем в структурированный формат. Обычно парсер использовать предпочитают для работы с текстами.

Программа позволяет сканировать наполнение веб-страниц, различные результаты выдачи поисковых систем, текст, картинки и множество сведений. С её помощью можно идентифицировать большой объем непрерывно обновляемых значений. Это облегчит работу также, как решение настроить кампанию Яндекс Директ для повышения уровня товарооборота и привлечения клиентов.

Определение перспективных ключевых фраз

Когда денег на SEO мало (в случае с МСБ это почти всегда так), продвигаться по ядру из тысяч запросов не получится. Придется выбирать самые «жирные» из них, а остальные откладывать до лучших времен.

Один из способов — выбрать фразы, по которым страницы сайта находятся с 5 по 20 позицию в Google. По ним можно быстрее и с меньшими затратами выйти в ТОП-5. Ну и скачок позиций, скажем, с двенадцатой на третью даст намного больше трафика, чем с 100-й на 12-ю (узнать точный прирост трафика вы можете с помощью сценарного прогноза в Data Studio).

Позиции по ключевым фразам в Google доступны в Search Console. Для их выгрузки есть шаблон, описанный в Codingisforlosers.

Для выгрузки ключей из ТОП-20 необходимо:

  • создать копию шаблона Quick Wins Keyword Finder (все шаблоны в статье закрыты от редактирования, просьба не запрашивать права доступа — просто создайте копию и используйте ее);
  • установить дополнение для Google Sheets Search Analytics for Sheets (для настройки экспорта отчетов из Search Console в Google Sheets);
  • иметь доступ к аккаунту в Search Console и накопленную статистику по запросам (хотя бы за пару месяцев).

Открываем шаблон и настраиваем выгрузку данных из Search Console (меню «Дополнения» / «Search Analytics for Sheets» / «Open Sidebar»).

Для автоматической выгрузки на вкладке «Requests»:

  • в поле «Verified Site» выбираем сайт (после подтверждения доступа к аккаунту в появится список сайтов);
  • в поле «Group By» выбираем «Query» и «Page» (то есть мы будем извлекать данные по запросам и страницам);
  • в поле «Results Sheet» обязательно задаем «RAW Data», иначе шаблон работать не будет.

Нажимаем кнопку «Request Data». После экспорт данных на листе «Quick Wins» указаны запросы, страницы, количество кликов, показов, средний CTR и позиция за период. Эти ключи подходят для приоритетного продвижения.

Помимо автоматической выгрузки в шаблоне есть ручной режим. Перейдите на вкладку «MANUAL» и введите данные (ключи, URL и позиции). На вкладке «Quick Wins » будет выборка перспективных запросов.

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

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

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

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

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

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

  1. Оптимальный — если в штате есть программист (а еще лучше — несколько программистов). Поставьте задачу, опишите требования и получите готовый инструмент, заточенный конкретно под ваши задачи. Инструмент можно будет донастраивать и улучшать при необходимости.
  2. Воспользоваться готовыми облачными парсерами (есть как бесплатные, так и платные сервисы).
  3. Десктопные парсеры — как правило, программы с мощным функционалом и возможностью гибкой настройки. Но почти все — платные.
  4. Заказать разработку парсера «под себя» у компаний, специализирующихся на разработке (этот вариант явно не для желающих сэкономить).

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

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

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

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

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

Чем парсинг круче работы человека

Парсинг сайта – это монотонная и трудоемкая работа, которую и берет на себя специальная программа

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

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

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

  • В считанные секунды изучать сайт для парсинга, выбранный в каталоге.
  • Задать настройки перед загрузкой, если такое предусмотрено.
  • Аккуратно выделить среди программного кода нужную информацию.
  • Без ошибок выбрать и добавить категории для загрузки.
  • Эффективно сохранить конечный результат и выгрузить товары в любой поддерживаемый формат или в соцсети.

Если сайта нет в списке, можно просто подать заявку на его настройку, и уже через 1-3 рабочих дня вы сможете оценить удобство работы с Q-Parser.

Советуем изучить подробнее: «Выгрузка товаров в социальные сети

Подмена User Agent при использовании cURL

Удалённый сервер видит, какая программа пытается к нему подключиться: это веб-браузер, или поисковый робот, или кто-то ещё. По умолчанию cURL передаёт в качестве User-Agent что-то вроде «curl/7.58.0». Т.е. сервер видит, что подключается не веб-браузер, а консольная утилита.

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

curl URL

Вам не показывается содержимое веб-сайта (может выподиться сообщение о запрете доступа или о плохом боте), но при открытии в браузере вы можете видеть страницу, то используя опцию -A мы можем указать любой пользовательский агент, например:

curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36' URL

Парсинг сайта, на котором текст создаётся с помощью JavaScript

Если контент веб-страницы формируется методами JavaScript, то можно найти необходимый файл с кодом JavaScript и парсить его. Но иногда код слишком сложный или даже обфусцированный. В этом случае поможет PhantomJS.

Особенностью PhantomJS ялвяется то, что это настоящий инструмент командной строки, т.е. может работать на безголовых машинах. Но при этом он может получать содержимое веб-страницы так, как будто бы вы её открыли в обычном веб-браузере, в том числе после работы JavaScript.

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

var webPage = require('webpage');
var page = webPage.create();

page.open('https://support.microsoft.com/en-us/help/12387/windows-10-update-history', function (status) {
  console.log('Stripped down page text:\n' + page.plainText);
  phantom.exit();
});

Для его запуска использую PhantomJS:

phantomjs lovems.js

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

Чтобы отфильтровать нужные мне сведения о последней сборке:

phantomjs lovems.js | grep -E -o 'OS Build +\)' | head -n 1 | grep -E -o '+'

Будет выведено что-то вроде 15063.877.

«Как защититься (от парсинга) по уму? Да никак, всё равно пролезем»

  1. Выдачу Яндекса парсить, как это делают множество SEO-сервисов. «На это спроса побольше, больше денег. Правда, они, в основном, продают целую систему аналитики SEO.» Но мы не парсим выдачу — не просили, да и там через запросов 100 сразу будет капча, нужны чистые прокси, а их сложно достать или дорогие, не так и выгодно… Само собой, больших игроков провести далеко не так просто, и читатели с нами этим делятся (мы сами НЕ парсим ГУГЛ и Яндекс). По опыту, у Яндекса, Гугла и подобных крупных корпораций существует некоторая база с подсетями датацентров (базы прокси у них ведь, обновляются, и крупные игроки на них подписаны и банят). Таким образом, поднятая сеть прокси на ip-адресах, выданных датацентрам, на отлично улетает в бан с выдачей капчи и другими причудами. По итогу остаются только незаконные варианты с закупом прокси у владельцев ботнетов и подобная «грязь», в этом случае у тебя будет реальный пользовательский ip. И даже при этом таким корпорациям очень нужно, чтобы у тебя были «отстоявшиеся» куки, с которыми ты уже «поползал» какое-то время по сайтам, где они могут тебя трекать (к примеру, счётчики посещений). Но как они вообще отличают парсеров от NAT-ов в спальных районах? Условные 100 запросов это ведь всего ничего.
  2. Защита от парсинга: убрав из рассмотрения «великих и ужасных», сосредоточимся на нас, «простых смертных». Если есть те, кто занимается парсингом, обязательно должны быть и те, кто будет стараться им в этом помешать. Играть интереснее с живыми людьми: появляется элемент соперничества, каждая сторона старается перехитрить другую. И, так как собирать информацию вручную никто по-прежнему не намерен, играют они в то, кто сделает бота наиболее похожего на живого человека, и кто сможет эффективнее этих ботов распознавать, продолжая при этом отвечать на запросы реальных пользователей — сайт же призван бизнесу помогать, отталкиваемся мы от этого. И, оставаясь в рамках задачи о бизнес-эффективности, нельзя не учитывать разумное распределение ресурсов и рентабельность мероприятий по, собственно, парсингу и противодействии ему:
    • Защититься от парсинга нельзя (кроме как от «студентов»), но можно повысить порог затрат на него (и временных и денежных). В итоге, те данные, которые мы защищаем (несколько разделов сайта), проще не парсить, а пойти и купить готовую БД, также как покупаем ее мы. В сети валяются таблицы ip адресов парсеров, показывать этому списку капчу при входе — не проблема. Аналогично и генерить id и классы, как делает тот же mail.ru — тоже не проблема и не требует каких-то больших затрат. Новая капча от гугла вообще очень точно определяет, робот или нет. Если есть подозрения, выпилить пользователя и попросить ввести капчу — просто. В конце концов, приманку-HoneyPot для отлова бота никто не отменял. Ну и классика, заменять буквы в тексте, делать маски и тд.
    • И тут мы возразим сами себе: возможно, по отдельности это всё не поможет, но все вместе осложнит вам жизнь настолько, что станет нецелесообразным. При этом все эти техники вообще не требуют больших затрат. Правда, все эти техники прекрасно обходятся, так что по сути — защиты нет. Динамические прокси, сервисы распознающие капчи индусами, и selenium с хорошо прописанным алгоритмом действий. Всё, чего можно добиться — разработка парсера будет стоить подороже, возможно кого-то это и отпугнет, но если целевой сайт — это не каталог на полторы страницы местного офиса «Рога и Копыта», то повышение затрат мало кого отпугивает.
    • При защите всегда речь про использование типовых поведенческих моделей реальных посетителей, плюс систем, адекватно идентифицирующей «белых» ботов (яндекс, гугл и тп). А чтобы подстроиться под реального посетителя, нужно знать набор типовых карт переходов. И тогда простым пулом прокси при парсинге тут не обойдешься. Система не на 100% защищает, но поставленную задачу решает — по статистике просмотра можно понять, когда весь сайт отсканили. Так делают либо парсеры, либо поисковые системы. Но поисковые системы реагируют на robots.txt, а парсеры нет.

Поиск контента

Когда владелец только создает свой сайт, перед ним встает проблема: откуда брать контент для заполнения? Самым оптимальным вариантом является поиск в глобальной сети. Ведь там знаний бесконечно много. Но тут же возникают и некоторые сложности:

  • Так как интернет постоянно растет и развивается, то ясно, что сайт должен содержать огромные объемы информации, чтобы иметь преимущество над конкурентами. Сегодня контента должно быть очень много. А вручную заполнить таким количеством информации сайт очень трудно.
  • Так как человек не в состоянии обслуживать бесконечный поток постоянно меняющейся информации, необходим парсинг. Что это даст? Автоматизацию процесса сбора информации и ее изменения.

Начнём с простого

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

Основной метод парсера выражений, , может выглядеть так:

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

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

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

В сам парсер нужно добавить . При создании парсера мы инициализируем эту таблицу:

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

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

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

Adblock
detector