Obtenir l'attribut de l'élément dans XPath

html html-agility-pack xpath

Question

Je veux apprendre le web scraping. Par conséquent, j'ai commencé à pratiquer. J'essaie d'obtenir des données-ad-id à partir de HTML aide de XPath .

Structure HTML comme ceci:

<body id="z1234">
    <div class="viewport">
        <div class="g-row">
            <div class="g-col-9">
                <div class="cBox cBox--content cBox--resultList">
                    <div class="cBox-body cBox-body--resultitem dealerAd rbt-reg rbt-no-top"><a class="link--muted no--text--decoration result-item" href="url" data-ad-id="248059713"></a>
                </div>
            </div>
        </div>
    </div>
</body>

XPath pour <a class="link--muted no--text--decoration result item" > est //*[@id="z1234"]/div[3]/div[4]/div[2]/div[1]/div[11]/a . Si je choisis une voiture différente, seule la dernière division change.

En fonction de cela, j'écris du code C# :

var url = "https://suchen.mobile.de/fahrzeuge/search.html?damageUnrepaired=NO_DAMAGE_UNREPAIRED&isSearchRequest=true&maxPowerAsArray=KW&maxPrice=10000&minPowerAsArray=KW&minPrice=10000&scopeId=C";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader sr = new StreamReader(response.GetResponseStream());
            string sourceCode = sr.ReadToEnd();

            HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
            document.LoadHtml(sourceCode);




            var rows = document.DocumentNode.SelectNodes("//*[@id='z1234']/div[3]/div[4]/div[2]/div[1]/div[11]");


            foreach (var row in rows)
            {
                var id = row.SelectSingleNode("a[@data-ad-id]").InnerText;
                Console.WriteLine("id:" + id);
            }
        }

Je ne peux rien obtenir de ce nœud. C'est nul. Comment puis-je obtenir data-ad-id?

EDIT je change mon code C #:

var rows = document.DocumentNode.SelectNodes("//a[@data-ad-id]")[0];
var id = rows.Attributes["data-ad-id"].Value;

Maintenant, je peux obtenir data-ad-id.

Réponse acceptée

Selon le code du site, je pourrais sentir que vous n’avez pas de texte intérieur pour cette balise "A". Il ne contient que les balises DIV et IMG.

Vous devrez récupérer data-ad-id en utilisant

//a[@data-ad-id]/@data-ad-id



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi