HtmlAgilityPack을 사용하여 C #에서 html 테이블을 구문 분석 할 수 없습니다.

c# html-agility-pack

문제

이 링크에 표시된 표를 읽고 싶습니다.

HtmlAgilityPack 하려고 할 때 null

var nodes = document.DocumentNode.SelectNodes("//table[contains(@class, 'table')]");

문제가 무엇인지 알려 주실 수 있습니까? 내가 잘못하고있는거야?

인기 답변

귀하의 xpath에 아무런 문제가 없습니다. 테이블에서 데이터를 가져 오는 방법을 모르는 것으로 가정합니다. xpaths를 찾아야합니다.

    public static void Main(string[] args)
    {
        HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
        try
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.manualslib.com/brand/A.html");
            request.Method = "GET";
            request.ContentType = "text/html;charset=utf-8";

            using (var response = (HttpWebResponse)request.GetResponse())
            {
                using (var stream = response.GetResponseStream())
                {
                    doc.Load(stream, Encoding.GetEncoding("utf-8"));
                }
            }
        }
        catch (WebException ex)
        {
            Console.WriteLine(ex.Message);
        }
        //Works fine
        HtmlNode tablebody = doc.DocumentNode.SelectSingleNode("//table[contains(@class, 'table')]/tbody");
        foreach(HtmlNode tr in tablebody.SelectNodes("./tr"))
        {
            Console.WriteLine("\nTableRow: ");
            foreach(HtmlNode td in tr.SelectNodes("./td"))
            {
                if (td.GetAttributeValue("class", "null") == "col1")
                {
                    Console.Write("\t " + td.InnerText);
                }
                else
                {
                    HtmlNode temp = td.SelectSingleNode(".//div[@class='catel']/a");
                    if (temp != null)
                    {
                        Console.Write("\t " + temp.GetAttributeValue("href", "no url"));
                    }
                }


            }
        }
        Console.ReadKey();
    }

먼저 xpath를 사용하여 tbody 노드로 이동합니다. 단, 테이블의 클래스에있는 특성에 'table'이 포함되어 있어야합니다.

//table[contains(@class, 'table')]/tbody

이제 tr (테이블 행)이라고하는 모든 노드를 선택합니다.

./tr

여기서 점은 현재 상황에서 우리는 모든 tr-node를 찾을 것이라는 것을 의미합니다. 그런 다음 각 tr 노드에서 다음을 사용하여 모든 td 노드를 찾습니다.

./td

이제 각 테이블 셀에서 데이터를 가져 오려고합니다. 첫 번째 td에서는 class-attribute가 'col1'과 동일하다는 것을 알 수 있습니다. 그래서 td가 그 값을 가진 클래스를 포함한다면 - 우리는 그 td-node 안에 텍스트를 가져 가고 싶습니다.

그러나 그것이 그 속성을 포함하지 않는다면 우리는 'catel'값을 가진 class-attribute를 가진 div 안의 앵커 태그를 원한다는 것을 안다.

그 앵커 태그 안에 href 속성의 값을 얻고 싶습니다.



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