PHP-如何知道判断内容是否已经抓取完成?

PHP-如何知道判断内容是否已经抓取完成?

瑾兮 发布于 2017-05-16 字数 83 浏览 1062 回复 4

经常需要抓取第三方的一些图片,怎么才能知道图片已经抓取完成并且保证图片完整性

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

灵芸 2017-10-15 4 楼

说实在话,这个太难了,由于在抓取第三方网页时,由于受到很多因素的影响(例如、字符集、网络延迟、对方的环境限制等等),都会导致抓取内容的不完整,而这个是没有办法无师自通验证的。用Curl会比较靠谱一点,但是也没有办法保证100%爬取正常。也没有办法验证内容的完整性。

想挽留 2017-10-03 3 楼

通过头信息响应的 Content-Length,以及 抓取回来的实体内容的大小进行 对比,不知道这样可行不,我刚抓取了淘宝的一张图片来做的测试,结果如下:

为了测试简单实用get_headers(),以及file_get_contents();

$img = 'http://img04.taobaocdn.com/bao/uploaded/i4/T1Z3OzXdRRXXcP3wo0_035314.jpg_310x310.jpg';
$headers = get_headers($img);
echo "<pre>";
print_r($headers);
echo "<br />";
echo "imgsize: " ,strlen(file_get_contents($img));

归属感 2017-06-30 2 楼

给你个判断JPG是否完整的例子,其它类型的文件,举一反三即可。
只要不是特殊构造的图片,那这个函数总是有效地

<?php
function isCompleteJpg($jpg){
$fp=fopen($jpg,"rb");
$size=filesize($jpg)-2;
fseek($fp,$size);
$data = fread($fp, $size);
if(bin2hex($data)=='ffd9'){
return true;
}else{
return false;
}
}

var_dump(isCompleteJpg('G:worktmph.jpg'));

瑾兮 2017-05-18 1 楼

如果你想判断图片是否下载完整,个人感觉你现在抓取的是第三方的,地址会随时变化,判断起来很困难,可以利用php脚本来输出文件判断是否下载完毕,一般抓取有两种,file函数和curl函数去实现抓取,一般不建议使用file函数去抓取,容易丢失,curl比较靠谱,这个大家都应该有血的教训...