使用HtmlAgilityPack从网站获取数据

时间:2012-01-20 11:43:01

标签: c# .net html-agility-pack

我正在开发一个应用程序,我必须从网站上获取数据。网站的格式是:

<div id="id1" class="class1">
    <ol class="cls_ol">
    <li>
       <div class="class2">Content 1</div>
       <div class="cls_img">
                *** Code for some image ***
       </div>
       Content 2
    </li>
    <li>  *** Same like above <li> ***  </li>
    <li>  *** Same like above <li> ***  </li>
    </ol>
</div>

我使用代码来获取此内容......

protected void Button1_Click(object sender, EventArgs e)
{
    var obj = new HtmlWeb();
    var document = obj.Load(" ** url of a website ** ");

    var bold = document.DocumentNode.SelectNodes("//div[@class='class1']");

    foreach (var i in bold)
    {
        Response.Write(i.InnerHtml);
    }

但是,我的代码存在的问题是,它还会获取<div class="cls_img"></div>的图像。我不需要这个图像。那么,如何在不从<div id="id1" class="class1">获取图片的情况下获取<div class="cls_img">的所有内容。

2 个答案:

答案 0 :(得分:1)

第1步 - 选择并删除<div class="cls_img">标记内<div class="class1">内的图片:

  var images = document.DocumentNode.SelectNodes(
      "//div[@class='class1']//*//div[@class='cls_img']//img"
  );

  // note that if no nodes found "images" variable will hold a null value
  foreach (var image in images)
  {
      image.Remove();
  }

第2步 - 选择<div class="class1">元素(您已经完成) - 现在没有图像:

  var bold = document.DocumentNode.SelectNodes("//div[@class='class1']");
  foreach (var node in bold)
  {
      Console.Write(node.InnerHtml);
  }

答案 1 :(得分:0)

遍历节点并找到匹配属性为class =“cls_img”的节点并删除该节点。

node.ParentNode.RemoveChild(node);