【问题标题】:Extract data inside a tag提取标签内的数据
【发布时间】:2015-09-03 10:02:43
【问题描述】:

我阅读了一些关于这个主题的帖子,并尝试实施答案,但我没有想要的输出。

这是HTML代码

<div class="span-8">
  <dl>
    <dt>
      <a title="A Coruña" href="http://www.paginasamarillas.es/all_a-coru%C3%B1a_.html"> A Coruña</a>
    </dt>
    <dt>
      <a title="Álava" href="http://www.paginasamarillas.es/all_alava_.html"> Álava</a>
    </dt>
    <dt>
      <a title="Albacete" href="http://www.paginasamarillas.es/all_albacete_.html"> Albacete</a>
    </dt>
    <dt>
      <a title="Alicante" href="http://www.paginasamarillas.es/all_alicante_.html"> Alicante</a>
      </dt>
...
...

我想获得“巴塞罗那”、“阿利坎特”、“阿尔巴塞特”等。 所以,我尝试以下代码:

var nodos = doc.DocumentNode.SelectNodes("//div[@class='container']");

var nodos = doc.DocumentNode.SelectNodes("//a[@title]");

var nodos = doc.DocumentNode.SelectNodes("//div[@class='span-8']");

但是不起作用,就像页面中不存在类“容器”、属性“标题”或类“span-8”。 也尝试其他变体。 在代码中存在其他带有“容器”类的“div”,以及其他带有“title”属性的“a”,可以很好地提取,但这不是我想要的。

编辑

对不起,我解释错了。 不是一个词,是一组数据。 我修改了上面的HTML代码。

【问题讨论】:

  • 如果你只是想从锚标签中取出巴塞罗那,你可以简单地使用document.getElementsByTagName("a")[0].text

标签: c# html html-agility-pack


【解决方案1】:

我已经测试了您的示例 html 并且可以正常工作:

string html = @"<div class=""container"">
  <div class=""span-24"">
    <div class=""span-8"">
      <dl>
        <dt>
          <a title=""A Coruña"" href=""http://www.example.com/all_example.html""> Barcelona</a>
        </dt>
      </dl>
    </div>
  </div>
</div>";

var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
var div = doc.DocumentNode.SelectSingleNode("//div[@class='span-8']");
if(div != null)
{
    List<string> linkTexts = div.Descendants("a")
            .Select(a => a.InnerText)
            .ToList();  // one item " Barcelona"
}

【讨论】:

    猜你喜欢
    • 2018-11-10
    • 2018-04-18
    • 2021-07-11
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多