1

我遇到了 XPath 语法问题,因为我不明白如何使用它来提取某些 HTML 语句。我正在尝试从频道页面加载视频信息;http://www.youtube.com/user/CinemaSins/videos

我知道有一条线包含来自视图、标题、ID 等的所有详细信息。

这是我试图从 html 中获取的内容: 在此处输入图像描述

那是第 2836 行;

<div class="yt-lockup clearfix  yt-lockup-video yt-lockup-grid context-data-item" data-context-item-id="ntgNB3Mb08Y" data-context-item-views="243,456 views" data-context-item-time="9:01" data-context-item-type="video" data-context-item-user="CinemaSins" data-context-item-title="Everything Wrong With The Chronicles Of Riddick In 8 Minutes Or Less">

我不知道怎么做,但是我添加了 HTML 能力包作为资源,并开始尝试获取它。有人可以解释如何获取所有这些细节和涉及的 XPath 语法吗?

我已经尝试过:

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//div[@class='yt-lockup clearfix  yt-lockup-video yt-lockup-grid context-data-item']//a"))
            {
                if (node.ChildNodes[0].InnerHtml != String.Empty)
                {
                    title.Add(node.ChildNodes[0].InnerHtml);
                }
            }

^ 以上代码仅用于获取每个视频的标题。但它也有一个空白输入。执行的代码和结果如下。

在此处输入图像描述

4

2 回答 2

1

<a>您的xpath 正在选择<div>. 如果你想要的属性<div>太,那么你需要要么

a) 选择两个元素并分别处理它们。b) 运行几个 xpath 查询,在其中指定所需的确切属性。

让我们来看这个例子的(a)。

var nodes = doc.DocumentNode.SelectNodes("//div[@class='yt-lockup clearfix  yt-lockup-video yt-lockup-grid context-data-item']");

并像这样获取属性和标题:

foreach(var node in nodes)
{
  foreach(var attribute in node.Attributes)
  {
    // ... Get the values of the attributes here.
  }

  var linkNodes = node.SelectNodes("//a"));
  // ... Get the InnerHtml as per your own example.
}

我希望这已经足够清楚了。祝你好运。

于 2013-09-08T12:04:25.387 回答
1

似乎给我的答案在大量挖掘之后并没有帮助,我终于明白了 XPath 是如何工作的,并自己设法做到了,如下所示;

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//div[@class='yt-lockup clearfix  yt-lockup-video yt-lockup-grid context-data-item']"))
            {
                String val = node.Attributes["data-context-item-id"].Value;
                videoid.Add(val);
            }

我只需要抓住课堂上的内容。知道了这一点,使用起来就容易多了。

于 2013-09-09T21:48:56.983 回答