Php 从HTML中删除链接

Php 从HTML中删除链接,php,dom,html-parsing,scrape,Php,Dom,Html Parsing,Scrape,我一直使用preg\u 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();

我一直使用
preg\u 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;
?>

有几个问题

  • 如前所述,在
    文件\u get\u html()
    之前删除
    @
    以查看错误
  • file\u get\u contents($url)
    将用于获取HTML内容
  • 打字错误,
    $dom=
    应该是
    $doc=
  • 另一个恼人的地方是,HTML源代码的格式相当不正确,导致了以后的错误
  • ends-with()
    仅在XPath 2.0中受支持,PHP使用XPath 1.0。所以你必须找到另一种方法来检查结尾。一点正则表达式就可以了
$input=file\u get\u contents($url);
$regexp=“]*href=(\”?)([^\“>]*?.mp3)\\1[^>]*>(.*);
if(预匹配全部(“/$regexp/siU”、$input、$matches、预设置顺序)){
foreach($matches作为$match进行匹配){
//$match[2]=链接地址
//$match[3]=链接文本
}
}

print\r($links)而不是echo会发生什么?@MalcolmDiggs结果是一样的,一个空白页面。我要做的第一件事是从@file\u get\u html中删除@符号。在@前面加上前缀只会抑制错误,但在这种情况下,您希望看到错误,因此您最好删除它,让脚本告诉您发生了什么错误。您需要进行基本的故障排除,这意味着了解PHP错误的方式以及从何处可以获得有关错误的更多信息。另请参阅:请确保使用正确的代码格式,以使您的答案更易于阅读。谢谢!只是卷入了这整件事。长期读者,第一次海报(陈词滥调,我知道)。不客气。确保阅读并查看编辑器提供的选项。这样,写一些好的答案和赢得声誉应该很容易。
$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
  }
}