【问题标题】:XPath to get youtube video c#XPath 获取 youtube 视频 c#
【发布时间】:2013-07-16 21:44:46
【问题描述】:

代码有效,但我无法获得页面的确切链接,这样我不会返回任何内容,它会返回一个异常,因为路径找不到任何内容。 The page is as follows,我需要在“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"

【问题讨论】:

    标签: c# xpath youtube windows-phone word-wrap


    【解决方案1】:

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

    【讨论】:

    • 链接没有任何 ID。
    • 可以通过任何属性唯一标识 LINK 元素吗?还是总是第 n 个子 LINK 元素?
    • 该链接在 rel = "canonical" 之外没有其他属性,这就是我遇到麻烦的原因。单击网站,然后用鼠标右键单击页面并选择“检查元素”,这样您就可以找到链接在哪里。
    • 试试 e.Document.DocumentNode.SelectSingleNode("//html/head/link[[last()]"); 看起来它是 HEAD 元素中的最后一个子 LINK 元素
    • 可以看到iframe后面有个“#document”,下面是 再次...我想是因为这个,但不知道如何解决。
    【解决方案2】:

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

    【讨论】:

    • @LuizNegrini,然后您应该发布您正在使用的 XPath 的实现,因为它显然是非标准的。显然有些不同。
    • 是的,使用 HtmlAgilityPack,但返回到我正在使用的平台是 Windows Phone。加载方法是异步的。
    • 很奇怪,我放了一个 MessageBox 来查看它在 primeio 代码块中使用正确的视频 url 打开的字符串的内容是什么。但是当我给 OK 一个异常时说它是空的。
    • 忘了告诉你,我只需要获取视频的url,不要下载视频本身。我去在网络浏览器中打开它。
    • 用这个路径获取的链接不正确,在网页浏览器的地址栏改手总是报错。说视频不存在。
    猜你喜欢
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 2016-03-12
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多