1

私はPHPを初めて使用し、別のサイトから情報を取得するためのコードを学びたいと思っていました。preg_matchを見て、爆発しました。

私の質問は、いくつかの情報を取得したかったのですが、タグがありません。

このタグにこのコードを使用しました

$site=file_get_contents("$link");
$price='#<div class="price">(.*?)<\/div>#si';
preg_match_all($price,$site,$pricelist);
for ($a=0; $a<5; $a++){
echo $pricelist[1][$a];
}

しかし、ソースコードでは次のようになります。

<b>500€&lt;/b></a><div class=gh_hl1>
<b>510€&lt;/b></small></a><br clear=all><div class=gh_hl1>
<b>520€&lt;/b></a><div class=gh_hl1>
<b>530€&lt;/b></a><div class=gh_hl1>
<b>540€&lt;/b></a><div class=gh_hl1>
<b>550€&lt;/b></a><div class=gh_hl1>

<b>このタグで始まり、で終わり、<div class=gh_hl1>また</small></a><br clear=all><div class=gh_hl1>、で始まる別のタグがあります<b>

この値段を取る可能性はあるのでしょうか?

また、Simple HTMLDomParserも調べました。しかし、何も見つかりませんでした。あなたの答えをありがとう...

4

1 に答える 1

0

HTML ファイルでパターンを探すことができます。注目すべき点の 1 つは、€ 記号です。あなたはそれを検索することができます。この正規表現はそれを行う必要があります:

$price='/(\d*)€(\d*)/';

そして、€記号が金額の前後にある場合は価格を取得する必要があります(後でのみ行う場合は、最後をカットします(\ d *))。

太字のタグなど、他にも類似点があるため、これを追加してより具体的にすることができます。

$price='/<b>(\d*)€(\d*)</b>/';

それはまだまともな一般的な文字列ですが、それらをすべて結び付けるdivのは最後の<div class=gh_hl1>. したがって、この正規表現を使用して、プロセス内のタグを処理して、それを検索できます。

$price='/<b>(\d*)€(\d*)<\/b>(<\/small>)?<\/a>(<br clear=all>)?<div class=gh_hl1>/';

それが私のショットです。しかし、それでも本当にばかげています (そして、PHP で動作するかどうかは確信が持てません。最近は主に Ruby を使用しています)。

$price='/<b>(\d*)€(\d*)<\/b>.*<\/a>.*<div class=gh_hl1>/';

これで、間にあるすべてのタグを取得します。コメントで述べたように、これを行うためのより良い方法は無数にあり、おそらく<b>タグの上の親アイテムはこれが価格であることを示します. それらを探してください。

必要な主なものは b タグ間の価格であり、そのクラスの div で終わるようにするため、正規表現を次のように作成できます。

$price='/<b>(\d*)€(\d*)<\/b>.*<div class=gh_hl1>/';
于 2013-01-09T23:12:35.903 に答える