2016-03-15 8 views
1

Я начал использовать Anglesharp для проекта, мне нужно загрузить и загрузить не только HTML, но и изображения документа. Я знаю, что в объекте «Документ» есть свойство «Изображения», но, видимо, оно не получает их всех, я сделал тест на странице YouTube и получил только один (повторяется несколько раз). Например, я хотел бы получить миниатюру текущего видео, и это похоже на тег <meta>. Чтобы быть более точным, изображения, которые хранятся в этом виде тегов:Получить и загрузить фотографии с помощью AngleSharp

<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); 

О, Shure, вы также можете добавить это проверить, что свойство Image не получает видео thumbinails:

var Images = document.Images.Select(sl=> sl.Source).Distinct().ToList(); 

Любой другой метод для выбора узлов на основе содержимого URL? (Как и все URLs заканчивающихся на «.jpg» или «.png», и т.д.)

+0

Просьба представить доказательства того, что вы провели некоторое исследование (например, ссылки того, что, по вашему мнению, может вам помочь, но не уверены) – MikeDub

+0

Я сделал, но Anglesharp не имеет большого количества документации (если вы ищете тег Anglesharp здесь stackexchage вы получаете как 17 (включенные мои) результаты: http://stackoverflow.com/questions/tagged/anglesharp). Googling тоже не помогает, вы можете попробовать несколько поисковых запросов, но для AngleShapr их немного. – Toshiwo

ответ

3

Вы можете использовать API LINQ, чтобы получить все атрибуты, которые содержат 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); 
} 
Смежные вопросы