0

我正在使用正则表达式来获取 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.>

$url = 'http://www.bestylish.com/' ;

它返回我所有的脚本标签。但是当我拿 2.>

$url = 'http://www.bestylish.com/sale' ;

它没有回复我很多相同的标签,并且出现在上面的 url 1 中。应该是什么原因?

4

1 回答 1

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);
于 2012-06-25T10:01:11.713 回答