Кто нибудь понял как получить xml файл с нужного сайта?
Хорошо рассказано как парсить с xml файла, но не слова где его взять. Просмотрел урок про то как записывать файлы и на тех простых примерах из урока все понятно, но с точки зрения практичности признаюсь, что не фига не понял. Если кто то понял как получить xml файл с нужного вам сайта, поделитесь опытом. Плиз! Очень надо. Спасибо заранее!
Похожие вопросы
- Как вставить все поля из xml файла с помощью insert в mysql?
- Как добавить автообновляемый xml-каталог?
- php урок 62
- Как решить проблему с ошибкой call to a member function query() on null?
- Не выводиться в браузер $xml что делать?
- Вопрос к уроку Работа с XML. Запишем данные из XML в базу.
Один ответ
- Все вопросы
- Старые
- Голоса
Не все сайты отдают XML. Некоторые сайты предоставляют официальный API и позволяют делать запросы к их сайту, а на выходе получать XML или JSON.
Например, VK отдает данные в XML или JSON: https://vk.com/dev/first_guide
Гуглится обычно название сервиса, например Facebook API.
К сайтам, которые не предоставляют API, пишут грабберы используя разные библиотеки, например PHP Simple HTML DOM Parser. т.е. с помощью этой библиотеки парсят HTML данные на сайте, затем сохраняют данные в удобном виде в базу или сразу отдают данные в виде XML/JSON.
Подходы к извлечению данных из веб-ресурсов
В предыдущей статье мы рассмотрели основные понятия и термины в рамках технологии Data Mining. Сегодня более детально остановимся на Web Mining и подходах к извлечению данных из веб-ресурсов.
- Анализ DOM дерева, использование XPath.
- Парсинг строк.
- Использование регулярных выражений.
- XML парсинг.
- Визуальный подход.
Анализ DOM дерева
Этот подход основывается на анализе DOM дерева. Используя этот подход, данные можно получить напрямую по идентификатору, имени или других атрибутов элемента дерева (таким элементом может служить параграф, таблица, блок и т.д.). Кроме того, если элемент не обозначен каким-либо идентификатором, то к нему можно добраться по некоему уникальному пути, спускаясь вниз по DOM дереву, например:
body -> p[10] -> a[1] -> текст ссылки
или пройтись по коллекции однотипных элементов, например:
body -> links -> 5 элемент -> текст ссылки
- можно получить данные любого типа и любого уровня сложности
- зная расположение элемента, можно получить его значение, прописав путь к нему
- различные HTML / JavaScript движки по-разному генерируют DOM дерево, поэтому нужно привязываться к конкретному движку
- путь элемента может измениться, поэтому, как правило, такие парсеры рассчитаны на кратковременный период сбора данных
- DOM-путь может быть сложный и не всегда однозначный
Data Extracting SDK использует Microsoft.mshtml для анализа DOM дерева, но является «надстройкой» над библиотекой для удобства работы:
UriHtmlProcessor proc = new UriHtmlProcessor( new Uri ( «http://habrahabr.ru/new/page1/» ));
proc.Initialize();
var links = from l in proc.Links
where l.Class == «topic» && EndsWithInt(l.Href) == true
select new ResultItem <
Link = l.Href,
TopicName = l.Text.ToWindows1251()
>;
* This source code was highlighted with Source Code Highlighter .
Следующим эволюционным этапом анализа DOM дерева является использования XPath — т.е. путей, которые широко используются при парсинге XML данных. Суть данного подхода в том, чтобы с помощью некоторого простого синтаксиса описывать путь к элементу без необходимости постепенного движения вниз по DOM дереву. Данный подход использует всеми известная библиотека jQuery и библиотека HtmlAgilityPack:
HtmlDocument doc = new HtmlDocument();
doc.Load( «file.htm» );
foreach (HtmlNode link in doc.DocumentElement.SelectNodes( «//a[@href» ])
<
HtmlAttribute att = link[ «href» ];
att.Value = FixLink(att);
>
doc.Save( «file.htm» );
* This source code was highlighted with Source Code Highlighter .
Парсинг строк
Несмотря на то, что этот подход нельзя применять для написания серьезных парсеров, я о нем немного расскажу.
Иногда данные отображаются с помощью некоторого шаблона (например, таблица характеристик мобильного телефона), когда значения параметров стандартные, а меняются только их значения. В таком случае данные могут быть получены без анализа DOM дерева, а путем парсинга строк, например, как это сделано в Data Extracting SDK:
Компания: Microsoft
Штаб-квартира: Редмонд
string data = «<p>Компания: Microsoft</p><p>Штаб-квартира: Редмонд</p>» ;
string company = data.GetHtmlString( «Компания: » , «</p>» );
string location = data.GetHtmlString( «Штаб-квартира: » , «</p>» );
// output
// company = «Microsoft»
// location = «Редмонт»
* This source code was highlighted with Source Code Highlighter .
Использование набора методов для анализа строк иногда (чаще — простых шаблонных случаях) более эффективный чем анализ DOM дерева или XPath.
Регулярные выражения и парсинг XML
Очень часто видел, когда HTML полностью парсили с помощью регулярных выражений. Это в корне неверный подход, так как таким образом можно получить больше проблем, чем пользы.
Регулярные выражения необходимо использоваться только для извлечения данных, которые имеют строгий формат — электронные адреса, телефоны и т.д., в редких случаях — адреса, шаблонные данные.
Еще одним неэффективным подходом является рассматривать HTML как XML данные. Причина в том, что HTML редко бывает валидным, т.е. таким, что его можно рассматривать как XML данные. Библиотеки, реализовавшие такой подход, больше времени уделяли преобразованию HTML в XML и уже потом непосредственно парсингу данных. Поэтому лучше избегайте этот подход.
Визуальный подход
В данный момент визуальный подход находится на начальной стадии развития. Суть подхода в том, чтобы пользователь мог без использования программного языка или API «настроить» систему для получения нужных данных любой сложности и вложенности. О чем-то похожем (правда применимым в другой области) — методах анализа веб-страниц на уровне информационных блоков, я уже писал. Думаю, что парсеры будущего будут именно визуальными.
Проблемы и общие рекомендации
Проблемы при парсинге HTML данных — использование JavaScript / AJAX / асинхронных загрузок очень усложняют написание парсеров; различные движки для рендеринга HTML могут выдавать разные DOM дерева (кроме того, движки могут иметь баги, которые потом влияют на результаты работы парсеров); большие объемы данных требуют писать распределенные парсеры, что влечет за собой дополнительные затраты на синхронизацию.
Нельзя однозначно выделить подход, который будет 100% применим во всех случаях, поэтому современные библиотеки для парсинга HTML данных, как правило, комбинируют, разные подходы. Например, HtmlAgilityPack позволяет анализировать DOM дерево (использовать XPath), а также с недавних пор поддерживается технология Linq to XML. Data Extracting SDK использует анализ DOM дерева, содержит набор дополнительных методов для парсинга строк, а аткже позволяет использовать технологию Linq для запросов в DOM модели страницы.
На сегодня абсолютным лидером для парсинга HTML данных для дотнетчиков является библиотека HtmlAgilityPack, но ради интереса можно посмотреть и на другие библиотеки.
Чтение XML-данных из URL-адреса с помощью Visual C#
В этой статье показано, как использовать класс XmlTextReader для чтения XML из URL-адреса. Потоковая информация может поступать из различных источников, таких как поток байтов с сервера, файла или TextReader класса.
Оригинальная версия продукта: Visual Studio
Исходный номер базы знаний: 307643
Требования
В этой статье предполагается, что вы знакомы со следующими разделами:
- Microsoft Visual Studio
- Терминология XML
- Создание и чтение XML
- URL-адреса и создание конечной точки XML
Эта статья относится к пространству имен платформа .NET Framework классов System.Xml .
Чтение XML-данных из URL-адреса
В этом примере используется файл с именемBooks.xml. Вы можете создать собственный Books.xml или использовать пример файла, который входит в краткие руководства по пакету средств разработки программного обеспечения (SDK) для .NET. Этот файл также доступен для скачивания. Сведения о расположении скачивания см. в первом элементе в разделе " Ссылки" этой статьи.
СкопируйтеBooks.xml в папку \Inetpub\Wwwroot на компьютере.
Откройте Visual Studio.
Создайте консольное приложение Visual C#. Вы можете перейти к разделу "Полный листинг кода" или выполнить следующие действия для сборки приложения.
Укажите директиву using в System.Xml XmlTextReader пространстве имен, чтобы вам не нужно было уточнять объявления классов позже в коде. Директиву using необходимо использовать перед любыми другими объявлениями.
Получение XML-потока с помощью URL-адреса. Потоки используются для обеспечения независимости от устройства; таким образом, изменения программы не требуются, если источник потока изменяется. Объявите константу для URL-адреса http://localhost/books.xml . Константа будет использоваться на следующем шаге с XmlTextReader . Добавьте следующий пример кода в основную процедуру класса по умолчанию:
Создайте экземпляр класса и XmlTextReader укажите URL-адрес. Обычно используется, XmlTextReader если необходимо получить доступ к XML в виде необработанных данных без накладных расходов модели doM. Таким образом, XmlTextReader обеспечивает более быстрый механизм чтения XML. Класс XmlTextReader имеет разные конструкторы для указания расположения XML-данных. Следующий код создает экземпляр объекта XmlTextReader и передает URL-адрес конструктору:
На этом шаге показан базовый внешний while цикл, а в следующих двух шагах описывается, как использовать этот цикл и читать XML.
После загрузки XmlTextReader выполняет последовательные операции чтения для перемещения по XML-данным Read и использует метод для получения следующей записи. Если Read записей больше нет, метод возвращает значение false.
Проверьте узлы. Для обработки XML-данных каждая запись имеет тип узла, который можно определить из NodeType свойства. Свойства Name и Value имя узла (имена элементов и атрибутов) и значение узла (текст узла) текущего узла (или записи). Перечисление NodeType определяет тип узла. В следующем примере кода отображается имя элементов и тип документа.
В этом примере атрибуты элементов игнорируются.
Проверьте атрибуты. Типы узлов элементов могут включать список связанных с ними узлов атрибутов. Метод MovetoNextAttribute последовательно перемещается по каждому атрибуту в элементе. Используйте свойство HasAttributes , чтобы проверить, есть ли у узла какие-либо атрибуты. Свойство AttributeCount возвращает количество атрибутов для текущего узла.
Создайте и запустите проект.
Полный список кода
Пример выходных данных
Устранение неполадок
При проверке кода может появиться следующее сообщение об ошибке исключения: