2014-02-19 2 views
2

다음과 같은 테이블이 있습니다. 해당 테이블의 각 행의 1 및 4 번째 열을 스크랩하고 싶습니다.htmlagility 팩으로 테이블 데이터 스크랩

enter image description here

테이블의 구조는 같다 :

enter image description here

나는 이런 식으로 뭔가를 시도 각 데이터

b 태그가 있습니다. 하지만 내 결과를 얻지 못했습니다.

HtmlWeb web = new HtmlWeb(); 
HtmlAgilityPack.HtmlDocument doc = web.Load("http://www.islam4you.info/contents/names/ma.php"); 
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//b"); 


double k = 5; 

try 
{ 
    foreach (HtmlNode n in nodes) 
    { 

     if (k != 0) 
     { 
      if ((k % 5) == 1) 
      { 
       link = n.InnerHtml; 
       nam_list.Add(link); 
      } 

      if ((k % 5) == 4) 
      { 

       link = n.InnerHtml; 
       meng_list.Add(link); 
      } 
     } 
     k++; 
     } 
    } 
    catch (NullReferenceException) 
    { 
     MessageBox.Show("No link found"); 
    } 

어떻게 그 테이블에서 첫 번째 열과 네 번째 열의 데이터를 얻을 수 있습니까 ???

+0

하십시오, 그것은 그것 없이는 이해가되지하지 않는 한 질문 제목에 사용되는 언어에 대한 정보를 포함하지 않는 사용 방법을 쉽게

체크 아웃. 태그는 이러한 용도로 사용됩니다. –

답변

0

과도한 소리 일지 모르지만이 경우 라이브러리를 사용하는 것이 더 좋을 것이라고 생각합니다. 유지 보수를 위해 더 낫습니다. 이 CsQuery

[TestFixture] 
public class HtmlParse 
{ 
    [Test] 
    public void Test() 
    { 

     var dom = 
      CQ.Create(
       @"<table><tbody> <tr><td><b>Aadam</b></td></tr> <tr><td></td></tr> <tr><td></td></tr> <tr><td></td></tr> <tr><td><b>Earth</b></td></tr></tbody></table>"); 

     var results = dom["table tr:nth-child(1) b, table tr:nth-child(5) b"]; 

     foreach (var result in results) 
     { 
      Console.WriteLine(result.InnerText); 
     } 
    } 

} 
0
var table = doc.DocumentNode.SelectNodes("//table[@bordercolor='#111111'][1]") 
       .Descendants("tr") 
       .Select(tr => tr.Descendants("td").Select(td => td.InnerText).ToList()) 
       .Where(x => x.Count() == 5) 
       .ToList();