2

我正在尝试使用特定单词监视网站的新产品页面。我已经有一个基本脚本,可以使用搜索单个单词,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));

只需为红色类编写 css,就像您想显示红色color:red;一样,然后为休息做同样的事情

但更好的方法是 DOM 和 Xpath

于 2012-12-31T17:49:58.630 回答
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 回答
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 回答