HTML 민첩성 팩 - 구문 분석 테이블

c# html html-agility-pack html-parsing

문제

복잡한 웹 페이지의 테이블을 구문 분석하기 위해 HTML 민첩성 팩을 사용하려고하지만 개체 모델에서 어떻게 든 사라졌습니다.

링크 예제를 보았지만 이런 식으로 테이블 데이터를 찾지 못했습니다. XPath를 사용하여 테이블을 가져올 수 있습니까? 기본적으로 테이블을 가져 오는 방법에 대한 데이터를로드 한 후에 기본적으로 손실됩니다. 이전에 Perl에서이 작업을 수행했지만 조금 어색했지만 작업했습니다. ( HTML::TableParser ).

나는 파싱을위한 올바른 객체 순서를 밝힐 수 있다면 행복하다.

수락 된 답변

어때? HTML Agility Pack 사용하기.

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(@"<html><body><p><table id=""foo""><tr><th>hello</th></tr><tr><td>world</td></tr></table></body></html>");
foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table")) {
    Console.WriteLine("Found: " + table.Id);
    foreach (HtmlNode row in table.SelectNodes("tr")) {
        Console.WriteLine("row");
        foreach (HtmlNode cell in row.SelectNodes("th|td")) {
            Console.WriteLine("cell: " + cell.InnerText);
        }
    }
}

원할 경우 LINQ-to-Objects를 사용하면 훨씬 더 수월합니다.

var query = from table in doc.DocumentNode.SelectNodes("//table").Cast<HtmlNode>()
            from row in table.SelectNodes("tr").Cast<HtmlNode>()
            from cell in row.SelectNodes("th|td").Cast<HtmlNode>()
            select new {Table = table.Id, CellText = cell.InnerText};

foreach(var cell in query) {
    Console.WriteLine("{0}: {1}", cell.Table, cell.CellText);
}

인기 답변

가장 단순한 것은 특정 요소에 대한 XPath를 얻는 것이 Firefox 용 FireBug 확장 프로그램을 설치하는 것입니다. 사이트 / 웹 페이지에서 F12 키를 눌러 파이어 버그를 불러 오십시오. 오른쪽을 선택하고 쿼리 할 페이지에서 요소를 선택하고 "Inspect Element"를 선택합니다. Firebug는 IDE에서 요소를 선택한 다음 Firebug에서 요소를 마우스 오른쪽 단추로 클릭하고 "XPath 복사"를 선택하면이 함수는 정확한 XPath를 제공합니다 HTML 민첩성 라이브러리를 사용하여 원하는 요소를 가져와야하는지 쿼리하십시오.



Related

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