2016-10-06 1 views
1

Webページのスクレイピングを行っているPHPコードを維持しようとしています。 Webページが変更されているので、アップデートが必要ですが、Xpathでそれほど経験していないので、苦労しています。XpathクエリでNULLが返されています

基本的にこれは私が「/medias/myimage.jpg」の値であるIMGタグからsrcset属性を抽出しようとしています

関連
<div class="carousel-item-wrapper"> 
    <picture class=""> 
     <source srcset="/medias/tea-tree-skin-clearing-foaming-cleanser-1-640x640.jpg?context=product-images/h3b/hd3/8796813918238/tea-tree-skin-clearing-foaming-cleanser_1-640x640.jpg" media="(min-width: 641px) and (max-width: 1024)"> 
     <source srcset="/medias/tea-tree-skin-clearing-foaming-cleanser-1-320x320.jpg?context=product-images/h09/h9a/8796814049310/tea-tree-skin-clearing-foaming-cleanser_1-320x320.jpg" media="(max-width: 640px)"> 
     <img srcset="/medias/myimage.jpg" alt="150 ML" class=""> 
    </picture> 
</div> 

されるHTMLの部分です。私はXPATHヘルパークロムプラグインを使って私を助けています。私は以下のxpathを持っています。

//div[@class="carousel-item-wrapper"]/picture/img/@srcset 

プラグインでは、期待通りの結果を返しますので、正常に動作しているようです。

また、私はオンラインのxpathテスターhttp://www.online-toolz.com/tools/xpath-editor.phpを使用してもOKです。

しかし、私のPHPコードでは、null値を取得します。私はもちろん持って

$dom = new DOMDocument(); 
    $dom->preserveWhiteSpace = false; 
    $dom->strictErrorChecking = false; 
    $dom->recover = true; 

    @$dom->loadHtml($html); 
    $xPath = new DOMXPath($dom);   

    //Other xPath queries executed OK. 

    $node = $xPath->query('//div[@class="carousel-item-wrapper"]/picture/img/@srcset')->item(0); 

    if ($node === NULL) 
     writelog("Node is NULL"); // <-- Writes NULL to the log file! 

は、属性名などを指定しないようにしよう、この上のさまざまなバリエーションの多くを試みたがない運を持つすべての。

私は間違っていますか?私はそれが何か単純でなければならないと確信していますが、私はそれを見つけられません。

同じHTMLドキュメントでPHPコードを使用している他の抽出は正常です。だから私はこの要素だけで問題を引き起こします。

+0

が読み/編集/クエリあなたのHTMLデータ? – jhmckimm

+0

いくつかの詳細を追加できますか?$ xPathなどをどのようにインスタンス化していますか? –

+1

あなたのHTMLが無効で、 "loadHtml"の前に "@"を削除すると、 "タグソースがエンティティで無効です"というエラーが表示されます。 htmlを編集できる場合は、ソースタグ – christophe

答えて

1

PHPのDOMXPathクラスは、自己終了タグに問題があるようです。あなたは自己終了タグを見つけるために探している場合は、二重スラッシュを追加する必要があるので、あなたの新しいXPathクエリは次のようになります。PHPクラスは、使用している

//div[@class="carousel-item-wrapper"]/picture//img/@srcset

+0

それはうまくいった。ありがとう、私はそれを発見したことはありません! –

+0

ここに来る他の誰かの利益のために、XPathは自己終了タグをうまく処理します。ここで説明しているのは、使用されている特定のXPathプロセッサのバグを回避する方法です。 –

+0

@MichaelKay私はこれを反映するために私の答えを編集しました。 – jhmckimm

関連する問題