XPathで要素の属性を取得する

html html-agility-pack xpath

質問

私はウェブスクレイピングを学びたい。それで、私は練習を始めました。私はXPathを使ってHTMLからdata-ad-idを取得しようとしています。

このようなHTML構造:

<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>

<a class="link--muted no--text--decoration result item" > XPathは//*[@id="z1234"]/div[3]/div[4]/div[2]/div[1]/div[11]/a 。私が別の車を選ぶと、最後のdivだけが変更されます。

これによると、私は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);
            }
        }

このノードからは何も取得できません。それはnullです。 data-ad-idを取得するにはどうすればよいですか?

私のC#コードを変更する編集

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

これでdata-ad-id.取得できますdata-ad-id.

受け入れられた回答

サイトのコードに従って、私はあなたがその "A"タグのためのinnertextを持っていないことを感じることができました。それはDIVとIMGタグを含んでいます。

data-ad-idを取得する必要があります。

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


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ