Как стать автором
Обновить

Data Extracting SDK: Часть 1

Время на прочтение4 мин
Количество просмотров1.6K
Data Extracting SDK написан на .NET Framework 3.5 и содержит средства для извлечения и анализа данных из текстовых файлов и web-ресурсов. Прислушиваясь к результатам опроса выкладываю первую версию Data Extracting SDK CTP (Community Technical Preview) на всеобщее обозрение.

Основные возможности:
  • Html Processing — загрузка, анализ html
  • DOM анализ — получение ссылок, изображений, таблиц
  • извлечение ссылок, фильтры, возможность написания своих фильтром, глубокий анализ сайта
  • извлечение электронных адресов, телефонов, urls и т.д.
  • анализ контента сайта (количество элементов, плотность слов)
  • возможности для SEO анализа
Остановимся на основных возможностях SDK.

Как можно использовать Data Extracting SDK


Области применения:
  • программы для сбора необходимой информации
  • разработка аналитических сервисов, анализ сайтов и контента
  • программы для составления баз данных, списков
  • программы для анализа конкурентов
  • SEO программы
  • автоматизация работы с веб-ресурсами
  • программы-кроулеры

Классы HtmlProcessor и ContentAnalyzer


Класс HtmlProcessor предназначен для загрузки и обработки HTML.

Основные возможности:
  • поддержка прокси
  • поддержка UserAgent
  • извлечение заголовков, метатегов, изображений, ссылок, ключевых слов и др.
  • работа с таблицами (поиск, фильтры)
  • поддержка GET и POST протоколов
Класс ContentAnalyzer является расширением класса HtmlProcessor и содержит средства для статистического анализа контента.

Диаграмма классов представлена ниже (кликабельно):

HTMLProcessor

Пример работы с HtmlProcessor:

HtmlProcessor proc = new HtmlProcessor(
  new Uri("http://www.microsoft.com/"),
  new WebProxy("http://111.111.11.1/", true));

proc.Initialize(); // Инициализация
string html = proc.InnerHtml; // Получаем Html код страницы
string text = proc.InnerText; // Получаем текст страницы

// Возвратит DataTable первой таблицы
DataTable dt = proc.GetDataTableByTableIndex(0);

// Возвратит "Access and connect with thousands of
// Microsoft Certified companies to find products and services"
string value = proc.GetHtmlString("Microsoft Pinpoint", "</div></div>").RemoveHtmlTags();

// Возвратит список изображений
List<ImageInfo> images = proc.Images;


* This source code was highlighted with Source Code Highlighter.


WebProxy можно упустить в конструкторе.

Чтобы послать POST запрос, необходимо воспользоваться таким кодом:

HtmlProcessor proc = new HtmlProcessor(
  new Uri("http://www.microsoft.com/"),
  new WebProxy("http://11.11.1.1:111/", true));

proc.HttpMethod = HttpMethods.POST;
var parameters = new NameValueCollection();
parameters.Add("name", "value");
proc.PostParameters = parameters;
proc.Initialize();


* This source code was highlighted with Source Code Highlighter.


Класс LinksExtractor


Класс LinksExtractor предназначен для извлечения ссылок.

Основные возможности:
  • извлечение ссылок по заданному url
  • поддержка прокси
  • возможность извлекать видимые / невидимые ссылки
  • глубокий анализ страниц (in depth)
  • управление максимальным количеством извлекаемых ссылок
  • поддержка фильтров и правил извлечения
Диаграмма класса:

LinksExtractor

Правила:
  • TextMustContainCondition — текст ссылки должен содержать некое значение
  • TextMustNotContainCondition — текст ссылки не должен содержать некое значение
  • SameDomainCondition — ссылки должны находиться в одном домене что и страница (только внутренние ссылки)
  • LinkIdMustContainCondition — id ссылки должен содержать некое значение
  • LinkIdMustNotContainCondition — id ссылки не должен содержать некое значение
  • HrefMustContainCondition — href ссылки должен содержать некое значение
  • HrefMustNotContainCondition — href ссылки не должен содержать некое значение
Для добавления своего правила необходимо реализовать несложный интерфейс:

public interface ICondition
{
bool Satisfied(LinkInfo linkInfo, string value);
bool Satisfied(string linkInfo, string value);
}


Пример использования:

LinksExtractor ext = new LinksExtractor(new Uri("http://microsoft.com/"));

// Извлекать только те ссылки, href которых содержит строку "microsoft"
ext.AddRule("microsoft", new HrefMustContainCondition());

// Извлекать максимум 10 ссылок
ext.Maximum = 10;

// Извлекать скрытые сслыки
ext.ExtractHidden = true;

// Извлечь
ext.Extract();

// Получить список всех извлеченных ссылок
var links = ext.Links;


* This source code was highlighted with Source Code Highlighter.


В CTP версии свойство Maximum ограничено значением 100.

Пример реального использования — Как получить список сайтов в заданной зоне.

Другие классы


О классе WebScreenshotExtractor и программе, которая использует его, можно почитать здесь.

О классах EmailsExtractor, PhonesExtractor, UrlsExtractor, GuidExtractor, SEO и других возможностях поговорим в следующий раз, но некоторые примеры уже можно посмотреть здесь.

Скачать Data Extraction SDK v.1.0 CTP с cайта Codeplex

Несколько слов о реальном использовании


С помощью данного SDK были разработаны такие приложения:

Обратная связь


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


Ну и, наконец, если у вас есть задачи по извлечению данных — обращайтесь :)

Спасибо за внимание!
Теги:
Хабы:
Всего голосов 47: ↑37 и ↓10+27
Комментарии24

Публикации

Истории

Ближайшие события

15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань