HTMLAgilityPackを使用してWebページから特定のデータを取得する

c# html-agility-pack xpath

質問

私はHTMLアジリティパックを使用してC#のWebページからデータを取得しようとしています。私は別のWebページからデータを取得することができましたが、このWebページではNullReferenceExceptionが発生しています。私の唯一の推測はXPathと何か関係があることです。

ここに私のコードは、 'リムボウワンド'のテキストに到達しようとしています

string url = "https://www.dofus.com/en/mmorpg/encyclopedia/weapons/180-limbo-wand";
HtmlWeb htmlWeb = new HtmlWeb();
HtmlDocument doc = htmlWeb.Load(url);

string weaponName = doc.DocumentNode.SelectNodes("/html/body/div[2]/div[2]/div/div/div/main/div[2]/div/div[2]/h1/text()")[0].InnerText; // <-- NullReferenceException here

私のXPathでtext()削除することはできません。また、 /html/head/titleからテキストを取得しようとしても機能しません。

私のXPathに何か問題はありますか?または、HTMLアジリティパックが正しく使用できないというWebページの問題ですか?

私にいくつかのヒントを与えることができるかもしれない人に事前に感謝します!

人気のある回答

HtmlWebは、サイトのソースを取得するためにちょうだいです。主にリダイレクトを処理しないためです。しかし、私はそれが根本的な問題であるかどうかはわかりません。代わりにWebリクエストを使用してください。そのようです:

HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
try
{
    var request = (HttpWebRequest)WebRequest.Create("https://www.dofus.com/en/mmorpg/encyclopedia/weapons/180-limbo-wand");
    request.Method = "GET";

    using (var response = (HttpWebResponse)request.GetResponse())
    {
        using (var stream = response.GetResponseStream())
        {
            doc.Load(stream, Encoding.GetEncoding("iso-8859-9"));
        }
    }
}
catch (WebException ex)
{
    Console.WriteLine(ex.Message);
}

その後、あなたはHtmlDocumentを持っています。そして、あなたは簡単にタイトルを得ることができます(タイトルタグは1つだけです)。

Console.WriteLine(doc.DocumentNode.SelectNodes("/title")[0].InnerText);

今度は、最もシンプルで簡単なxpathを使って武器の名前を取得するのは次のようになります:

Console.WriteLine(doc.DocumentNode.SelectSingleNode("//h1[@class='ak-return-link']").InnerText.Trim());

最後のTrim()は文字列の先頭と最後の空白を削除するだけです。



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