Как работают скребки экрана?

Я постоянно слышу, как люди пишут эти программы, и я знаю, что они делают, но как они на самом деле это делают? Я ищу общие понятия.

9 ответов

Решение

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

Довольно часто экранный ландшафт относится к веб-клиенту, который анализирует HTML-страницы целевого веб-сайта для извлечения отформатированных данных. Это делается, когда веб-сайт не предлагает RSS-канал или REST API для программного доступа к данным.

Одним из примеров библиотеки, используемой для этой цели, является Hpricot для Ruby, который является одним из лучших синтаксических анализаторов HTML, используемых для очистки экрана.

Здесь много точных ответов.

То, что никто не сказал , не делай этого!

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

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

Конечно, иногда у тебя нет выбора:(

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

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

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

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

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

Вот небольшая часть очистки экрана, реализованной в Javascript с использованием jQuery (заметьте, это не распространенный выбор, поскольку очистка обычно является клиент-серверной операцией):

//Show My SO Reputation Score
var repval = $('span.reputation-score:first'); alert('Stackru User "' + repval.prev().attr('href').split('/').pop() + '" has (' + repval.html() + ') Reputation Points.');

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

Если SO изменяет соглашения о структуре DOM / именах элементов / пути URI, все ставки отключены, и они могут больше не работать - это обычный риск при попытках скрининга экрана, когда нет соглашения / понимания между сторонами (скребком и скребком) [да я только что придумал слово]).

Технически, скрининг - это любая программа, которая захватывает отображаемые данные другой программы и принимает их для собственного использования. В первые дни ПК скребки экрана эмулировали терминал (например, IBM 3270) и притворялись пользователем, чтобы интерактивно извлекать, обновлять информацию на мэйнфреймах. В последнее время эта концепция применяется к любому приложению, которое предоставляет интерфейс через веб-страницы.

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

Довольно часто экранный ландшафт относится к веб-клиенту, который анализирует HTML-страницы целевого веб-сайта для извлечения отформатированных данных. Это делается, когда веб-сайт не предлагает RSS-канал или REST API для программного доступа к данным.

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

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

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

Одним из примеров библиотеки, используемой для этой цели, является Hpricot для Ruby, который является одним из лучших синтаксических анализаторов HTML, используемых для очистки экрана.

Экранный скребок загружает html-страницу и извлекает интересующие данные либо путем поиска известных токенов, либо путем анализа их в виде XML или чего-то подобного.

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

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

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

string pageContents = new WebClient("www.stackru.com").DownloadString();
int numberOfPosts = // regex match

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

Экранный скребок загружает html-страницу и извлекает интересующие данные либо путем поиска известных токенов, либо путем анализа их в виде XML или чего-то подобного.

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