【问题标题】:Cant parse specific Links with php dom parser无法使用 php dom 解析器解析特定链接
【发布时间】:2014-09-15 04:27:09
【问题描述】:

我正在用 php 中的 dom 解析器解析一些 iTunes 链接。对于大多数链接,它可以完美运行。其他完全一样的类型它不?!我需要“img”标签和“src-swap-high-dpi”属性。它让我发疯。这是我的 php 代码的一部分

$url = "https://itunes.apple.com/us/podcast/id278981407";
$htmlContent = str_get_html(file_get_contents($url));

foreach ($htmlContent->find("img") as $element) {
$value  = $element->getAttribute("src-swap-high-dpi");
echo $value;
}

例如我可以解析以下链接: https://itunes.apple.com/us/podcast/id201671138

https://itunes.apple.com/us/podcast/id523121474

https://itunes.apple.com/us/podcast/id152249110

但是这个例如不是:

https://itunes.apple.com/us/podcast/id278981407

我没有得到任何输出。

编辑:

新代码也不起作用:

仍然不适合我。很奇怪。这就是我现在的新完整代码:

 <?php
 ini_set("display_errors",1); error_reporting(E_ALL);
 require_once ('simple_html_dom.php');

 $url = "https://itunes.apple.com/us/podcast/id278981407";

 $htmlContent = str_get_html(file_get_contents($url));


foreach($htmlContent->find("div.artwork") as $div) {
 $value = $div->find("img",0)->getAttribute("src-swap-high-dpi");
 echo $value."<br/>";
 }

?>

我得到了输出:

Fatal error: Call to a member function find() on a non-object in /home/www/whatever/delete.php on line 10

第 10 行是以“foreach”开头的行。您的代码可以与上面提供的链接正常工作,我声明它们可以正常工作。但是,一旦我选择了其中一个不起作用的指定的,我就会收到上面提供的错误消息。 ?!

【问题讨论】:

    标签: php dom itunes


    【解决方案1】:

    我认为这是其中一种情况简单的 DOM 有点混乱,你需要为它提供一个父对象:

    $url = "https://itunes.apple.com/us/podcast/id278981407";
    $htmlContent = str_get_html(file_get_contents($url));
    foreach($htmlContent->find("div.artwork") as $div) {
       $value = $div->find("img",0)->getAttribute("src-swap-high-dpi");
       echo $value."<br/>";
    }
    

    更新

    以下是使用上述片段的结果:

    http://a3.mzstatic.com/us/r30/Podcasts/v4/61/cc/7f/61cc7f25-131f-7616-6549-5553e6444b87/mza_7489225285918350214.150x150-75.jpg
    http://a2.mzstatic.com/us/r30/Podcasts6/v4/04/a9/64/04a964d7-7c10-72d6-871b-97619cf89066/mza_1416781107029663068.150x150-75.jpg
    http://a5.mzstatic.com/us/r30/Podcasts4/v4/bb/a6/f4/bba6f4b6-eeab-d7d9-8591-adb2bd277ccb/mza_5223368352447971673.150x150-75.jpg
    http://a1.mzstatic.com/us/r30/Podcasts5/v4/aa/54/16/aa541600-cc8b-772b-9c0a-824efe8fdc42/mza_6772270613386652594.150x150-75.jpg
    http://a2.mzstatic.com/us/r30/Podcasts3/v4/95/3d/2f/953d2f75-c2c2-4815-a752-f30fdcc0b9fb/mza_9037746738018570312.150x150-75.jpg
    http://a4.mzstatic.com/us/r30/Podcasts4/v4/a2/1c/f5/a21cf5a4-2d8d-1ed7-983f-1c90f2f4f948/mza_7120473049241631392.340x340-75.jpg
    http://a2.mzstatic.com/us/r30/Podcasts4/v4/5d/21/8d/5d218d2a-2980-0ac9-0bc7-9321ea6eb334/mza_6358466742996313573.150x150-75.jpg
    http://a1.mzstatic.com/us/r30/Podcasts/b2/bb/bf/ps.ykmejwzs.150x150-75.jpg
    http://a4.mzstatic.com/us/r30/Podcasts6/v4/17/ea/31/17ea3187-ef8c-4756-e488-0c65adced988/mza_7931750363714403933.150x150-75.jpg
    http://a1.mzstatic.com/us/r30/Podcasts2/v4/0b/3c/7d/0b3c7d2b-19bf-f7a2-7c50-ca15338b8316/mza_2792239161425784587.150x150-75.jpg
    

    你能确认你没有收到错误吗?说,只是在你的PHP文件中写一些奇怪的字符,PHP会显示错误吗?如果没有,请尝试将其添加到您的 .htaccess 文件中。

    <IfModule mod_php5.c>
       # do not display errors
       php_value display_errors 1
    </IfModule>
    

    更新 2

    $url = "https://itunes.apple.com/us/podcast/id278981407";
    
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
    $html = curl_exec($ch);
    curl_close($ch);
    
    //$htmlContent = str_get_html(file_get_contents($url));
    $htmlContent = str_get_html($html);
    foreach($htmlContent->find("div.artwork") as $div) {
       $value = $div->find("img",0)->getAttribute("src-swap-high-dpi");
       echo $value."<br/>";
    }
    

    我没有使用 Simple Dom 的file_get_html 的原因是因为它只是在内部使用了file_get_contents

    【讨论】:

    • 我没有得到任何输出。
    • 您的错误报告在吗?将ini_set("display_errors",1); error_reporting(E_ALL); 放在脚本顶部。
    • 我做到了。完全没有错误。您是否尝试过解析给定的 ID 号?它不起作用:(奇怪的是脚本不会继续。似乎它卡在了foreachloop中。
    • 事实上,我完全按原样测试了我的代码,我真的得到了结果。检查我的更新答案以检查我得到了什么。
    • 这真的很奇怪,因为我使用了您有问题的网址来产生上述结果。请问您有什么版本的 Simple DOM 解析器?我的是 1.11 (不是最新的)。打开 Simple DOM 文件并找到 * @version x.xx ($Rev: 184 $) 行,我想要 x.xx
    猜你喜欢
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 2013-07-18
    相关资源
    最近更新 更多