Мне нужно получить каждый файл из URL-адреса, чтобы я мог перебирать их.

Идея состоит в том, чтобы изменить размер каждого изображения с помощью ImageMagick, но сначала мне нужно иметь возможность получить файлы и перебрать их.

Вот код, который я сделал до сих пор

using System;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;



namespace Example
{
    public class MyExample
    {

        public static void Main(String[] args)
        {
            string url = "https://www.paz.cl/imagenes_cotizador/BannerPrincipal/";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            {
                using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                {
                    string html = reader.ReadToEnd();
                    Console.WriteLine(html);

                }
            }

            Console.ReadLine();
        }
    }
}

Который возвращает весь HTML-адрес URL. Тем не менее, мне просто нужны файлы (все изображения), чтобы я мог работать с ними, как я ожидаю.

Есть идеи, как этого добиться?

0
Alejandra Llovera 2 Май 2019 в 19:44

3 ответа

Лучший ответ

Я посмотрел на эту страницу, и это каталог / список файлов. Вы можете использовать Regex извлечь все ссылки на изображения из тела этой страницы.

Вот образец, который я мог бы придумать: HREF="([^"]+\.(jpg|png))

Создайте свой объект регулярного выражения, итерируйте совпадения и загрузите каждое изображение:

var regex = new System.Text.RegularExpressions.Regex("HREF=\"([^\"]+\\.(jpg|png))");
var matches = regex.Matches(html); // this is your html string
foreach(var match in matches) {
   var imagePath = match.ToString().Substring("HREF=\"".Length);
   Console.WriteLine(imagePath);
}

Теперь, объедините базовый URL https://www.paz.cl с относительным путем к изображению, полученному выше, выполните другой запрос к этому URL, чтобы загрузить изображение и обработать его, как вы хотите.

1
Arash Motamedi 2 Май 2019 в 17:24

Вы можете использовать пакет HTML Agility Pack

Например

var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);

var htmlNodes = htmlDoc.DocumentNode.SelectNodes("//a");

foreach (var node in htmlNodes)
{   
    Console.WriteLine(node.Attributes["href"].Value);
}
0
ahmeticat 2 Май 2019 в 16:54

Вы можете использовать AngleSharp для загрузки и анализа html-страницы. Затем вы можете извлечь всю необходимую информацию.

// TODO add a reference to NuGet package AngleSharp
private static async Task Main(string[] args)
{
    var config = Configuration.Default.WithDefaultLoader();
    var address = "https://www.paz.cl/imagenes_cotizador/BannerPrincipal";
    var context = BrowsingContext.New(config);
    var document = await context.OpenAsync(address);
    var images = document.Images.Select(img=>img.Source);

}

AngleSharp реализует стандарт w3c, поэтому он работает лучше, чем HTMLAgilityPack на реальной веб-странице.

0
meziantou 2 Май 2019 в 17:06