想知道是否有其他人知道一种好的、快捷的和强大的方式让我循环遍历所有的图像URL并将它们下载到一个文件夹?我可以接受任何建议,例如WinForms、批处理文件,尽管我对两者都很陌生。非常感谢您的任何帮助。
编写一个 C# 命令行应用程序(或 Winforms,如果你更倾向于此),并使用 WebClient 类来获取文件。
以下是一些教程:
你需要提供一个要下载的文件列表,并遍历该列表,为每个文件发出请求并保存结果,或者发出索引页面的请求,使用类似于HTML Agility Pack 的工具解析它以查找所有图像标记,然后为每个图像发出请求,并将结果保存在本地驱动器某处。
编辑
如果你只想这样做一次(又如,不作为应用程序的一部分),那么mbeckish 的回答最有意义。
那么wget呢?它可以下载一个文件中指定的URL列表。
wget -i c:\list-of-urls.txt
在假设这是一个一次性的项目,并且您是其他技术的新手的情况下,我建议如下:
与其尝试在一个Web请求中下载所有3000个图像,不如每次请求一个图像。当图像下载完成后,重定向到相同的页面,将要获取的下一个图像的URL作为查询字符串参数传递。下载该文件,然后重复此过程,直到下载完所有图像。
这不是我所说的“生产”解决方案,但如果我的假设是正确的,这是一个可以让您快速上手的解决方案。
另一个相当简单的解决方案是创建一个简单的C#控制台应用程序,使用WebClient下载每个图像。以下伪代码应该足以让您开始:
List<string> imageUrls = new List<string>();
imageUrls.Add(..... your urls from wherever .....)
foreach(string imageUrl in imagesUrls)
{
using (WebClient client = new WebClient())
{
byte[] raw = client.DownloadData(imageUrl);
.. write raw .. to file
}
}
我曾经在WinForms中编写过类似的应用程序,它可以循环遍历Excel电子表格中的URL并下载图像文件。我认为你在将其实现为Web应用程序时遇到的问题是服务器只允许该进程运行一小段时间,然后就会超时。你可以在web.config文件中增加这个时间(更改httpRuntime元素的executionTimeout属性),或者将此功能实现为WinForms应用程序,这样长时间执行不会成为问题。如果这不仅仅是一个临时应用程序,并且你决定采用WinForms路线,你可能需要添加一个进度条来显示下载进度。
Parallel.ForEach()
来加快下载速度。 - roufamatic