使用html敏捷包扫描表数据

时间:2014-02-19 18:31:58

标签: c# html-agility-pack

我有一张如下表格。我想废弃该表每行的第1和第4列。

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");
  }

如何从该表中获取第1列和第4列的数据???

2 个答案:

答案 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);
        }
    }

}

答案 1 :(得分: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();