Как получить img / src или a / hrefs с помощью Html Agility Pack? - PullRequest
9 голосов
/ 29 января 2011

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

Ответы [ 5 ]

22 голосов
/ 29 января 2011

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

 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.

6 голосов
/ 03 января 2013

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

    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();
    }

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

1 голос
/ 06 сентября 2016

Может быть, я слишком поздно здесь, чтобы опубликовать ответ.У меня сработало следующее:

var MainImageString  = MainImageNode.Attributes.Where(i=> i.Name=="src").FirstOrDefault();
0 голосов
/ 12 апреля 2019
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);

string name = htmlDoc.DocumentNode
    .SelectNodes("//td/input")
    .First()
    .Attributes["value"].Value;

Источник: https://html -agility-pack.net / select-node

0 голосов
/ 16 апреля 2018

Вам также необходимо учитывать элемент базового URL документа (<base>) и относительные URL протокола (например, //www.foo.com/bar/).

Для получения дополнительной информации проверьте:

...