2013-06-20 105 views
-2

我一直在使用preg_match從HTML文件中抓取URL,但我只想提取以.mp3作爲擴展名的網址。我被告知嘗試DOM,我一直在嘗試修復代碼,但它不起作用。無論我做什麼,我都會得到一個空白頁。颳去HTML中的鏈接

我在做什麼錯?

<?php 
    $url = 'http://www.mp3olimp.net/miley-cyrus-when-i-look-at-you/'; 
    $html = @file_get_html($url); 
    $dom = new DOMDocument(); 
    $doc->loadHTML($html); 
    $xpath = new DOMXPath($doc); 
    $links = $xpath->query('//a[ends-with(@href, ".mp3")]/@href'); 

    echo $links; 
?> 
+0

print_r($ links)會發生什麼,而不是echo? –

+0

@MalcolmDiggs結果是一樣的,空白頁 – andrew

+1

那麼我要做的第一件事就是從@file_get_html中刪除@符號。在添加@之前,您只需要抑制錯誤,但在這種情況下,您希望查看錯誤,因此您最好將其刪除,並讓腳本告訴您發生了什麼問題。 –

回答

4

有幾個問題!

  • 如上所述,請在file_get_html()之前刪除@以查看錯誤。
  • file_get_contents($url)將工作以獲取HTML內容。
  • Typo,$dom =應該是$doc =
  • 另一個惱人的問題是,HTML源代碼格式不正確,導致後來的錯誤。
  • ends-with()僅在XPath 2.0中受支持,PHP使用XPath 1.0。所以你必須找到另一種方法來檢查結尾。一些正則表達式應該能夠做到這一點。
+0

請務必使用正確的代碼格式使答案更易於閱讀。 – TimWolla

+1

感謝您的支持!進入這整個StackOverflow的事情。很長的時間讀者,第一次海報(老生常談,我知道)。 –

+0

不客氣。確保閱讀[help](http://stackoverflow.com/help)並查看編輯器爲您提供的選項。這樣,寫出一些很好的答案並獲得聲譽應該很容易。 – TimWolla

0
$input = file_get_contents($url);  
$regexp = "<a\s[^>]*href=(\"??)([^\" >]*?.mp3)\\1[^>]*>(.*)<\/a>"; 
if(preg_match_all("/$regexp/siU", $input, $matches, PREG_SET_ORDER)) { 
    foreach($matches as $match) { 
    // $match[2] = link address 
    // $match[3] = link text 
    } 
}