0

我需要废弃<pre>标签内容中的网页。我正在使用preg_match_all功能,但它不起作用。

我的抓取网站<pre>标签内容如下。

<pre># Mon Jul 22 03:10:03 CDT 2013

99.46.177.18
99.27.119.169
99.254.168.132
99.245.96.210
99.245.29.38
99.240.245.97
99.239.100.211
<pre>

php文件

更新

$data = file_get_contents('http://www.infiltrated.net/blacklisted');
preg_match_all ("/<pre>([^`]*?)<\/pre>/", $data, $matches);
print_r($matches);
exit;

我的 php 文件返回空数组。我知道我的preg_match_all功能有问题。

我怎样才能得到前标签的内容。请指导我。

编辑问题

我可以运行@Pieter 脚本。但它的回报只是Array()

我的脚本如下。

    <?php
    $url = 'http://www.infiltrated.net/blacklisted';
    $data = new DOMDocument();
    $data->loadHTML(file_get_contents($url));
    $xpath = new DomXpath($data);

    $pre_tags = array();
    foreach($xpath->query('//pre') as $node){
    $pre_tags[] = $node->nodeValue; 
    }

print_r($pre_tags);
exit;
?>
4

2 回答 2

2

使用 PHP 函数循环遍历 DOM。强烈建议不要将正则表达式模式用于 HTML 标记。

试试这个代码:

$data = new DOMDocument();
$data->loadHTML(file_get_contents($url));
$xpath = new DomXpath($data);

$pre_tags = array();
foreach($xpath->query('//pre') as $node){
    $pre_tags[] = $node->nodeValue;
}

或者试试 PHP Simple HTML DOM Parser,参见:http ://simplehtmldom.sourceforge.net/

于 2013-07-22T08:35:33.527 回答
0

终于我明白了。这个http://www.infiltrated.net/blacklisted url 是从一个文本文件加载的。所以只有 pre 标记显示在页面源中。所以我正在使用这种方法。

$array = explode("\n", file_get_contents('http://www.infiltrated.net/blacklisted'));
print_r($array);

最后它的工作问候。

于 2013-07-22T11:00:33.237 回答