Получить данные с веб-сайта, используя HtmlAgilityPack - PullRequest
0 голосов
/ 20 января 2012

Я занимаюсь разработкой приложения, в котором мне нужно получать данные с веб-сайта. Формат сайта:

<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 ]

1 голос
/ 20 января 2012

Шаг 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);
  }
0 голосов
/ 20 января 2012

Переберите узлы и найдите узел с соответствующим атрибутом class = "cls_img" и удалите этот узел.

node.ParentNode.RemoveChild(node);
...