Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2013, 10:47   #1
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию Обработка тегов не Regex/ом

Здравствуйте Уважаемые программисты, собственно вопрос по парсингу HTML страниц. Существуют ли какие-то библиотеки по теме, кроме регулярных выражений и кроме тех методов что можно использовать у контрола WebBrowser?
coNsept вне форума Ответить с цитированием
Старый 21.02.2013, 12:21   #2
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Да, всегда все можно сделать вручную
Понадобится поиск подстроки в строке, выделение подстроки из строки, уйма терпения и усидчивости

А если серьезно, то есть множество библиотек. Например, http://htmlagilitypack.codeplex.com/ (здесь краткая инструкция на Хабре).
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 21.02.2013, 12:34   #3
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Вот, последнее это именно то что я искал, вылетело из головы название библиотеки. А по гуглу с запросом: "c# поиск тегов" ничего кроме регулярных выражений не выдает. Большое спасибо, еще нашел вариант это mshtml но она мне не очень нравится...
coNsept вне форума Ответить с цитированием
Старый 24.02.2013, 14:53   #4
winhttp
Пользователь
 
Регистрация: 29.07.2012
Сообщений: 98
По умолчанию

эти библиотеки наверное сами используют Regex
winhttp вне форума Ответить с цитированием
Старый 24.02.2013, 19:51   #5
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Может быть, но тем не менее они не менее полезны чем Regex
coNsept вне форума Ответить с цитированием
Старый 25.02.2013, 03:53   #6
winhttp
Пользователь
 
Регистрация: 29.07.2012
Сообщений: 98
По умолчанию

Цитата:
Сообщение от coNsept Посмотреть сообщение
Может быть, но тем не менее они не менее полезны чем Regex
Чем полезны? вот пример получения слова после "action=" в исходнике. HtmlAgilityPack -
Код:
            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
             doc.LoadHtml(s);
             HtmlNode bodyNode = doc.DocumentNode.SelectSingleNode("//div[@class='cont']/form");
             string result1 = bodyNode.Attributes["action"].Value;
регулярные выражения -
Код:
string result1=Regex.Match(s,@"action=""(.*?)"">").Groups[1].Value;
так в чем их польза\преимущество?
winhttp вне форума Ответить с цитированием
Старый 25.02.2013, 04:11   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от winhttp Посмотреть сообщение
Чем полезны? вот пример получения слова после "action=" в исходнике. HtmlAgilityPack -
Код:
            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
             doc.LoadHtml(s);
             HtmlNode bodyNode = doc.DocumentNode.SelectSingleNode("//div[@class='cont']/form");
             string result1 = bodyNode.Attributes["action"].Value;
регулярные выражения -
Код:
string result1=Regex.Match(s,@"action=""(.*?)"">").Groups[1].Value;
так в чем их польза\преимущество?
коды не идентичны, в первом примере фильтр строже.
да и в принципе задать фильтры именно структурой файла лучше, чем сырым текстом.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.02.2013, 04:38   #8
winhttp
Пользователь
 
Регистрация: 29.07.2012
Сообщений: 98
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
коды не идентичны, в первом примере фильтр строже.
первый пример был взят из инета. Второй написан мной. Почему я не привязываюсь к классу, как в первом случае? потому что на странице только одно совпадение "action=" всегда. конечно можно привязаться к классу, и дописать "Пару буков" в начало выражения но это ничего не изменит.
winhttp вне форума Ответить с цитированием
Старый 25.02.2013, 04:54   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в первом случае совпадение будет именно то которое надо, во втором форма может быть и не одна, тогда совпадение выдаст первый action(например страницу с двумя и более формами), а если он на странице первый?
сложные запросы куда проще реализовать на XPath, чем регулярками.
простые же практически идентичны.
далее, если action не последний аттрибут, то не проканает, в регулярке это надо учитывать, в XPath нет.

продолжать?
каждому инструменту свое место, и не стоит в обработку HTML пускать всегда все на чистых регулярках, не столь оно уютно как порою кажется.
для малых и простых оно подойдет отлично, но чем сложнее, тем труднее уже выражения.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.02.2013, 07:02   #10
winhttp
Пользователь
 
Регистрация: 29.07.2012
Сообщений: 98
По умолчанию

Цитата:
в первом случае совпадение будет именно то которое надо, во втором форма может быть и не одна, тогда совпадение выдаст первый action
ну я же говорил, что на той странице только одна форма. даже если их много будет - то по любому есть к чему привязаться
Цитата:
далее, если action не последний аттрибут, то не проканает
опять же - на том сайте такого не будет. все делалось для конкретной страницы. и тут конечно же можно было все просчитать, но в предыдущем предложении я писал уже, почему именно так сделал. и кстати - убираем ">", и все парсит, даже если это не последний атрибут.
Цитата:
для малых и простых оно подойдет отлично, но чем сложнее, тем труднее уже выражения.
труднее? так это уже вопрос об опыте работы с рег. выражениями. конечно новичкам будет сложно писать сложные рег. выражения. но если с ними поработать, то увидишь всю их мощь
для меня рег. выражения будут всегда правильным решением для парсинга страниц.
да конечно, если нет встроенных средств - то эта библиотека была бы кстати. а так считаю ее не нужной. в пример - есть такая библиотека xNet для отправки запросов на сайт. и зачем она вообще нужна? если в C# уже есть встроенные средства - класс HttpWebRequest.
Цитата:
продолжать?
продолжайте есть ли задачи, с которыми не справятся рег. выражения, а справится только HtmlAgilityPack?

Последний раз редактировалось winhttp; 25.02.2013 в 07:09.
winhttp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Regex record222 PHP 2 20.01.2013 14:43
C# и regex Vigo_Alex Помощь студентам 0 12.10.2010 02:26
Java, regex Namolem Помощь студентам 0 02.05.2010 23:07
Regex Cpluser Общие вопросы .NET 1 27.04.2010 14:52
Regex CWD Общие вопросы .NET 6 14.11.2009 23:42