HTMLAgilityPack을 사용하여 웹 페이지에서 특정 데이터 가져 오기

c# html-agility-pack xpath

문제

나는 HTML 민첩성 팩을 사용하여 C #의 웹 페이지에서 데이터를 가져 오려고 노력했습니다. 다른 웹 페이지에서 데이터를 검색 할 수 있었지만이 웹 페이지에서 NullReferenceException 이 발생했습니다. 내 유일한 추측은 XPath와 관련이 있다는 것입니다.

내 코드는 'Limbo Wand'텍스트에 도달하려고합니다.

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 에서 텍스트를 가져 /html/head/title 해도 작동하지 않습니다.

내 XPath에 문제가 있습니까? 아니면 HTML 애자일 팩이 제대로 사용할 수없는 웹 페이지에 문제가 있습니까?

나에게 약간의 힌트를 줄 수있는 누군가에게 미리 감사드립니다!

인기 답변

HtmlWeb은 사이트 소스를 가져 오기위한 똥입니다. 주로 리디렉션을 처리하지 않기 때문입니다. 그러나 그것이 그것이 근원적 인 문제인지 여기 확신 할 수는 없습니다. 대신 웹 요청을 사용하십시오. 이렇게 :

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 있습니다. 그리고 (단 하나의 제목 태그가 있기 때문에) 그렇게 쉽게 제목을 얻을 수 있습니다 :

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

이제 가장 간단하고 쉬운 xpath를 사용하여 무기 이름을 얻으려면 다음과 같이하십시오.

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

끝 부분의 자르기 ()는 문자열의 시작과 끝에서 공백을 제거하기위한 것입니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.