none
C#WebClient获取服务器网页点击超链接URL RRS feed

  • 问题

  • 各位老师:

    假设服务器网页中有如下4个可供下载的文件
    <a href='下载文件A的url'>点我下载文件A</a>
    <a href='下载文件B的url'>点我下载文件B</a>
    <a href='下载文件C的url'>点我下载文件C</a>
    <a href='下载文件D的url'>点我下载文件D</a>

    想从从客户端通过c#程序,利用WebClient下载所选定的文件。

    网上介绍了很多具体的下载方法,我的问题是:
    1:如何获取在页面当前点击的具体超链接的URL地址?
    2:WebClient的什么方法或事件可以实现?

    谢谢!


    ly_he

    2021年5月10日 0:53

答案

  • 你好,

    首先,你可以使用WebClient的DownloadString方法来获取指定网站的html字符串。

    其次,你可以用正则表达式来筛选你所需要的URL。

    最后,你可以通过WebClient的DownloadFile方法来下载相关文件。

    我制作了下面的html。

    <!DOCTYPE html>
    <html>
    <body>
    
    <h1>My First Heading</h1>
    
    <a href="https://filesamples.com/samples/document/txt/sample1.txt" download="" class="btn btn-primary pull-right"><i class="fas fa-download"></i>Download-Sample1.txt</a>
    <a href="https://filesamples.com/samples/document/txt/sample2.txt" download="" class="btn btn-primary pull-right"><i class="fas fa-download"></i>Download-Sample2.txt</a>
    <a href="https://filesamples.com/samples/document/txt/sample3.txt" download="" class="btn btn-primary pull-right"><i class="fas fa-download"></i>Download-Sample3.txt</a>
    
    <p>My first paragraph.</p>
    
    </body>
    </html>

    我用了下面的c#代码区访问,最后能够成功下载文件以及得到相关URL地址。

    WebClient client = new WebClient();
                string html = client.DownloadString("D:\\Test.html");
                const string PATTERN = @"(<a.*?>.*?</a>)";
    
                MatchCollection collection = Regex.Matches(html, PATTERN, RegexOptions.Singleline);
                foreach (Match match in collection)
                {
                    string a = match.Groups[1].Value;
                    string href;
    
                    Match m2 = Regex.Match(a, @"href=\""(.*?)\""", RegexOptions.Singleline);
                    if (m2.Success)
                    {
                        href = m2.Groups[1].Value; // Get URL
                        Console.WriteLine(href);
                        client.DownloadFile(href,Path.GetFileName(href));
                    }
    
                }

    Result:

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 ly_he 2021年5月12日 8:23
    2021年5月10日 7:37
    版主

全部回复

  • 你好,

    首先,你可以使用WebClient的DownloadString方法来获取指定网站的html字符串。

    其次,你可以用正则表达式来筛选你所需要的URL。

    最后,你可以通过WebClient的DownloadFile方法来下载相关文件。

    我制作了下面的html。

    <!DOCTYPE html>
    <html>
    <body>
    
    <h1>My First Heading</h1>
    
    <a href="https://filesamples.com/samples/document/txt/sample1.txt" download="" class="btn btn-primary pull-right"><i class="fas fa-download"></i>Download-Sample1.txt</a>
    <a href="https://filesamples.com/samples/document/txt/sample2.txt" download="" class="btn btn-primary pull-right"><i class="fas fa-download"></i>Download-Sample2.txt</a>
    <a href="https://filesamples.com/samples/document/txt/sample3.txt" download="" class="btn btn-primary pull-right"><i class="fas fa-download"></i>Download-Sample3.txt</a>
    
    <p>My first paragraph.</p>
    
    </body>
    </html>

    我用了下面的c#代码区访问,最后能够成功下载文件以及得到相关URL地址。

    WebClient client = new WebClient();
                string html = client.DownloadString("D:\\Test.html");
                const string PATTERN = @"(<a.*?>.*?</a>)";
    
                MatchCollection collection = Regex.Matches(html, PATTERN, RegexOptions.Singleline);
                foreach (Match match in collection)
                {
                    string a = match.Groups[1].Value;
                    string href;
    
                    Match m2 = Regex.Match(a, @"href=\""(.*?)\""", RegexOptions.Singleline);
                    if (m2.Success)
                    {
                        href = m2.Groups[1].Value; // Get URL
                        Console.WriteLine(href);
                        client.DownloadFile(href,Path.GetFileName(href));
                    }
    
                }

    Result:

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 ly_he 2021年5月12日 8:23
    2021年5月10日 7:37
    版主
  • 谢谢Jack老师。

    ly_he

    2021年5月12日 8:23