0

该代码有效,但我无法获得页面的确切链接,这样我不会返回任何内容,它会返回一个异常,因为路径找不到任何内容。页面如下,我需要在“SelectSingleNode”获取该路径的视频。

请帮助我构建正确的 XPath 以从 youtube 获取视频链接。

我的源代码:

private void DownloadCompleted(object sender, HtmlDocumentLoadCompleted e)
    {
      var data = e.Document.DocumentNode.SelectSingleNode("//html/head/link")
           .Attributes["href"].Value.ToString();

           MessageBox.Show(data);
           Uri obj = new Uri(data);
           Web.Source = obj;
           Web.Visibility = Visibility.Visible;
    }

如果您单击此页面上的“检查元素”,您将找到我在“SelectSingleNode”中描述的 youtube 链接。我刚离开那里,所以你可以找到链接并帮助我,但那个字符串不正确。

此代码获得另一个链接。我需要获取 youtube 视频的真实链接。我尝试了这个 XPath 字符串,但现在可以工作了:"//html/body/div/iframe/html/head"

4

2 回答 2

0

怎么样//iframe[contains(@src, "youtube")]//link[@rel="canonical"]

退货<link rel="canonical" href="http://www.youtube.com/watch?v=byp94CCWKSI"/>


我根据您正在使用 HtmlAgilityPack 的方法签名猜测......它不会检索 IFrame 的内容。您需要对 IFrame 的内容发出单独的请求:

var hwMainPage = new HtmlWeb();
var hdMainPage = hwMainPage.Load(@"http://www.unnu.com/jason-derulo/the-other-side");
var iframeUri = hdMainPage.DocumentNode
    .SelectSingleNode("//iframe[contains(@src, \"youtube\")]")
    .Attributes["src"].Value;

var hwIframe = new HtmlWeb();
var hdIframe = hwIframe.Load(iframeUri);
var videoCanonicalUri = hdIframe.DocumentNode
    .SelectSingleNode("//link[@rel=\"canonical\"]")
    .Attributes["href"].Value;

// videoCanonicalUri == http://www.youtube.com/watch?v=byp94CCWKSI
于 2013-07-17T00:59:26.383 回答
0

HEAD 中有多个子 LINK 元素。你需要通过你想要的来识别,类似于这样:e.Document.DocumentNode.SelectSingleNode("//html/head/link[@id='someId']")

于 2013-07-16T22:03:38.003 回答