0

我有以下 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 个,它也会给我一个!

这是原始链接,因此您可以进行测试,这可能是什么原因?

4

1 回答 1

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

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

于 2012-11-05T20:54:56.667 回答