我遇到了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 Ability Pack添加为资源并已开始尝试获取它。 有人可以解释如何获取所有这些细节和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);
}
}
^上述代码仅用于获取每个视频的标题。但它也有空白输入。代码已执行,结果如下。
答案 0 :(得分:1)
您的xpath正在<a>
中选择<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.
}
我希望这很清楚。祝你好运。
答案 1 :(得分:1)
似乎给我的答案没有帮助,所以在挖掘HEAPS之后,我终于明白了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);
}
我只需抓住课堂内容。知道这一点使它更容易使用。