-3

我一直在使用preg_match从 HTML 文件中抓取 URL,但我只想提取具有.mp3扩展名的 URL。有人告诉我尝试 DOM,我一直在尝试修复代码,但它不起作用。无论我做什么,我都会得到一个空白页。

我究竟做错了什么?

<?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;
?>
4

2 回答 2

4

有几个问题!

  • 如前所述,删除@之前file_get_html()查看错误。
  • file_get_contents($url)将用于获取 HTML 内容。
  • 错字,$dom =应该是$doc =
  • 另一个恼人的点是,HTML 源代码格式不正确,导致后来的错误。
  • ends-with()仅在 XPath 2.0 中受支持,PHP 使用 XPath 1.0。所以你必须找到另一种方法来检查结局。一点正则表达式应该可以解决问题。
于 2013-06-21T00:11:42.397 回答
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
  }
}
于 2013-06-22T00:35:13.600 回答