Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Программа screen scraper загружает HTML страницу и извлекает интересующие данные либо путем поиска известных токенов, либо путем синтаксического анализа их как XML или что-то в этом роде.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top