2010-03-11 2 views
6

html 민첩성 팩을 사용하여 html 테이블을 구문 분석하고 싶습니다. 테이블에서 사전 정의 된 열 데이터 만 추출하려고합니다.HTML 민첩성 팩

하지만 저는 구문 분석과 html 민첩성 팩을 처음 사용하고 있지만 시도했지만 시도 할 필요가없는 html 민첩성 팩을 사용하는 방법을 모르겠습니다.

편집하는 경우 사람이 다음 날 예를 들어 줄 알고있는 경우 :

은 우리가 단지 결정 열 이름 '데이터를 추출하려면 같은 HTML 테이블을 구문 분석 할 수 있습니까? 4 열 이름, 주소, phno와 마찬가지로 이름과 주소 데이터 만 추출하려고합니다.

+0

@Harikrishna - 테이블 구조의 작은 샘플이 있습니까? –

+0

html 민첩성 팩을 사용하여 html 데이터에서 데이터를 추출하는 방법에 대한 자세한 내용은 http://stackoverflow.com/questions/2431652/html-agility-pack – Harikrishna

답변

6

토론 포럼 here에 그 예가 있습니다. 아래로 스크롤하여 테이블 응답을 봅니다. 쉽게 찾을 수있는 더 나은 샘플을 제공하기를 바랍니다.

EDIT : 특정 열에서 데이터를 추출하려면 먼저 원하는 열에 해당하고 색인을 기억하는 <th> 태그를 찾아야합니다. 그런 다음 동일한 색인에 <td> 태그를 찾아야합니다.

HtmlDocument doc = new HtmlDocument(); 
doc.LoadHtml("http://somewhere.com"); 
HtmlNode table = doc.DocumentNode.SelectSingleNode("//table"); 
foreach (var row in table.SelectNodes("//tr")) 
{ 
    HtmlNode addressNode = row.SelectSingleNode("td[2]"); 
    //do something with address here 
    HtmlNode phoneNode = row.SelectSingleNode("td[5]"); 
    // do something with phone here 
} 

Edit2가를 : 당신이 컬럼의 인덱스를 알고 가정 당신이 뭔가를 할 수 있습니다 당신이 컬럼의 인덱스를 모르는 경우이 같은 모든 일을 할 수 있었다. 나는 이것을 시험하지 않았다.

HtmlDocument doc = new HtmlDocument(); 
doc.LoadHtml("http://somewhere.com"); 
var tables = doc.DocumentNode.SelectNodes("//table"); 

foreach(var table in tables) 
{ 
    int addressIndex = -1; 
    int phoneIndex = -1; 
    var headers = table.SelectNodes("//th"); 
    for (int headerIndex = 0; headerIndex < headers.Count(); headerIndex++) 
    { 
     if (headers[headerIndex].InnerText == "address") 
     { 
      addressIndex = headerIndex; 
     } 
     else if (headers[headerIndex].InnerText == "phone") 
     { 
      phoneIndex = headerIndex; 
     } 
    } 

    if (addressIndex != -1 && phoneIndex != -1) 
    { 
     foreach (var row in table.SelectNodes("//tr")) 
     { 
      HtmlNode addressNode = row.SelectSingleNode("td[addressIndex]"); 
      //do something with address here 
      HtmlNode phoneNode = row.SelectSingleNode("td[phoneIndex]"); 
      // do something with phone here 
     } 
    } 
} 
+0

@Harikrishna - 각 테이블에서 같은 종류의 데이터입니까? 모든 테이블에서 같은 열을 추출 하시겠습니까? 특정 테이블 하나만 찾고 싶습니까? 좀 도와주세요. 나는 계속 대답하려고 노력하고 더 많은 정보를 제공한다. 거기서 모든 정보를 얻자. –

+0

@Mike Two Sir .. 죄송합니다. 웹 페이지 에서처럼 두 개 이상의 테이블 태그가 있지만 주소와 전화 번호와 같이 정의한대로 열 이름이있는 테이블 하나에서 데이터를 추출하고 싶습니다. 다른 테이블 태그는 다른 정보이며 유용하지 않습니다. – Harikrishna

+0

@Mike Two Sir .. 하나 이상의 테이블이있는 많은 웹 페이지가 있습니다. 그리고 모든 웹 페이지에서 전화 번호와 주소의 열 이름을 가진 단 하나의 테이블에 대한 데이터를 추출하려고합니다. – Harikrishna

관련 문제