2012-09-06 179 views
-2

可能重复:
Grabbing the href attribute of an A element从HTML中提取文本

我试图从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 

原因以后,我会通过文件夹循环,并复制文件。

+0

[simplehtmldom.sourceforge.net](http://simplehtmldom.sourceforge.net/) – Vinay

+0

'的print_r(爆炸(””,用strip_tags ($ string)))''会给你标签之间所有数据的数组......'$ string'等于输入html。 – Vishal

回答

5

使用DOMDocumentDOMXPathHTML

$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

+0

或者你可以使用'$ html-> getElementsByTagName('a');',对吧? – Ties

+1

也许他只想要页面的一部分,而不是全部,他可以使用'DOMXPath'搜索更容易.. –

+0

这是真的,没想到的!好答案! – Ties