0

これは、私がスクレイプしようとしている HTML のスニペットです。

    <div class="dot"><hr/></div>





    <h2>Description</h2>












        <p>This is the information I am trying to scrape</p>


</div>

IDもクラスも持たないため、XPathを使用して内容を取得することはできないと思います<p>.firebugによって提供されるXPathの上の他の情報によっては、/html/body/div[3]/div/div[???]/p[2]-どこで??? 1 ~ 5 の数字です。

それが正しければ、古き良き正規表現(私は役に立たない)に戻ったと推測していますが、残念ながら、これは私が試してキャッチするために思いついた最高のものです:

preg_match('/<h2>Description<\/h2>\s*<p>(.+)<\/p>/',$html,$rawdesc);

もちろん、それはうまくいきません....または、私はあなたの慈悲に身を投じることはありません:)

4

4 に答える 4

0

$html最初に、次のような説明を保持するセクションに制限する必要があるようです

$start = strpos($html, '<h2>Description</h2>');
$end = strpos($html, '</div>', $start)
$html = substr($html, $start, $end-$start)

次に、PeeHaa が提案したことを実行し、<p>...</p>を使用してすべてを取得できますpreg_match_all。次にimplode、それらをマージするために使用します。しかし、多分私はあなたの問題を理解していませんでした。

于 2013-07-09T22:31:21.633 に答える
0

preg_match 自体に問題がある場合は、パターンに /s スイッチを追加してみてください。preg_match('/<h2>Description<\/h2>\s*<p>(.+?)<\/p>/s',$html,$rawdesc);

于 2013-07-09T23:38:07.603 に答える
0

このパターンは機能します:

preg_match('~<h2>Description</h2>\s*<p>\K(?>[^<]++|<++(?!/p>))+~', $html, $rawdesc);
print_r($rawdesc);

?の後にa を追加すると、あなたのものも機能します+

于 2013-07-09T22:23:45.587 に答える