Как получить img / src или a / hrefs с помощью Html Agility Pack?

.net c# html html-agility-pack html-parsing

Вопрос

Я хочу использовать пакет гибкости HTML для синтаксического анализа изображений и ссылок href с HTML-страницы, но я просто мало знаю о XML или XPath. Несмотря на то, что вы просматриваете справочные документы на многих веб-сайтах, я просто не могу решить проблему Проблема. Кроме того, я использую C # в VisualStudio 2005. И я просто не могу свободно говорить по-английски, поэтому я искренне благодарю, что можно написать полезные коды.

Принятый ответ

Первый пример на домашней странице делает что-то очень похожее, но подумайте:

 HtmlDocument doc = new HtmlDocument();
 doc.Load("file.htm"); // would need doc.LoadHtml(htmlSource) if it is not a file
 foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
 {
    string href = link["href"].Value;
    // store href somewhere
 }

Итак, вы можете себе представить, что для img @ src просто замените каждый a на img и href на src . Вы даже можете упростить:

 foreach(HtmlNode node in doc.DocumentElement
              .SelectNodes("//a/@href | //img/@src")
 {
    list.Add(node.Value);
 }

Для обработки относительного URL-адреса просмотрите класс Uri .


Популярные ответы

Пример и принятый ответ неверны. Он не компилируется с последней версией. Я пробую что-то еще:

    private List<string> ParseLinks(string html)
    {
        var doc = new HtmlDocument(); 
        doc.LoadHtml(html);
        var nodes = doc.DocumentNode.SelectNodes("//a[@href]");
        return nodes == null ? new List<string>() : nodes.ToList().ConvertAll(
               r => r.Attributes.ToList().ConvertAll(
               i => i.Value)).SelectMany(j => j).ToList();
    }

Это работает для меня.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему