我的抓取代码适用于我测试时遇到的每个网站...除了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而我不能。有什么建议?
答案 0 :(得分:0)
行。所以这就是我尝试的,因为我发现你的问题很有趣。
当我使用jQuery在浏览器控制台上执行此操作时,我会在图像上获得结果。我的疑问是
var a= new Array();
$('img[src]').each(function(){ a.push($(this).attr('src'));});
console.log(a);
另请参阅结果
的屏幕截图请注意,console.log(arrayname)
可在Chrome浏览器中使用。
理想情况下,您的代码必须正常工作。请考虑像我一样添加is_null
支票。
下面是我尝试使用不同方法加载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>';
}
}
?>
除非经过身份验证,否则无法通过Feed获取内容。 你可以尝试 -
file_get_contents
方法file_get_contents
方法中。 PS:这很有效。