HTML Agility包,无法选择节点

时间:2012-11-04 15:15:55

标签: html vb.net html-agility-pack nodes

我有以下HTML代码

<a href="http://www.google.de/products/catalog?hl=de&amp;newwindow=1&amp;q=6411920054105&amp;um=1&amp;ie=UTF-8&amp;cid=12216375657503902223&amp;sa=X&amp;ei=8nWWUOvADonntQbP3IHgDw&amp;ved=0CEgQ8gIwAA" class="psliimg" target="_blank">
<img src="https://lh5.googleusercontent.com/public/OCXiCAAYqFb859nA0DsbPbBSBR2EYU8IFnl_xtJxG2t1_z_xlLiRjxt5HPa0XFZBT1nch4a1j8PAAr4SVs974R_KnJI83sDB303YlcZQD9L5kmKUdTKXfLfJM_lovWyQcf4UlZkXb8sMarIamxSytCjB-aM=s90-c" alt="iittala Aalto Vase apfelgrün 16cm">
</a>

基本上是

<a href="" class="" target=""><img src="" alt=""></a>

使用html敏捷包我无法获得具有以下xpath

的节点
//a[@class="psliimg]

但是我能够通过选择它的孩子<img>来获得它但是当我尝试访问除了href以外的任何其他属性时它永远不会起作用!如果我试图得到属性的数量,它给我一个,即使有3个!

这是原始的link所以你可以测试一下,这会导致什么?

1 个答案:

答案 0 :(得分:1)

你想从你发布的htlm代码中得到什么?

我跑过去试图测试自己并得到了同样的错误。所以我在下面运行了这个代码,并且写入控制台的文本甚至不包含属性class = psliimg所以我不确定从页面读取原始html代码和HAP如何处理之间发生了什么它

Sub Main()
    Dim web As HtmlWeb = New HtmlWeb
    Dim doc As HtmlDocument = web.Load("https://www.google.de/search?hl=de&tbm=shop&q=6411920054105&oq=6411920054105&gs_l=products-cc.12...3450.3450.0.4463.1.1.0.0.0.0.334.334.3-1.1.0...0.0...1ac.1.fBfILtFfII0")

    Dim str = doc.DocumentNode.SelectSingleNode("//a[contains(@href,'12216375657503902223')]").ParentNode.InnerHtml
    'The long munber is contained in the html line and is just used to identify the node I want to select.
    Console.WriteLine(Str)
    Console.ReadKey()
End Sub

这是输出:

<a href="http://www.google.de/products/catalog?hl=de&amp;q=6411920054105&amp;um=1&amp;ie=UTF-8&amp;cid=12216375657503902223">
<img src="https://lh5.googleusercontent.com/public/OCXiCAAYqFb859nA0DsbPbBSBR2EYU8IFnl_xtJxG2t1_z_xlLiRjxt5HPa0XFZBT1nch4a1j8PAAr4SVs974R_KnJI83sDB303YlcZQD9L5kmKUdTKXfLfJM_lovWyQcf4UlZkXb8sMarIamxSytCjB-aM=s90-c" alt="iittala Aalto Vase apfelgrün 16cm" height="90" width="90">
</a>

所以不幸的是,您可能需要使用xpath代码来处理上面的内容而不是网站的内容,如果我错了,请纠正我。

您也可以遍历每个节点并选择您喜欢的节目。

    For Each link As HtmlNode In doc.DocumentNode.SelectNodes("//a[@href]")
        'Console.WriteLine(link.ParentNode.InnerHtml)
    Next

对不起,不是一个真正的答案,但不知道发布代码片段的最佳方式。