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 つあるのに 1 つになります!

ここに元のリンクがあるので、テストできます。何が原因でしょうか?

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、Web サイトが言っていることではなく、上記の内容に合わせてコードを作成する必要がある場合があります。間違っている場合は修正してください。

各ノードをループして、好きなものを選択することもできます。

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

申し訳ありませんが、実際には答えではありませんが、コード スニペットを投稿する最善の方法がわかりませんでした。

于 2012-11-05T20:54:56.667 に答える