4

所以我正在编写一个应用程序来做一点屏幕抓取。我正在使用HTML Agility Pack将整个 HTML 页面加载到HtmlDocoument被调用的实例中doc。现在我想解析那个文档,寻找这个:

<table border="0" cellspacing="3">
<tr><td>First rows stuff</td></tr>
<tr>
<td> 
The data I want is in here <br /> 
and it's seperated by these annoying <br /> 's.

No id's, classes, or even a single <p> tag. </p> Just a bunch of <br />  tags.
</td> 
</tr> 
</table> 

所以我只需要在第二行中获取数据。我怎样才能做到这一点?我应该使用正则表达式还是其他东西?

更新:这是我加载我的方式doc

HtmlWeb hw = new HtmlWeb();
HtmlDocument doc = hw.Load(Url);
4

5 回答 5

3

由于您已经在使用Html Agility Pack,我建议您使用它提供的方法来查找您想要的信息。有几种方法可以导航文档,但最简洁的方法之一是使用XPath。在这种情况下,您可以使用以下内容:

HtmlDocument doc = new HtmlDocument();
doc.Load("input.html");
HtmlNode node = doc.DocumentNode
                   .SelectNodes("//table[@cellspacing='3']/tr[2]/td")
                   .Single();
string text = node.InnerText;
于 2010-06-12T05:43:06.057 回答
1

“其他”是最好的答案——HTML 最好由 HTML 解析器解析,而不是通过正则表达式。我不是 C# 专家,但我听说HTML Agility Pack很受欢迎。

于 2010-06-12T05:31:41.880 回答
1

我会说 som̡et̨hińg Else

于 2010-06-12T05:33:37.210 回答
0

使用 xml 解析器可能会获得更好的效果。

于 2010-06-12T05:30:53.643 回答
0

如果您已经在使用 Agility 包,那么只需使用一些东西doc.DocumentNode.SelectNodes("//table[@cellspacing='3']")来获取文档中的表格。尝试查看文档和编码示例。由于您已经拥有结构化数据,因此返回文本数据并重新解析是很可笑的。

于 2010-06-12T05:43:51.703 回答