来自纽约时报的缩略图

时间:2014-02-07 05:50:54

标签: php web-scraping pinterest

我的抓取代码适用于我测试时遇到的每个网站...除了nytimes.com文章。我使用带有以下PHP代码的ajax(我遗漏了一些细节以专注于我的具体问题):

$link = "http://www.nytimes.com/2014/02/07/us/huge-leak-of-coal-ash-slows-at-north-carolina-power-plant.html?hp";
$article = new DOMDocument;
$article->loadHTMLFile($link);
//generate image array
$images = $article->getElementsByTagName("img");
foreach ($images as $image) {
     $source = $image->getAttribute("src");
     echo '<img src="' . $source . '" alt="alt"><br><br>'; 
}

我的问题是,nytimes页面上的主要图像似乎甚至没有被getElementsByTagName拾取。 Pinterest发现了一种从这个站点刮掉主要图像的方法,例如:http://www.nytimes.com/2014/02/07/us/huge-leak-of-coal-ash-slows-at-north-carolina-power-plant.html?hp而我不能。有什么建议?

1 个答案:

答案 0 :(得分:0)

行。所以这就是我尝试的,因为我发现你的问题很有趣。

当我使用jQuery在浏览器控制台上执行此操作时,我会在图像上获得结果。我的疑问是

var a= new Array(); 
$('img[src]').each(function(){ a.push($(this).attr('src'));});
console.log(a);

另请参阅结果here

的屏幕截图

请注意,console.log(arrayname)可在Chrome浏览器中使用。

理想情况下,您的代码必须正常工作。请考虑像我一样添加is_null支票。

下面是我尝试使用不同方法加载URL的代码(也许更好),并找出为什么只获得NYT徽标的单个图像的根本原因。

生成的HTML屏幕截图附有here

<?php

    $html = file_get_contents("http://www.nytimes.com/2014/02/07/us/huge-leak-of-coal-ash-slows-at-north-carolina-power-plant.html?hp");
    echo $html;
    $doc = new DOMDocument();
    $doc->strictErrorChecking = false;
    $doc->recover=true;
    @$doc->loadHTML("<html><body>".$html."</body></html>");
    $xpath = new DOMXpath($doc);
    $images = $xpath->query("//*/img");
    if (!is_null($images)) {
    echo sizeof($images);
    foreach ($images as $image) {
         $source = $image->getAttribute('src');
         echo '<img src="' . $source . '" alt="alt"><br><br>'; 
        }
    }
?>

除非经过身份验证,否则无法通过Feed获取内容。 你可以尝试 -

  1. file_get_contents方法
  2. 中使用上下文参数
  3. 您可以尝试使用文章的RSS / ATOM Feed。
  4. 您将该页面下载为HTML,然后将其加载到file_get_contents方法中。 PS:这很有效。