【问题标题】:Fetch data from website using HtmlAgilityPack使用 HtmlAgilityPack 从网站获取数据
【发布时间】:2012-01-20 11:43:00
【问题描述】:

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

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

但是,我的代码的问题是,它还获取了&lt;div class="cls_img"&gt;&lt;/div&gt; 的图像。我不需要这张图。那么,如何在不从&lt;div class="cls_img"&gt;获取图像的情况下获取&lt;div id="id1" class="class1"&gt;的所有内容。

【问题讨论】:

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


    【解决方案1】:

    第 1 步 - 选择并删除 &lt;div class="cls_img"&gt; 内的图像 &lt;div class="class1"&gt; 标记:

      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 步 - 选择 &lt;div class="class1"&gt; 元素(您已经完成了) - 现在没有该图像:

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

    【讨论】:

    • 嘿!亚历克斯,你能帮帮我吗?实际上我是 HtmlAgilityPact 的新手。我想学它。我想学习它的类,如 HtmlNode 类、HtmlNodeCollection 类等。所以,请告诉我来源(如任何网站或电子书),我可以从哪里学习它。
    • @Sagar Kadam,据我所知,它还没有文档(建议您访问他们的 Discussions tab 来提问)。这里也有很多例子,stackoverflow。此外,当您确定答案对您最有帮助时,请单击答案左侧的复选框轮廓将其标记为已接受的答案。
    • 耶!亚历克斯,我认为你是对的。我搜索了很多与 Agilitypack 教程相关的内容,但一无所获。我想,我应该更喜欢stackoverflow 来学习它。感谢您的帮助。
    【解决方案2】:

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

    node.ParentNode.RemoveChild(node);
    

    【讨论】:

      猜你喜欢
      • 2015-11-15
      • 1970-01-01
      • 2019-01-18
      • 1970-01-01
      • 2020-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多