2012-09-06 177 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