HTML 敏捷包,无法选择节点
Posted
技术标签:
【中文标题】HTML 敏捷包,无法选择节点【英文标题】:HTML Agility pack, can't select a node 【发布时间】:2012-11-04 15:15:54 【问题描述】:我有以下 html 代码
<a href="http://www.google.de/products/catalog?hl=de&newwindow=1&q=6411920054105&um=1&ie=UTF-8&cid=12216375657503902223&sa=X&ei=8nWWUOvADonntQbP3IHgDw&ved=0CEgQ8gIwAA" class="psliimg" target="_blank">
<img src="https://lh5.googleusercontent.com/public/OCXiCAAYqFb859nA0DsbPbBSBR2EYU8IFnl_xtJxG2t1_z_xlLiRjxt5HPa0XFZBT1nch4a1j8PAAr4SVs974R_KnJI83sDB303YlcZQD9L5kmKUdTKXfLfJM_lovWyQcf4UlZkXb8sMarIamxSytCjB-aM=s90-c" >
</a>
基本上是它
<a href="" class="" target=""><img src="" ></a>
使用 html 敏捷包我无法获得带有以下 xpath
的节点
//a[@class="psliimg]
但是我可以通过选择它的子<img>
来获得它,但是当我尝试访问除 href 之外的任何其他属性时,它永远不会起作用!如果我尝试获取属性的计数,即使有 3 个,它也会给我一个!
这是原来的link,所以你可以测试一下,可能是什么原因造成的?
【问题讨论】:
【参考方案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&q=6411920054105&um=1&ie=UTF-8&cid=12216375657503902223">
<img src="https://lh5.googleusercontent.com/public/OCXiCAAYqFb859nA0DsbPbBSBR2EYU8IFnl_xtJxG2t1_z_xlLiRjxt5HPa0XFZBT1nch4a1j8PAAr4SVs974R_KnJI83sDB303YlcZQD9L5kmKUdTKXfLfJM_lovWyQcf4UlZkXb8sMarIamxSytCjB-aM=s90-c" >
</a>
所以很遗憾,您可能不得不将xpath
代码用于上面的内容,而不是网站所说的内容,如果我错了,请纠正我。
您还可以遍历每个节点并选择您喜欢的。
For Each link As HtmlNode In doc.DocumentNode.SelectNodes("//a[@href]")
'Console.WriteLine(link.ParentNode.InnerHtml)
Next
对不起,不是真正的答案,但不知道发布代码 sn-ps 的最佳方式。
【讨论】:
以上是关于HTML 敏捷包,无法选择节点的主要内容,如果未能解决你的问题,请参考以下文章