我开始在项目中使用Anglesharp,我不仅要获取和下载HTML,还需要下载文档的图像。
我知道在Document对象中有一个名为Images的属性,但显然它并没有得到所有这些属性,我在YouTube页面上进行了测试,只得到一个(重复几次)。
例如,我想获得当前视频的thumbinail,这似乎在<meta>
标签内。
更准确地说,图像存储在这种标签中:
<meta content="https://i.ytimg.com/vi/hW-kDv1WcQM/hqdefault.jpg" property="og:image">
所以我想知道是否有办法选择页面内任何图像的所有节点/网址,无论使用哪个标记。 我认为QuerySelectorAll在这种情况下不起作用,因为它只选择一种类型的节点。 您可以尝试在github上找到的示例代码来验证(我刚刚更改了YouTube的URL和选择器: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属性是否没有获得视频缩略图:
var Images = document.Images.Select(sl=> sl.Source).Distinct().ToList();
根据网址内容选择节点的其他任何方法? (像所有以“.jpg”或“.png”等结尾的网址。)
答案 0 :(得分:3)
您可以使用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);
}