我首先手动浏览到以下 URL:
然后,如果查看页面源代码并查找 og:image 元标记,我会发现以下内容:
<meta property="og:image" content="http://l.yimg.com/bt/api/res/1.2/JjwtkhIEdT9nKxLp8p0LFQ--/YXBwaWQ9eW5ld3M7cT04NTt3PTYwMA--/http://media.zenfs.com/en_us/News/Reuters/2013-10-08T122032Z_1_CBRE9970YAZ00_RTROPTP_2_SOCCER-WORLD.JPG"/>
但是,如果我尝试以编程方式解析相同的 url,我会得到一个通用的 Yahoo 股票图标。这是我正在使用的代码:
string url = "http://sports.yahoo.com/news/mounting-injuries-wont-stop-germanys-path-world-cup-122032650--sow.html";
WebClient wc = new WebClient();
var doc = new HtmlAgilityPack.HtmlDocument();
string newsPageSource = wc.DownloadString(sourceUri.ToString());
doc.LoadHtml(newsPageSource);
...
(我已经删除了其余的简洁)。
如果我在这里调试并检查包含目标网页内容的newsPageSource字符串并查找 og:image 标记,则其内容不同:
<meta property="og:image" content="http://l.yimg.com/bt/api/res/1.2/81I5U991YW6EEaB2Cjd58g--/YXBwaWQ9eW5ld3M7cT04NTt3PTYwMA--/http://l.yimg.com/os/mit/media/m/social/images/social_default_logo-1481777.png"/>
所以不确定这里发生了什么。我想,当手动浏览时,原始 URL 可能会重定向到其他一些内部 URL,但是当以编程方式执行此操作时,代码只是抓取页面源的第一个“快照”,而无需等待更长的时间并执行任何重定向。任何人都可以在这里阐明吗?或者更好的是,在这种情况下,我将如何提取真实图像 (2013-10-08T122032Z_1_CBRE9970YAZ00_RTROPTP_2_SOCCER-WORLD.JPG) 而不是获取 Yahoo 股票图标 (social_default_logo-1481777.png)。
不知何故,当我粘贴相同的链接时,Facebook 和 Google+ 足够聪明,可以提取正确的图像。
谢谢, 阿基尔