我正在使用curl抓取网页,并且可以显示感兴趣的结果。
通常,下面的脚本会向我输出“网页抓取工具测试文本”文本,该文本由页面中的“标题” ID刮取并进行正则表达式处理。
现在,我想检查$ list数组中是否存在单词“ TESTING”。如果是,则仅回显“存在”,否则,则回显“不存在”。最好的方法是什么?
我知道如何搜索网页并从中提取文本部分。
$curl = curl_init('http://testing-ground.scraping.pro/textlist'); // cURL
setup
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); // return the transfer
page as a string
curl_setopt($curl, CURLOPT_HEADER, TRUE);
$page = curl_exec($curl); // executing the request
if(curl_errno($curl)) // check for execution errors
{
echo 'Scraper error: ' . curl_error($curl);
exit;
}
curl_close($curl); // closing the connection
$regex = '/<div id="title">(.*?)<\/div>/s'; // extracting the needed part
if ( preg_match($regex, $page, $list) ) // search matches of $page with
$regex
echo $list[0];
else
print "Not found";
答案 0 :(得分:0)
我知道如何搜索网页并从中提取文本部分。
实际上,您正在做very wrong。 该代码实际上应该类似于
$list[]=(@DOMDocument::loadHTML($page))->getElementById("title")->textContent;
如果您想学习如何在PHP中正确解析HTML,请阅读线程> How do you parse and process HTML/XML in PHP?
现在,我想检查$ list数组中是否存在单词“ TESTING”。如果是,则仅回显“存在”,否则,则回显“不存在”。最好的方法是什么?
找到一个布尔,用foreach对其进行迭代,使用strpos()检查列表中的每个条目,如果发现它,请确保尽早退出循环(因为继续循环将浪费CPU和时间找到匹配项后),最后打印结果,例如
$found=false;
foreach($list as $foo){
if(false!==strpos("TESTING",$foo)){
$found=true;
break;
}
}
if($found){
echo "present";
}else{
echo "not present";
}