使用Webclient
和DownloadFile();
我正在尝试从此网址下载.jpg:
使用此代码:
private void TEST_button1_Click(object sender, EventArgs e)
{
WebClient MyDownloader = new WebClient();
MyDownloader.DownloadFile(@"http://1.bp.blogspot.com/_pK6J3MTn5co/S6kuH3aqbeI/AAAAAAAACUY/06axvmjU91k/s1600-h/avengers02_B&W_UL.jpg", @"c:\test.jpg");
}
然而,当我运行这个时,我最终得到一个名为 test.jpg 的文件,其中包含html标记......:
<html>
<head>
<title>avengers02_B&W_UL.jpg (image)</title>
<script type="text/javascript">
<!--
if (top.location != self.location) top.location = self.location;
// -->
</script>
</head>
<body bgcolor="#ffffff" text="#000000">
<img src="http://1.bp.blogspot.com/_pK6J3MTn5co/S6kuH3aqbeI/AAAAAAAACUY/06axvmjU91k/s1600/avengers02_B%26W_UL.jpg" alt="[avengers02_B&W_UL.jpg]" border=0>
</body>
</html>
如何下载实际的.jpg?
非常感谢任何帮助 - 谢谢!
答案 0 :(得分:2)
如果服务器在特定的Url上将HTML返回给您的请求,则无法强制它在该Url上返回其他内容。
你可以做的是用HtmlAgilityPack解析响应并找到实际图像的url并在另一个请求中获取它。
答案 1 :(得分:1)
有办法做到这一点。首先,将HTML内容下载到字符串并提取正确的图像URL。然后使用正确的URL下载文件。
WebClient client = new WebClient();
var path = @"http://1.bp.blogspot.com/_pK6J3MTn5co/S6kuH3aqbeI/AAAAAAAACUY/06axvmjU91k/s1600-h/avengers02_B&W_UL.jpg";
var content = client.DownloadString(path);
System.Text.RegularExpressions.Regex regex = new Regex(@"(?<=<img\s+[^>]*?src=(?<q>['""]))(?<url>.+?)(?=\k<q>)");
var match = regex.Match(content);
if (match.Success)
{
client.DownloadFile(match.Value, @"e:\test1.jpg");
}
答案 2 :(得分:0)
点击该链接会导致2次下载,首先是一页HTML(标注后缀为.jpg
),然后是HTML中的图片。
那么您是否需要获取上一个请求提取的HTML中img
标记的网址?
我猜测从原始网址中删除-h
可能会指向您所追求的实际文件。
希望您有权抓取这些文件......