图片抓取失败问题
程序员文章站
2024-01-26 21:45:22
...
抓取 图片 最近要抓取智库百科中的词条,但是词条中的图片抓取出现了问题,这是其中一个图片链接。
http://wiki.mbalib.com/w/images/2/22/%E6%B3%9B%E6%88%90%E6%9C%AC%E7%9A%84%E7%89%B9%E5%BE%81.jpg
无论是用file_get_contents,还是ob_start后readfile,还是用curl,还是snoopy,抓取下来的图片都是损坏的,抓下来的数据比原图小,但我看了一下这个站的图片貌似并没有设置防盗链或cookie验证之类的,求解决方法
给一个老外的
给一个老外的
非常感谢,长知识了
http://wiki.mbalib.com/w/images/2/22/%E6%B3%9B%E6%88%90%E6%9C%AC%E7%9A%84%E7%89%B9%E5%BE%81.jpg
无论是用file_get_contents,还是ob_start后readfile,还是用curl,还是snoopy,抓取下来的图片都是损坏的,抓下来的数据比原图小,但我看了一下这个站的图片貌似并没有设置防盗链或cookie验证之类的,求解决方法
回复讨论(解决方案)
他传送的图片数据是 gzip 压缩的,需要使用 gzdecode 函数解码(php5>=5.4.0 已添加进 gzip 扩展了
$url = 'http://wiki.mbalib.com/w/images/2/22/%E6%B3%9B%E6%88%90%E6%9C%AC%E7%9A%84%E7%89%B9%E5%BE%81.jpg';$s = file_get_contents($url);echo gzdecode($s);如果你的 php 版本还没有那么高,可以自己写代码。网上也可以搜索到。
给一个老外的
function gzdecode($data) { $len = strlen($data); if ($len 0) { switch ($method) { case 8: // Currently the only supported compression method: $data = gzinflate($body); break; default: // Unknown compression method return false; } } else { // I'm not sure if zero-byte body content is allowed. // Allow it for now... Do nothing... } // Verifiy decompressed size and CRC32: // NOTE: This may fail with large data sizes depending on how // PHP's integer limitations affect strlen() since $isize // may be negative for large sizes. if ($isize != strlen($data) || crc32($data) != $datacrc) { // Bad format! Length or CRC doesn't match! return false; } return $data; }
他传送的图片数据是 gzip 压缩的,需要使用 gzdecode 函数解码(php5>=5.4.0 已添加进 gzip 扩展了
$url = 'http://wiki.mbalib.com/w/images/2/22/%E6%B3%9B%E6%88%90%E6%9C%AC%E7%9A%84%E7%89%B9%E5%BE%81.jpg';$s = file_get_contents($url);echo gzdecode($s);如果你的 php 版本还没有那么高,可以自己写代码。网上也可以搜索到。
给一个老外的
function gzdecode($data) { $len = strlen($data); if ($len 0) { switch ($method) { case 8: // Currently the only supported compression method: $data = gzinflate($body); break; default: // Unknown compression method return false; } } else { // I'm not sure if zero-byte body content is allowed. // Allow it for now... Do nothing... } // Verifiy decompressed size and CRC32: // NOTE: This may fail with large data sizes depending on how // PHP's integer limitations affect strlen() since $isize // may be negative for large sizes. if ($isize != strlen($data) || crc32($data) != $datacrc) { // Bad format! Length or CRC doesn't match! return false; } return $data; }
非常感谢,长知识了
下一篇: 检查ISBN号码是否合法
推荐阅读
-
PHPEXCEL导出图片问题,求高手
-
php图片上传有关问题
-
写了一个简单的html/php上传的网页,在安卓和电脑上都正常,但ipad上都有问题,即图片上传名称都自动变成image.jpg
-
codeigniter上传图片不能正确识别图片类型问题解决方法,codeigniter上传图片_PHP教程
-
微信开发 - php下载网络图片问题,在本地测试成功,服务器上下载回来的文件只有100多字节
-
PHP读取mysql中图片的有关问题
-
php 图片下传有关问题,请高手指教
-
抓取时ip被封禁有关问题
-
php中用GD库的imagettftext()函数生成图片失败怎么办?
-
同时上传批量图片到七牛和S3,S3没什么问题,七牛经常发生超时,求解