使用 html 敏捷包抓取表数据
Posted
技术标签:
【中文标题】使用 html 敏捷包抓取表数据【英文标题】:Scraping table data with htmlagility pack 【发布时间】:2014-03-20 07:14:19 【问题描述】:我有一张如下表。我想抓取该表每一行的第 1 列和第 4 列。
表格的结构是这样的:
每个数据都有一个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】: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();
【讨论】:
【参考方案2】:这听起来可能有点矫枉过正,但我认为在这种情况下使用库会更好。只是为了维护更好。
看看使用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);
【讨论】:
以上是关于使用 html 敏捷包抓取表数据的主要内容,如果未能解决你的问题,请参考以下文章
OSPF的基本配置 之 抓取消息数据包 和 三张表信息的查看