htmllagilitypack选择节点来选择所有的<元素

本文关键字:选择 元素 节点 htmllagilitypack | 更新日期: 2023-09-27 18:12:30

我正在制作一个c#项目,这基本上是一个图像搜索相关游戏的图像屏幕刮板。我试图使用htmllagilitypack来选择所有的图像元素,并把它们放在一个HTMLNodeCollection,像这样:

//set up for checking autos
HtmlNodeCollection imgs = new HtmlNodeCollection(doc.DocumentNode.ParentNode);
imgs = doc.DocumentNode.SelectNodes("//img");
foreach (HtmlNode img in imgs)
{
    HtmlAttribute src = img.Attributes["@src"];
    urls.Add(src.Value);
}

注意urls是一个公共List集合:

public List<string> urls = new List<string>();

我的foreach循环抛出了一个异常:

对象引用未设置为对象的实例。

检查汽车,果然,imgs为空。有没有更好的办法让我找到问题的根源?我不知道这是我的Xpath还是什么。

最令人沮丧的是,我已经让它工作,但搞砸了我的文件版本,失去了我的工作。Derp .

htmllagilitypack选择节点来选择所有的<元素

下面一行可能有打字错误:

HtmlAttribute src = img.Attributes["@src"];

我让这个为我工作(注意@位置):

HtmlAttribute src = img.Attributes[@"src"];

这对我有用。我认为您的文档没有正确加载,因此xpath返回不匹配。

HtmlDocument htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml("<html><head></head><body><div><img /><div><img /><img/></div></div><img/></body></html>");
var nodes = htmlDocument.DocumentNode.SelectNodes("//img");
// 4 nodes found
foreach (var node in nodes)
{
    // do stuff
}