从HTML中提取文本

时间:2012-09-06 08:53:51

标签: php parsing

  

可能重复:
  Grabbing the href attribute of an A element

我正在尝试从HTML页面中提取一些文件夹名称,HTML的源代码看起来像这样..

<li><a href="/"> Parent Directory</a></li>
<li><a href=".ftpquota"> .ftpquota</a></li>
<li><a href="Folder%201/"> Folder 1/</a></li>
<li><a href="Floder%202/"> Folder 2/</a></li>
<li><a href="Folder%20N/"> Folder N/</a></li>

到目前为止,我创建了一些文件夹,但未正确提取。

这就是我所做的......

<?php

    $url = "URL";
    $page_data = file_get_contents($url);
    $search_pattern = "<li><a href=";
    $position = 0;

    while($position = strpos($page_data,$search_pattern, $position+strlen($search_pattern)))
    {
        //$pos2 = strpos($page_data, "\"> ", $position);
        //echo $position . " - " . $pos2 . " = " . ($pos2-$position) . "<br />";
        $str = substr($page_data,$position+strlen($search_pattern)+1, $pos2-$position);
        echo "<pre>" . $position . " || " . $str . "\n</pre>";
    }

?>

每个文件夹都包含一些我将使用copy()复制的文件,因为我使用的是Windows,因此我没有wget

我在这里做错了什么?

这是我的输出:

156 || /"> Parent Directory
.ftpquota

Folder 1/

Folder 2/

Folder N/

但我真正需要的是:

Folder 1
Folder 2
Folder N

原因稍后,我将遍历文件夹并复制文件。

1 个答案:

答案 0 :(得分:5)

HTML

使用DOMDocumentDOMXPath
$string = '<li><a href="/"> Parent Directory</a></li>
<li><a href=".ftpquota"> .ftpquota</a></li>
<li><a href="Folder%201/"> Folder 1/</a></li>
<li><a href="Floder%202/"> Folder 2/</a></li>
<li><a href="Folder%20N/"> Folder N/</a></li>
<li><a href="file.bin"> file.bin</a></li>';

$html = new DOMDocument(); 
$html->loadHTML($string);
$xpath = new DOMXPath($html);
$filtered = $xpath->query("//a/@href");

foreach($filtered as $one){
    if(strlen($one->nodeValue) > 1) {
        echo urldecode($one->nodeValue)."\n";
    }
}

Codepad Example