Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从NYtimes中删除缩略图_Php_Web Scraping_Pinterest - Fatal编程技术网

Php 从NYtimes中删除缩略图

Php 从NYtimes中删除缩略图,php,web-scraping,pinterest,Php,Web Scraping,Pinterest,我的抓取代码适用于我在测试时访问的几乎每个站点。。。除了纽约时报网站的文章。我将ajax与以下PHP代码一起使用(我省略了一些细节来关注我的具体问题): $link=”http://www.nytimes.com/2014/02/07/us/huge-leak-of-coal-ash-slows-at-north-carolina-power-plant.html?hp"; $article=新文档; $article->loadHTMLFile($link); //生成图像阵列 $images

我的抓取代码适用于我在测试时访问的几乎每个站点。。。除了纽约时报网站的文章。我将ajax与以下PHP代码一起使用(我省略了一些细节来关注我的具体问题):

$link=”http://www.nytimes.com/2014/02/07/us/huge-leak-of-coal-ash-slows-at-north-carolina-power-plant.html?hp";
$article=新文档;
$article->loadHTMLFile($link);
//生成图像阵列
$images=$article->getElementsByTagName(“img”);
foreach($images作为$image){
$source=$image->getAttribute(“src”);
回音“

”; }

我的问题是,《纽约时报》页面上的主要图像似乎都没有被getElementsByTagName所捕获。Pinterest找到了一种从这个网站上抓取主要图片的方法,例如:然而我不能。有什么建议吗

好的。这就是我尝试过的,我发现你的问题很有趣

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

var a= new Array(); 
$('img[src]').each(function(){ a.push($(this).attr('src'));});
console.log(a);
另请参见结果的屏幕截图

请注意,
console.log(arrayname)
在Chrome浏览器中工作

因此,理想情况下,您的代码必须工作。请考虑添加<代码> IS0NULL/<代码>检查,就像我已经做的一样。 下面是我尝试使用不同的方法加载URL的代码(也许也更好),并找到了为什么只得到一张NYT徽标图像的根本原因

结果HTML屏幕截图已附加

<?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>'; 
        }
    }
?>

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

  • file\u get\u contents
    方法中使用上下文参数
  • 您可以尝试使用文章的RSS/ATOM提要
  • 您可以将页面下载为HTML,然后将其加载到
    文件\u get\u contents
    方法中。附言:这很有效

  • 我希望你的链接是,而不是你在这里给出的$link是一个变量的原因是因为我有它从ajax接收数据,用户将数据放入表单中。当然,为了清晰起见,我已经添加了链接。有没有一种方法可以自动将页面下载为html?例如,我是否可以自动将远程文件下载到服务器上的tmp文件夹中,然后从那里加载,而无需手动转到《纽约时报》页面?您可以使用Firefox中的Selenium插件,使用存储的脚本直接从浏览器中抓取图像和网页。一个Selenium插件(离线创建后)可以通过将站点名称作为参数传递到多个站点上运行。有趣的是,我将查看Selenium。不幸的是,我正在创建一个web应用程序刮板(如pinterest),这样用户就可以自动完成这项工作。我想我可能只需要使用NYTAPI。。。
    <?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>'; 
            }
        }
    ?>