0

親のdivクラスとすべてのリストアイテムを選択できますが、UPC番号を使用して特定のアイテムをキャプチャし、コンテンツとともにタグを削除しようとしています。「.parent」クラスの下のすべての子にIDまたはクラスがないことに注意してください。これは画面のスクレイピングであるため、何も追加する方法はありません。また、liの順序は変更される可能性があるため、カウントダウンはありません。

キャプチャのみを探しています...

000022200000

これは文字列/ウェブページです...

<div class="parent">
   <ul>
       <li>...</li>
       <li><b>UPC:</b>000022200000</li>

(これらのupc#は明らかにすべて異なり、他のコンテンツは必要ありません)

SimpleHTMLDOMを使用してデータを解析しています...

foreach($shdom2->find('.parent ul li') as $e) {
            $shdom = $shdom.'<p>UPC: '.$e.'</p>';
    }

このループにより、すべてのリストアイテムが返されます。次に、UPC#のアイテムに絞り込む必要があります。

preg_match()を使用できると思いますが、preg_match()を機能させることができませんでした。

これは、プロジェクトのより単純なノードで機能したpreg_match()の使用です...

if (preg_match('/G00([^\/]*)/i', $e, $regs))
        {
            $r = $regs[0];
            $shdom = $shdom.$r.',';
        }
4

2 に答える 2

1

正規表現を使用できるはずです:

/UPC:\<\/b\>(\d+)/

<li>DOM をトラバースしている場合はそれぞれpreg_match_all()に対して、または生のドキュメントに対しては

于 2013-03-11T20:42:52.113 に答える
1

次のように、<b>タグを見つけてその親を取得し、その子で UPC を見つけることができます。

foreach( $shdom2->find('.parent ul li b') as $b) {
    $li = $b->parent();
    foreach( $li->children() as $child) { 
        echo $child; // This should print your UPC eventually
    }
}

形成されている DOM を見て、UPC が子のどこにあるかを確認する必要があります (テキスト ノードになります)。このように、インデックスを使用して直接アクセスできるはずです。正しいインデックス値がわかりません。

foreach( $shdom2->find('.parent ul li b') as $b) {
    if( $b->plaintext === 'UPC:') {
        $li = $b->parent();
        $upc = $li->children( 1); // Change 1 to correct value if wrong
        echo $upc;
    }
}

編集: PHPへのアルゴリズムのポートを作成しましたDOMDocument:

$doc = new DOMDocument;
$doc->loadHTML( $html);

$xpath = new DOMXPath( $doc);

foreach( $xpath->query( '//div[@class="parent"]/ul/li/b') as $b) {
    $li = $b->parentNode;
    $upc = $li->childNodes->item(1);
    echo $upc->wholeText;
}

これが出力することがわかります:

000022200000
于 2013-03-11T20:44:22.600 に答える