【问题标题】:C# download file from web using URL and xpath [closed]C# 使用 URL 和 xpath 从 Web 下载文件 [关闭]
【发布时间】:2016-01-22 22:32:56
【问题描述】:

我想从site 下载每日照片,但我不能使用 JPEG 的 URL,因为它每天都在变化。

有没有办法使用页面 URL 和 XPath 从站点下载对象?我试图在 WebClient 中找到一些方法,但没有运气。

【问题讨论】:

  • 尝试下载 html 文件,隔离 primary_photo 类,然后从那里隔离 img 标签。然后就可以得到src直接下载了。
  • 可以使用 HTMLAgilityPack(你可以从 nuget 获得)
  • 是的,我同意@Nasreddine。 HTMLAgility 在这里应该做得很好。图片 url 似乎在唯一的 <link rel="canonical" 元素中。使用 XPath 应该很容易做到这一点。

标签: c# xpath html-parsing webclient-download


【解决方案1】:

我对@9​​87654321@ 的评论示例:

WebClient client = new WebClient();
string resource = client.DownloadString("http://photography.nationalgeographic.com/photography/photo-of-the-day/");
HtmlAgilityPack.HtmlDocument html = new HtmlAgilityPack.HtmlDocument();
html.LoadHtml(resource);
var imgDiv = html.DocumentNode.SelectSingleNode("//*[contains(@class,'primary_photo')]");
var imgSrc = imgDiv.SelectSingleNode("//img/@src");
string relativePath = imgSrc.GetAttributeValue("src", "");

【讨论】:

  • 谢谢,虽然imgDiv.SelectSingleNode("//img/@src") 是第一个匹配元素,而不是 imgDiv 节点中的第一个元素,你必须在一个地方使用整个路径 var imgSrc = html.DocumentNode.SelectSingleNode("//div[@class='primary_photo']//img/@src") 更多信息 here 挖掘深度部分跨度>
  • 或者更确切地说var imgSrc = imgDiv.SelectSingleNode(".//img/@src"); 注意 // 之前的点。这将选择作为该 imgDiv 节点后代的第一个匹配节点。
  • 你是对的@LocEngineer,这是更清晰的解决方案
猜你喜欢
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-19
  • 2018-04-16
相关资源
最近更新 更多