0

コードは機能しますが、ページへの正確なリンクを取得できません。そのようにして何も返さないと、パスが何も見つからないために発生する例外が返されます。ページは次のとおりで、「SelectSingleNode」でこのパスのビデオを取得する必要があります。

YouTubeからビデオのリンクを取得するための正しいXPathを構築するのを手伝ってください。

私のソースコード:

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;
    }

このページの「Inspect Element」をクリックすると、「SelectSingleNode」で説明した方法で YouTube リンクが見つかります。リンクを見つけて助けていただけるようにそこを離れたところですが、その文字列は正しくありません。

このコードは別のリンクを取得します。YouTubeビデオの実際のリンクを取得する必要があります。私はこのXPath文字列を試しましたが、今はうまくいきます:"//html/body/div/iframe/html/head"

4

2 に答える 2

0

HEAD には複数の子 LINK 要素があります。次のように、必要なものを特定する必要があります。e.Document.DocumentNode.SelectSingleNode("//html/head/link[@id='someId']")

于 2013-07-16T22:03:38.003 に答える
0

どう//iframe[contains(@src, "youtube")]//link[@rel="canonical"]ですか?

を返します<link rel="canonical" href="http://www.youtube.com/watch?v=byp94CCWKSI"/>


IFrames のコンテンツを取得しない HtmlAgilityPack を使用しているメソッド シグネチャに基づいて推測しています。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 に答える