Data Extracting SDK: Часть 1

понедельник, 31 августа 2009, Александр Краковецкий

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 были разработаны такие приложения:

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

Хотелось бы услышать:

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

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

Обсудить на хабре

Компании из статьи


Microsoft Украина


Сайт:
http://www.microsoft.com/ukr/ua/

Microsoft Украина Украинское подразделение компании Microsoft.

Ищите нас в интернетах!

Комментарии

Свежие вакансии