Как получить только файлы из всего HTML, прочитанного в консольном приложении c #? - PullRequest
0 голосов
/ 02 мая 2019

Мне нужно получить каждый файл из 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. Однако мне просто нужны файлы (все изображения), чтобы я мог работать с ними, как я и ожидал.

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

Ответы [ 3 ]

1 голос
/ 02 мая 2019

Я посмотрел на эту страницу, и это список каталогов / файлов.Вы можете использовать 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, чтобы загрузить изображение и обработать его, как вы хотите.

0 голосов
/ 02 мая 2019

Вы можете использовать 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 голосов
/ 02 мая 2019

Вы можете использовать Пакет 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);
}
...