您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息

图片抓取失败有关问题

2024/4/17 9:09:44发布3次查看
图片抓取失败问题
最近要抓取智库百科中的词条,但是词条中的图片抓取出现了问题,这是其中一个图片链接。
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 ------解决方案--------------------
 strcmp(substr($data,0,2),\x1f\x8b)) { 
    return $data;  // not gzip format (see rfc 1952) 
  }
$method = ord(substr($data,2,1));  // compression method 
  $flags  = ord(substr($data,3,1));  // flags 
  if ($flags & 31 != $flags) { 
    // reserved bits are set -- not allowed by rfc 1952 
    return data; 
  }
// note: $mtime may be negative (php integer limitations) 
  $mtime = unpack(v, substr($data,4,4)); 
  $mtime = $mtime[1]; 
  $xfl   = substr($data,8,1); 
  $os    = substr($data,8,1); 
  $headerlen = 10; 
  $extralen  = 0; 
  $extra     = ; 
  if ($flags & 4) { 
    // 2-byte length prefixed extra data in header 
    if ($len - $headerlen - 2       return false;    // invalid format 
    } 
    $extralen = unpack(v,substr($data,8,2)); 
    $extralen = $extralen[1]; 
    if ($len - $headerlen - 2 - $extralen       return false;    // invalid format 
    } 
    $extra = substr($data,10,$extralen); 
    $headerlen += 2 + $extralen; 
  } 
  $filenamelen = 0; 
  $filename = ; 
  if ($flags & 8) { 
    // c-style string file name data in header 
    if ($len - $headerlen - 1       return false;    // invalid format 
    } 
    $filenamelen = strpos(substr($data,8+$extralen),chr(0)); 
    if ($filenamelen === false 
------解决方案--------------------
 $len - $headerlen - $filenamelen - 1       return false;    // invalid format 
    } 
    $filename = substr($data,$headerlen,$filenamelen); 
    $headerlen += $filenamelen + 1; 
  } 
  $commentlen = 0; 
  $comment = ; 
  if ($flags & 16) { 
    // c-style string comment data in header 
    if ($len - $headerlen - 1       return false;    // invalid format 
    } 
    $commentlen = strpos(substr($data,8+$extralen+$filenamelen),chr(0)); 
    if ($commentlen === false 
------解决方案--------------------
 $len - $headerlen - $commentlen - 1       return false;    // invalid header format 

该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录