Получайте и скачивайте картинки с AngleSharp
Я начал использовать Anglesharp для проекта, мне нужно получить и скачать не только HTML, но и изображения документа. Я знаю, что в объекте Document есть свойство с именем Images, но, по-видимому, оно не получает их всех, я провел тест на странице YouTube и получил только один (повторяется несколько раз). Например, я хотел бы получить thumbinail текущего видео, и это, кажется, внутри <meta>
тег. Чтобы быть более точным, изображения хранятся внутри тегов такого типа:
<meta content="https://i.ytimg.com/vi/hW-kDv1WcQM/hqdefault.jpg" property="og:image">
Поэтому мне интересно, есть ли способ выбрать все узлы / URL любого изображения на странице, независимо от используемого тега. Я не думаю, что QuerySelectorAll работает в этом случае, так как это выбирает только один тип узла. Вы можете попробовать пример кода, который вы найдете на github, чтобы убедиться в этом (я только что изменил URL с помощью YouTube, и селектор тоже:D):
// Setup the configuration to support document loading
var config = Configuration.Default.WithDefaultLoader();
// Load the names of all The Big Bang Theory episodes from Wikipedia
var address = "https://www.youtube.com/watch?v=hW-kDv1WcQM&feature=youtu.be";
// Asynchronously get the document in a new context using the configuration
var document = await BrowsingContext.New(config).OpenAsync(address);
// This CSS selector gets the desired content
var cellSelector = "img";
// Perform the query to get all cells with the content
var cells = document.QuerySelectorAll(cellSelector);
// We are only interested in the text - select it with LINQ
var titles = cells.Select(m => m.TextContent);
О, конечно, вы также можете добавить это, чтобы проверить, что свойство Image не получает видео thumbinails:
var Images = document.Images.Select(sl=> sl.Source).Distinct().ToList();
Любой другой метод для выбора узлов на основе содержимого URL? (как и все URL-адреса, заканчивающиеся на ".jpg" или ".png" и т. д.)
1 ответ
Вы можете использовать LINQ API, чтобы получить все атрибуты, которые содержат URL изображения на странице, например:
.....
var document = await BrowsingContext.New(config).OpenAsync(address);
//list all image file extension here :
var fileExtensions = new string[] { ".jpg", ".png" };
//find all attribute in any element...
//where the value ends with one of the listed file extension
var result = from element in document.All
from attribute in element.Attributes
where fileExtensions.Any(e => attribute.Value.EndsWith(e))
select attribute;
foreach (var item in result)
{
Console.WriteLine(item.Value);
}