无法使用php dom解析器解析特定的链接

时间:2014-09-15 04:27:10

标签: php dom itunes

我在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”开头的行。您的代码可以正常使用上面提供的链接,我声明它正在工作。但是,只要我选择了一个无效的指定的,我就会收到上面提供的错误消息。 ?!

1 个答案:

答案 0 :(得分:1)

我认为这是其中一个案例 Simple 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