我正在使用正则表达式来获取html页面的所有脚本标记的内容。 我使用的正则表达式和代码就像:
$content = file_get_contents($url, false, stream_context_create(
array("http" => array("user_agent" => "any"))
));
$pattern = "/<script[^>]*?>([\s\S]*?)<\/script>/";
preg_match_all($pattern, $content, $inside_script_array);
echo "<pre>";
print_r($inside_script_array);
echo "</pre>";
当我选择1.&gt;
$url = 'http://www.bestylish.com/' ;
它返回所有脚本标记。但是当我选择2.&gt;
$url = 'http://www.bestylish.com/sale' ;
它没有回复我很多标签,它们是相同的,并且存在于上面的网址1中。应该是什么原因?
答案 0 :(得分:4)
原因是正则表达式不是操纵HTML的好工具。如果您仍然可以选择切换到DOM解析器,则提取<script>
标记可以简单如下:
$domd = new DOMDocument();
libxml_use_internal_errors(true);
$domd->loadHTML(file_get_contents('http://www.google.com'));
libxml_use_internal_errors(false);
$items = $domd->getElementsByTagName('script');
$data = array();
foreach($items as $item) {
$data[] = array(
'src' => $item->getAttribute('src'),
'outerHTML' => $domd->saveHTML($item),
'innerHTML' => $domd->saveHTML($item->firstChild),
);
}
print_r($data);