Data Extracting SDK: Часть 1
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 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)
- управление максимальным количеством извлекаемых ссылок
- поддержка фильтров и правил извлечения
- 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 были разработаны такие приложения:
- Australian Yellow Pages data extractor (private project)
- Emails Extractor
- Phones Extractor
- Links Extractor
- Facebook data extractor (private project)
- Google web search results extractor
- Google related websites extractor
- PageRank Extractor
- SmartBrowser (анонс на хабре)
- Website Screenshots and Thumbnails Extractor (анонс на хабре)
- и др.
Обратная связь
Хотелось бы услышать:
- замеченные баги
- возможные варианты расширения функциональности
- ответ на вопрос, сколько вам не жалко отдать кровных за лицензию на такого рода продукт
Ну и, наконец, если у вас есть задачи по извлечению данных — обращайтесь :)
Обсудить на хабре
Компании из статьи
Microsoft Украина | Украинское подразделение компании Microsoft. |