使用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
使用PHP抓取网站ico图标的更多相关文章
- 抓取网站数据不再是难事了,Fizzler(So Easy)全能搞定
首先从标题说起,为啥说抓取网站数据不再难(其实抓取网站数据有一定难度),SO EASY!!!使用Fizzler全搞定,我相信大多数人或公司应该都有抓取别人网站数据的经历,比如说我们博客园每次发表完文章 ...
- Python入门-编写抓取网站图片的爬虫-正则表达式
//生命太短 我用Python! //Python真是让一直用c++的村里孩子长知识了! 这个仅仅是一个测试,成功抓取了某网站1000多张图片. 下一步要做一个大新闻 大工程 #config = ut ...
- 【转】详解抓取网站,模拟登陆,抓取动态网页的原理和实现(Python,C#等)
转自:http://www.crifan.com/files/doc/docbook/web_scrape_emulate_login/release/html/web_scrape_emulate_ ...
- 利用wget 抓取 网站网页 包括css背景图片
利用wget 抓取 网站网页 包括css背景图片 wget是一款非常优秀的http/ftp下载工具,它功能强大,而且几乎所有的unix系统上都有.不过用它来dump比较现代的网站会有一个问题:不支持c ...
- 搜索会抓取网站域名的whoise信息吗
http://www.wocaoseo.com/thread-309-1-1.html 网站是否在信产部备案,这是不是会成为影响网站收录和排名的一个因素?百度是否会抓取域名注册人的相关whois信息吗 ...
- C# 抓取网站数据
项目主管说这是项目中的一个亮点(无语...), 类似于爬虫一类的东西,模拟登陆后台系统,获取需要的数据.然后就开始研究这个. 之前有一些数据抓取的经验,抓取流程无非:设置参数->服务端发送请求- ...
- C# 实现抓取网站页面内容
抓取新浪网的新闻栏目,如图所示: 使用 谷歌浏览器的查看源代码: 通过分析得知,我们所要找的内容在以下两个标签之间: <!-- publish_helper name='要闻-新闻' p_id= ...
- PHP中CURL技术模拟登陆抓取网站信息,用与微信公众平台成绩查询
伴随微信的红火,微信公众平台成为许多开发者的下一个目标.笔者本身对于这种新鲜事物没有如此多的吸引力.但是最近有朋友帮忙开发微信公众平台中一个成绩查询的功能.于是便在空余时间研究了一番. 主要的实现步骤 ...
- pythonのscrapy抓取网站数据
(1)安装Scrapy环境 步骤请参考:https://blog.csdn.net/c406495762/article/details/60156205 需要注意的是,安装的时候需要根据自己的pyt ...
随机推荐
- Mysql创建函数时报错
先去查询 show variables like '%func%' ; 这个语句,如果该语句最后输出的值是OFF 那么就用下面的语句去修改就可以:set global log_bin_trust_f ...
- event事件:
onabort: 图像的加载被中断onblur: 元素失去焦点onchange: 域的内容被改变onclick: 当用户点击某个对象时调用的事件句柄ondblclick: 当用户双击某个对象时调用的事 ...
- IE下的bug解决方案
1.IE6下的双边距bug <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- dapper extensions (predicates)
https://github.com/tmsmith/Dapper-Extensions/wiki/Predicates The predicate system in Dapper Extensio ...
- Spark Streaming揭秘 Day18 空RDD判断及程序中止机制
Spark Streaming揭秘 Day18 空RDD判断及程序中止机制 空RDD的处理 从API我们可以知道在SparkStreaming中,对于RDD的操作一般都是在foreachRDD和Tra ...
- python字典操作
Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型.一.创建字典字典由键和对应值成对组成.字典也被称作关联数组或哈希表.基本语法如下: 代码如下: dict ...
- 《WPF程序设计指南》读书笔记——第1章 应用程序与窗口
1.空白WPF项目的创建: 1)新建项目:在VS2010中,文件-新建-项目-visual c#-windows-空项目: 2)添加引用:PresentationFramework,Presentat ...
- 【IOS】利用ASIHTTPRequest 实现一个简单的登陆验证
http://blog.csdn.net/toss156/article/details/7638529
- 【dapper】.net平台下的框架
http://www.cnblogs.com/yipu/archive/2012/11/21/2780199.html Method Duration Remarks Hand coded (usin ...
- IOS开发之表视图添加索引
我们要实现的效果如下. 1.修改ControlView.h,即添加变量dict,用于存储TabelView的数据源. #import <UIKit/UIKit.h> @interface ...