如何从循环运行的网站下载图像?

时间:2013-09-14 21:43:51

标签: c# winforms

这是网站:

http://www.sat24.com/foreloop.aspx?type=1&continent=europa# 那里的图像在循环中移动。

这是一张图片的网址示例:

http://www.niederschlagsradar.de/images.aspx?jaar=-6&type=europa.precip&datum=201309171200&cultuur=en-GB&continent=europa 中间有时间和日期:201309171200 我需要以某种方式从每个网址自动解析时间和日期。

例如,构建一些字符串:

“www.niederschlagsradar.de/images.aspx?jaar=-6&type=europa.precip&datum=”+ parsedDateAndTime +& cultuur = en-GB& continent = europa 我到目前为止尝试的是:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;

namespace DownloadImages
{
    public partial class Form1 : Form
    {
        int counter;

        public Form1()
        {
            InitializeComponent();

            counter = 0;

            string localFilename = @"d:\localpath\";
            while (true)
            {
                using (WebClient client = new WebClient())
                {
                    client.DownloadFile("http://www.sat24.com/foreloop.aspx?type=1&continent=europa#", localFilename + counter.ToString("D6") + ".jpg");
                    counter++;
                }
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }
}

但我没有解析任何网址,但我正在使用主循环网址,我看到它每次下载46kb文件,但我无法打开它我得到一个错误,油漆无法打开它...等

这是我做错的方式。

如何从循环中下载网站中的每张图片?

如何从每张图片中解析日期和时间,以便不会一直下​​载相同的图像?我需要以某种方式获取每个image-url的日期和tiem,并将其用作符号或其他内容,以便它不会下载相同的文件。

编辑**

每张图片的每个网址的日期和时间都在变化,例如:

http://www.niederschlagsradar.de/images.aspx?jaar=-6&type=europa.precip&datum=201309161500&cultuur=en-GB&continent=europa

下一张图片网址为:http://www.niederschlagsradar.de/images.aspx?jaar=-6&type=europa.precip&datum=201309171500&cultuur=en-GB&continent=europa

如果您右键单击图像并制作:复制图像URL,您可以看到日期和时间根据循环的变化,就像在网站中一样,您可以看到时间和日期是每个图像的变化。

1 个答案:

答案 0 :(得分:1)

我认为您的意思是您获得了表单的网址:

"http://www.niederschlagsradar.de/images.aspx?
    jaar=-6&type=europa.precip&datum=201309171500&cultuur=en-GB&continent=europa"

并且您想要提取该日期和时间位,以便将其与您已有的图像列表进行比较。因此,在上文中,您希望获得201309171500

您可以使用正则表达式执行此操作:

string theUrl = @"http://www.niederschlahttp://www.niederschlagsradar.de/images.aspx?
    jaar=-6&type=europa.precip&datum=201309171500&cultuur=en-GB&continent=europa";

Match m = Regex.Match(theUrl, @"&datum=(\d{12})&");
if (m.Success)
{
    string theDate = m.Groups[1].Value;
    Console.WriteLine(theDate);
}

其他信息

如果您查看原始网址http://www.sat24.com/foreloop.aspx?type=1&continent=europa#中的HTML,您会看到一些如下所示的Javascript:

var images = new Array(
    "http://www.niederschlagsradar.de/images.aspx?jaar=-6&type=europa.precip&datum=201309150000&cultuur=en-GB&continent=europa",
    "http://www.niederschlagsradar.de/images.aspx?
    // many more image URLs here
);

您需要下载HTML页面,在HTML中找到该数组,并解析出各个图像的URL。然后,您可以依次下载每个图像。