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()
以查看错误@
将用于获取HTML内容file\u get\u contents($url)
- 打字错误,
应该是$dom=
$doc=
- 另一个恼人的地方是,HTML源代码的格式相当不正确,导致了以后的错误
仅在XPath 2.0中受支持,PHP使用XPath 1.0。所以你必须找到另一种方法来检查结尾。一点正则表达式就可以了ends-with()
$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
}
}