网站许久没用更新,以后会经常更新,本次分享一个使用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

使用PHP抓取网站ico图标的更多相关文章

  1. 抓取网站数据不再是难事了,Fizzler(So Easy)全能搞定

    首先从标题说起,为啥说抓取网站数据不再难(其实抓取网站数据有一定难度),SO EASY!!!使用Fizzler全搞定,我相信大多数人或公司应该都有抓取别人网站数据的经历,比如说我们博客园每次发表完文章 ...

  2. Python入门-编写抓取网站图片的爬虫-正则表达式

    //生命太短 我用Python! //Python真是让一直用c++的村里孩子长知识了! 这个仅仅是一个测试,成功抓取了某网站1000多张图片. 下一步要做一个大新闻 大工程 #config = ut ...

  3. 【转】详解抓取网站,模拟登陆,抓取动态网页的原理和实现(Python,C#等)

    转自:http://www.crifan.com/files/doc/docbook/web_scrape_emulate_login/release/html/web_scrape_emulate_ ...

  4. 利用wget 抓取 网站网页 包括css背景图片

    利用wget 抓取 网站网页 包括css背景图片 wget是一款非常优秀的http/ftp下载工具,它功能强大,而且几乎所有的unix系统上都有.不过用它来dump比较现代的网站会有一个问题:不支持c ...

  5. 搜索会抓取网站域名的whoise信息吗

    http://www.wocaoseo.com/thread-309-1-1.html 网站是否在信产部备案,这是不是会成为影响网站收录和排名的一个因素?百度是否会抓取域名注册人的相关whois信息吗 ...

  6. C# 抓取网站数据

    项目主管说这是项目中的一个亮点(无语...), 类似于爬虫一类的东西,模拟登陆后台系统,获取需要的数据.然后就开始研究这个. 之前有一些数据抓取的经验,抓取流程无非:设置参数->服务端发送请求- ...

  7. C# 实现抓取网站页面内容

    抓取新浪网的新闻栏目,如图所示: 使用 谷歌浏览器的查看源代码: 通过分析得知,我们所要找的内容在以下两个标签之间: <!-- publish_helper name='要闻-新闻' p_id= ...

  8. PHP中CURL技术模拟登陆抓取网站信息,用与微信公众平台成绩查询

    伴随微信的红火,微信公众平台成为许多开发者的下一个目标.笔者本身对于这种新鲜事物没有如此多的吸引力.但是最近有朋友帮忙开发微信公众平台中一个成绩查询的功能.于是便在空余时间研究了一番. 主要的实现步骤 ...

  9. pythonのscrapy抓取网站数据

    (1)安装Scrapy环境 步骤请参考:https://blog.csdn.net/c406495762/article/details/60156205 需要注意的是,安装的时候需要根据自己的pyt ...

随机推荐

  1. Chrome插件:网页截图

    截图(Webpage Screenshot)是一款Chrome浏览器中的截图插件,使用它可以快速地截取网页中的全部内容. 这是介绍地址:http://chromecj.com/blogging/201 ...

  2. js中的等号与非等号

    等号与非等号都会进行类型转换,转换规则如下: 1 如果有一个是boolean值,则true改为1,false改为0  false == 0 ; true == 1 返回true  true == 2 ...

  3. Review PHP设计模式之——观测模式

    观测模式: <?php class car implements SplSubject{ private $carName; //车的类型 private $carState=0; //车的状态 ...

  4. YII千万级PV架构经验分享--俯瞰篇--业务扩展演变

    hello,大家好,我是方少,世上不如意事十有八九吧,即使你感到很满意,也有人感觉太差了,总得感觉我们技术人员都是一个人在战斗,感情却是最深的,一起吃过苦才难忘吧.娇妻艳女,你失意了会和你一起吃苦吗? ...

  5. Canvas开发笔记(不断更新)

    1.可以使用requestAnimationFrame函数代替setInterval.需要处理浏览器兼容问题: var w = window; requestAnimationFrame = w.re ...

  6. Linux学习系列之Linux入门(二)Vim学习

    第二篇 Vim学习 主要内容: 基本命令: 插件扩展: 参考资料: vim是一个命令控制的文本编辑器,可以完成几乎我们想要做的所有工作,除了Emacs几乎没有其他的工具能和它匹敌.官方网站是:http ...

  7. [摘] SQLPLUS Syntax

    You use the SQLPLUS command at the operating system prompt to start command-line SQL*Plus: SQLPLUS [ ...

  8. 视网膜New iPad与普通分辨率iPad页面的兼容处理

    一.这是篇经验分享 就算不是果粉也应该知道,iPad2与new iPad的重大区别之一就是显示屏的分辨率.new iPad显示屏被称之为“视网膜显示屏”,其设备分辨比(之前有详细介绍,点击这里查看)是 ...

  9. EXTJS store 某行某列数据更新等操作

    1.可以使用add(Ext.data.Record[] records)或者add(Ext.data.Record record)向store末尾添加一个或多个record.如: var newRec ...

  10. Java中的IO流系统详解

    Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组. Java 内用 U ...