【问题标题】:How to get first-level elements from HTML file with HTML Agility Pack & c#如何使用 HTML Agility Pack & c# 从 HTML 文件中获取一级元素
【发布时间】:2013-08-21 13:13:38
【问题描述】:

我想通过 HTML Agility Pack 解析 HTML 文件得到一级元素,例如结果如下:

<html>
  <body>

     <div class="header">....</div>
     <div class="main">.....</div>
     <div class="right">...</div>
     <div class="left">....</div>
     <div class="footer">...</div>

   </body>
</html>

每个都包含其他标签... 我想提取网站中存在的所有文本,但要单独提取。例如右侧分开,左侧分开,页脚等等......

谁能帮帮我?

谢谢...

【问题讨论】:

  • 但是你有什么尝试..!
  • 您有一些特定的 html 需要解析,或者您希望任何 html 页面都具有这种结构?另外你说的提取文本是什么意思,你能给个例子吗?
  • @lazyberezovsky :是的,任何 html 页面。它是 maens:没有标签的文本
  • 正如提问者在对我的回答的评论中提到的那样,这实际上并不是一个适用于某个特定网站的问题,而是适用于您为 url 指定的任何网站,因此,这是不可能的只有一种解决方案。

标签: c# html-parsing html-agility-pack


【解决方案1】:

使用 HtmlAgilityPack 从给定的 URL 加载网页,然后通过选择正确的相应标签对其进行解析。

HtmlWeb page = new HtmlWeb();
HtmlDocument doc = new HtmlDocument();
docc = page.Load("http://www.google.com");

如果您想选择类名为“header”的特定div,请使用文档对象的DocumentNode 属性。

string mainText = doc.DocumentNode.SelectSingleNode("//div[@class=\"main\"]").InnerText;

虽然您的 HTML 中可能有几个标签是“主”类的成员,因此您必须选择所有标签然后遍历集合,或者在选择单个节点时更精确。

要获得所有标签的集合表示,即在类“main”中,请改用DocumentNode.SelectNodes 属性。


我建议您在 SO 上查看这个问题,那里提供了一些基础知识和教程链接。

How to use HTML Agility pack

【讨论】:

  • 是的,我知道这一点,但我希望对任何网站执行该操作虽然每个网站的模式不同,这是我的问题!!!:(
  • 那么我建议你想出自己的算法或通用方法来神奇地为你做到这一点,因为到目前为止还没有人做到这一点!如果您知道所有网站上的所有类名等都相同,只需遍历它们,否则您的问题无法回答。
猜你喜欢
  • 2019-12-09
  • 1970-01-01
  • 2011-05-10
  • 2021-07-31
  • 2012-11-26
  • 2013-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多