Analizza documenti HTML con HtmlAgilityPack-Xpath, RegExp

html-agility-pack xpath

Domanda

Cerco di analizzare l'URL delle immagini da html con HtmlAgilityPack. Nel documento html ho tag img:

<a class="css_foto" href="" title="Fotka: MyKe015">
   <span>
      <img src="http://213.215.107.125/fotky/1358/93/v_13589304.jpg?v=6" 
           width="176" height="216" alt="Fotka: MyKe015" />
   </span>
</a>

Ho bisogno di ottenere da questo tag img atribute src. Ho bisogno di questo: http://213.215.107.125/fotky/1358/93/v_13589304.jpg?v=6.

Lo so:

  1. Src atribute consistono in url, url start con http://213.215.107.125/fotky
  2. So che il valore di altribributo Url ha una lunghezza variabile e anche il documento html consistono in altri tag img con url, che iniziano con http://213.215.107.125/fotky
  3. Conosco l'attributo alt del tag img (Fotka: Myke015))

Qualunque anticipo, provo in molti modi, ma niente funziona bene.

Ultimo provo questo:

    List<string> src;

    var req = (HttpWebRequest)WebRequest.Create("http://pokec.azet.sk/myke015");
    req.Method = "GET";

    using (WebResponse odpoved = req.GetResponse())
    {
        var htmlDoc = new HtmlAgilityPack.HtmlDocument();
        htmlDoc.Load(odpoved.GetResponseStream());

        var nodes = htmlDoc.DocumentNode.SelectNodes("//img[@src]");
        src = new List<string>(nodes.Count);

        if (nodes != null)
        {
            foreach (var node in nodes)
            {
                if (node.Id != null)
                    src.Add(node.Id);
            }
        }
    }

Risposta popolare

Il tuo XPath seleziona i nodi img , non gli attributi src appartengono ad essi.

Invece di (selezionare tutti i tag immagine che hanno un attributo src ):

var nodes = htmlDoc.DocumentNode.SelectNodes("//img[@src]");

Usa questo (seleziona gli attributi src che sono nodi figli di tutti gli elementi img ):

var nodes = htmlDoc.DocumentNode.SelectNodes("//img/@src");


Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché