понедельник, 2 марта 2015 г.

C# разбор Html Файла (парсинг html)

Задача

Понадобилос разобрать HTML-файл

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


Решение Html Agility Pack

Гугл почти сразу вывел на статью

Html Agility Pack — удобный .NET парсер HTML
http://habrahabr.ru/post/112325/

Еще несколько статей тоже ссылались на Html Agility Pack.

Соответственно я взял эту библиотеку за основу.

Оригинальный сайт Html Agility Pack
http://htmlagilitypack.codeplex.com/

На этом сайте брал документацию, саму библиотеку установил через NuGet

Нюансы


1. кодировка и загрузка

Статья на хабре http://habrahabr.ru/post/112325/

не затронула вопросы загрузки  и кодировки файлов. соответственно, приведу здесь пример

var website = new HtmlWeb();            
website.OverrideEncoding = Encoding.GetEncoding("windows-1251");
var doc = website.Load("[url]");

2. XPath

Html Agility Pack активно работает с XPath,  а так как я с ним раньше плотно не сталкивался - пришлось учить онлайн

соответственно, вот несколько полезных ресурсов
Примеры xpath-запросов к html
http://habrahabr.ru/post/114772/

XPath - вики
https://ru.wikipedia.org/wiki/XPath

XML Path Language (XPath) 2.1
http://www.w3.org/TR/xpath-21/

Язык XML Path (XPath) версия 1.0
http://citforum.ru/internet/xpath/index.shtml


Другие ссылки по теме

Html agility pack not loading url
http://stackoverflow.com/questions/19793291/html-agility-pack-not-loading-url

Parsing HTML with c#.net [duplicate]
http://stackoverflow.com/questions/6063203/parsing-html-with-c-net

C# library for parsing HTML?
http://softwarerecs.stackexchange.com/questions/10773/c-library-for-parsing-html

C# and HtmlAgilityPack encoding problem
http://stackoverflow.com/questions/3452343/c-sharp-and-htmlagilitypack-encoding-problem

How to Parse HTML using C#
http://www.codeproject.com/Tips/804660/How-to-Parse-HTML-using-Csharp


Распарсить HTML в .NET и выжить: анализ и сравнение библиотек
http://habrahabr.ru/post/273807/

2 комментария: