调试和运行模式

时间:2017-10-14 19:58:14

标签: c# .net web-scraping

public void Imagesaver(string url)
{
    string result = Filename(url);
    string SourceCode = worker.GetSourceCode(url);

    List<string> names1 = new List<string>();

    MatchCollection data2 = Regex.Matches(SourceCode, "(src=\"|src=\\/\")([^>]*?jpg|png|gif)", RegexOptions.Singleline);

    string name = string.Empty;

    foreach (Match m in data2)
    {
        name = m.Groups[2].Value;

        if (name.Contains("http"))
        {
            names1.Add(name);
        }
        else
        {
            names1.Add(url+name);
        }
    }

    WebClient client = new WebClient();
    int i = 0;

    foreach (string name2 in names1)
    {
        Uri imageurl = new Uri(name2);

        try
        {
            client.DownloadFileAsync(imageurl, (@"C:\Users\Ramazan BIYIK\Desktop\HTML içerik\" + result+"\\" + i + ".jpg"));
            i++;
        }
        catch(Exception ex) 
        {
            continue; 
        }
    }
}

我有一个代码块,可以将.jpg.png.gif个扩展文件从网站的源代码保存到本地。但是当我尝试调试和非调试模式时,它向我展示了不同的结果。

例如,在网站中有40个文件,其扩展名为.jpg。在调试模式下,我可以下载它们,除了在运行时,我只能下载6个文件。

我搜索了这个问题,但所有的答案都是关于数字而我没有处理数字(我想)。请帮助,抱歉我的英语不好。

1 个答案:

答案 0 :(得分:0)

感谢-Nuf解决了问题。请将您的推荐作为答案分享。 我跟着这个link。问题是,我只尝试了一个webclient实例。这就是我的问题的答案。

foreach (string name2 in names1)
{
       WebClient client = new WebClient();
       Uri imageurl = new Uri(name2);
       try
       {

           client.DownloadFileAsync(imageurl, (@"C:\Users\Ramazan BIYIK\Desktop\HTML içerik\" + result+"\\" + i + ".jpg"));
           i++;
        }
           catch(Exception ex) {continue; }
}

Hovewer使用异步方法并在某些情况下等待表达式可以工作(或者我以错误的方式使用它):

public async void Imagesaver(string url)
{

    string result = Filename(url);
    string SourceCode = worker.GetSourceCode(url);
    List<string> names1 = new List<string>();
    MatchCollection data2 = Regex.Matches(SourceCode, "(src=\"|src=\\/\")([^>]*?jpg|png|gif)", RegexOptions.Singleline);

    string name = string.Empty;

        foreach (Match m in data2)
        {

            name = m.Groups[2].Value;

            if (name.Contains("http"))
            {
                names1.Add(name);
            }
            else
            {
                names1.Add(url+name);
            }

        }

        int i = 0;
        WebClient client = new WebClient();
        foreach (string name2 in names1)
        {

            Uri imageurl = new Uri(name2);
            try
            {

              await  Task.Run(()=>client.DownloadFileAsync(imageurl, (@"C:\Users\Ramazan BIYIK\Desktop\HTML içerik\" + result+"\\" + i + ".jpg")));
                i++;
            }
            catch(Exception ex) {continue; }
        }

使用此代码块ı可以下载更多文件然后第一个代码块(我的问题中的代码块)。

结果ı只能下载只有一个webclient实例的6个文件。(代码块在我的问题中)。当ı使用异步方法时,ı可以下载18个文件。但当ı在foreach循环中使用实例时,ı可以下载所有文件(40个文件)。

相关问题