我正在制作网络爬虫,我需要提取包含描述的元数据,这就是我所做的:
$html = file_get_contents('http://www.google.com');
preg_match('/<meta name="description" content="(.*)"/>\i', $html, $description);
$description_out = $description;
var_dump($description_out);
我得到这个错误
警告:preg_match():未知修饰符“>”在 C:\ xampp \ htdocs \ webcrawler \ php-web-crawler \ index.php在第21行
正确的正则表达式是什么?
答案 0 :(得分:0)
您的模式不正确。您从/
分隔符开始,然后在模式中有一个未转义的/
,这结束了模式以及将其读取为修饰符后的所有内容。
然后,您的结束定界符使用了错误的方式,\
应该为/
。
'/<meta name="description" content="(.*)"\/>/i',
答案 1 :(得分:0)
作为替代方案,可以使用带有/html/head/meta[@name="description"]/@content
和xpath表达式的DOMDocument和DOMXPath来获取内容属性,而不使用正则表达式。
$document = new DOMDocument();
$document->loadHTML($html);
$xpath = new DOMXPath($document);
$items = $xpath->query('/html/head/meta[@name="description"]/@content');
foreach ($items as $item) {
echo $item->value . "<br>";
}
$items
的类型为DOMNodeList,您可以使用foreach
进行循环。 $item
的类型为DOMAttr,您可以从中获得value。