2

特定の単語を含む Web サイトの新製品ページを監視しようとしています。を使用して単一の単語を検索する基本的なスクリプトが既にありますが、file_get_contents();これは効果的ではありません。

<td>内のタグにあるコードを見ると、<table>

どのような順序で単語を検索し、宣言を取得するようにPHPを取得するにはどうすればよいですか? 例えば

$searchTerm = "Orange Boots";

から:

<table>
   <td>Boots (RED)</td>
</table>
<table>
   <td>boots (ORANGE)</td>
</table>
<table>
   <td>Shirt (GREEN)</td>
</table>

一致を返します。

わかりにくかったら申し訳ありませんが、ご理解いただければ幸いです

4

3 に答える 3

2

あなたはこれを次のようにすることができます

$newcontent= (str_replace( 'Boots', '<span class="Red">Boots</span>',$cont));

赤い色を表示したいように、クラス red の css を記述しcolor:red;、残りの部分でも同じことを行います

しかし、より良いアプローチはDOMとXpathになります

于 2012-12-31T17:49:58.630 に答える
1

カールを使用します。filegetcontents()よりもはるかに高速です。出発点は次のとおりです。

$target_url="http://www.w3schools.com/htmldom/dom_nodes.asp";
 // make the cURL request to $target_url
$ch = curl_init();
 curl_setopt($ch, CURLOPT_URL,$target_url);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
 curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$html= curl_exec($ch);
if (!$html) {exit;}
$dom = new DOMDocument();
@$dom->loadHTML($html);

  $query = "(/html/body//tr)"; //this is where the search takes place

 $xpath = new DOMXPath($dom);
 $result = $xpath->query($query);

for ($i = 0; $i <$result->length; $i++) {
  $node = $result->item(0);
  echo "{$node->nodeName} - {$node->nodeValue}<br />";
} 
于 2012-12-31T18:41:31.477 に答える
1

その HTML ブロックに対して手早く汚い検索を行いたい場合は、preg_match_all()関数を使用して単純な正規表現を試すことができます。たとえば、次のことを試すことができます。

$html_block    = get_file_contents(...);
$matches_found = preg_match_all('/(orange|boots|shirt)/i', $html_block, $matches);

$matches_found一致が見つかったかどうかを示すものとして、1 または 0 になります。$matchesに応じて任意の一致が取り込まれます。

于 2012-12-31T18:00:29.987 に答える