使用PHP抓取网站ico图标
网站许久没用更新,以后会经常更新,本次分享一个使用PHP抓取网站ico的程序,提供一个网站列表后对网站的ico进行下载抓取,具体代码如下:
<?php /** * 更新热站ico * gao 2015-03-24 */ error_reporting(0); // 加载ICO抓取名单,需要区分HTTP和HTTPS类型网站,一行一个网站 // 如:http://yun.baidu.com https://wx.qq.com $handle = fopen('site.txt', 'r'); if($handle) { $success_ico = array(); $faild_ico = array(); $count = 0; unlink('success.ico.txt'); unlink('faild.ico.txt'); while( ($url = fgets($handle, 4096)) !== false ) { $count++; $url = trim($url); $scheme = parse_url($url, PHP_URL_SCHEME); $host = parse_url($url, PHP_URL_HOST); if(file_exists("ico/{$host}.ico")) { file_put_contents('success.ico.txt', $url . PHP_EOL, FILE_APPEND); echo "N{$count} [continue] {$host}.ico" . PHP_EOL; continue; } $ico = curl_get("{$scheme}://{$host}/favicon.ico"); if(!is_ico_image($ico)) { // 抓取首页匹配是否有自定义ICO $ico_html = curl_get("{$scheme}://{$host}/"); preg_match('/href=\"(.*?)\.ico/i', $ico_html, $match); // 匹配HTTP/HTTPS类型ICO,匹配相对路径和绝对路径ICO if($match[1]) { $url = substr($match[1], 0, 4) == 'http' ? $match[1] : $scheme . '://' . $host . $match[1]; $url.= '.ico'; $ico = curl_get($url); } } if(is_ico_image($ico)) { file_put_contents("ico/{$host}.ico", $ico); file_put_contents('success.ico.txt', $url . PHP_EOL, FILE_APPEND); echo "N{$count} [success] {$host}.ico" . PHP_EOL; } else { file_put_contents('faild.ico.txt', $url . PHP_EOL, FILE_APPEND); echo "N{$count} [faild] {$host}.ico" . PHP_EOL; } } fclose ($handle); } // 判断是否是图片,可能是404页面 function is_ico_image($ico) { if($ico) { file_put_contents('ico_tmp/favicon.ico', $ico); $type = getimagesize('ico_tmp/favicon.ico'); unlink('ico_tmp/favicon.ico'); if($type) { return true; } } return false; } // 使用curl模拟GET抓取网站ico信息 function curl_get($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, false); // 不需要header curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 不自动输出 curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:8.8.8.8', 'CLIENT-IP:8.8.8.8')); // 模拟header curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11"); curl_setopt($ch, CURLOPT_REFERER, $url); curl_setopt($ch, CURLOPT_TIMEOUT, 10); // 设置每个请求的超时时间 $data = curl_exec($ch); curl_close($ch); return $data; }
实例下载地址 : http://pan.baidu.com/s/1bnxumzt