文档章节

抓取网页标题关键字描述和网页内容并自动转码

别俊
 别俊
发布于 2015/01/10 16:35
字数 401
阅读 1057
收藏 11
# $url:网址 #$encode:编码
function htmload($url,$encode='UTF-8'){
        $pageinfo = array();
        $pageinfo['content_type'] = '';
        $pageinfo['charset'] = '';
        $pageinfo['title'] = '';
        $pageinfo['description'] = '';
        $pageinfo['keywords'] = '';
        $pageinfo['body'] = '';
        $pageinfo['httpcode'] = 200;

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
        curl_setopt($ch, CURLOPT_TIMEOUT, 8);
        curl_setopt($ch, CURLOPT_FILETIME, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_URL,$url);   

        $curl_start = microtime(true);
        $store = curl_exec ($ch);

        $curl_time = microtime(true) - $curl_start;   
        if( curl_error($ch) ) { 
            $pageinfo['httpcode'] = 505;
            return $pageinfo;
        }   
        $pageinfo['httpcode'] = curl_getinfo($ch,CURLINFO_HTTP_CODE);
        $pageinfo['content_type'] = curl_getinfo($ch,CURLINFO_CONTENT_TYPE);
        if(intval($pageinfo['httpcode']) <> 200 or !preg_match('@text/html@',curl_getinfo($ch,CURLINFO_CONTENT_TYPE))){   
            return $pageinfo;
        }   
        preg_match('#charset=([^/s/n/r]+)#i',curl_getinfo($ch,CURLINFO_CONTENT_TYPE),$matches); //从header 里取charset   
        if( trim($matches[1]) ){
            $pageinfo['charset'] = trim($matches[1]);
        }
        curl_close ($ch);
        $store = preg_replace("/<mce:script.*><!--(.*)<\/script>/smUi",'',$store);
        $store = preg_replace("/<link\/s+[^>]+>/smUi",'',$store);
        $store = preg_replace("/<!--.*-->/smUi",'',$store);
        $store = preg_replace("/<style.*>(.*)<\/style>/smUi",'',$store);
        $store = preg_replace("/ /",'',$store);
        if($pageinfo['charset'] == '' ) {
            preg_match('@<meta.+charset=([/w/-]+)[^>]*>@i',$store,$matches);
            $pageinfo['charset'] = trim($matches[1]);
        }
        preg_match('/<meta\s+name=\"description\"\s+content=\"(.*)\"\s?\/?>/iU',$store,$matches);
        $desc = trim($matches[1]);
        $pageinfo['description'] = get_encoding(str_replace("/", '',$desc),$encode);
        preg_match('/<meta\s+name=\"keywords\"\s+content=\"(.*)\"\s?\/?>/iU',$store,$matches);
        $keywords = trim($matches[1]);
        $pageinfo['keywords'] = str_replace("/", '',$keywords); 
        preg_match("/<title>(.*)<\/title>/smUi",$store, $matches);
        $pageinfo['title'] = get_encoding(trim($matches[1]),$encode);

        preg_match("/<body.*>(.*)<\/body>/smUi",$store, $matches);
        $pageinfo['body'] = get_encoding(addslashes(clhtml($matches[1])),$encode);
        return $pageinfo;
}
#清理内容空格转义字符及js代码
function clhtml($document){
        $document = trim(preg_replace("/\s| /","",$document));
        if (strlen($document) <= 0){
            return $document;
        }   
        $search = array (
                    "'<script[^>]*?>.*?</script>'si",
                    "'<[///!]*?[^<>]*?>'si",
                    "'[/r/n/s+]'",
                    "'&([/w]+);'i",
                    "'&bp;'"
                    );
        $replace = array ( "","","", "","");

        return @preg_replace ($search, $replace, $document);
}
#转码
function get_encoding($data,$to){
   $encode_arr = array('UTF-8','ASCII','GBK','GB2312','BIG5','JIS','eucjp-win','sjis-win','EUC-JP');
   $encoded = mb_detect_encoding($data, $encode_arr);
   $data = mb_convert_encoding($data,$to,$encoded);
   return $data;
}

代码参考了网络上的一部分,但网上的基本上都有BUG,我修改和优化了一下,留着说不定将来的某一天我也能做搜索引擎的时候用 哈哈。。

© 著作权归作者所有

别俊
粉丝 7
博文 14
码字总数 3228
作品 0
荆州
个人站长
私信 提问
谈谈以前端角度出发做好SEO需要考虑什么?

大家好,我是IT修真院北京总院第24期的学员,一枚正直纯洁善良的web程序员 今天给大家分享一下,修真院官网css任务15,深度思考中的知识点——谈谈以前端角度出发做好SEO需要考虑什么? 1.背...

我是一只北极熊啊
2017/11/10
0
0
SEO优化:请正确设置title,keywords,description

一、title(网站标题) 1 title,就是浏览器上显示的那些内容,不仅用户能看到,也能被搜索引擎检索到(搜索引擎在抓取网页时,最先读取的就是网页标题,所以title是否正确设置极其重要。)t...

飞翔的熊blabla
02/18
0
0
SEO关键词策略

seo关键词策略 选择关键词的六大技巧 列出在整个行业内自己知道或者心中所想的所有关键词,最少列30个 分析竞争对手的网站,看都用了哪些关键词 咨询周围的朋友平时在搜索相关产品的时候会使...

发骚的小逗比
2016/05/05
37
0
基于Html的SEO(很基础,更是前端必须掌握之点)

Html代码seo优化最佳布局,实例讲解 众所周知,搜索引擎对html代码是非常优化的,所以html的优化是做好推广的第一步。一个符合seo规则的代码大体如下界面所示。 1、<!–聚酯多元醇)–> 这个...

ZhangLG
04/01
11
0
Html代码seo优化最佳布局实例讲解

Html代码seo优化最佳布局实例讲解 搜索引擎对html代码是非常优化的,所以html的优化是做好推广的第一步。一个符合seo规则的代码大体如下界面所示。 1、<!–木庄网络博客–> 这个东西是些页面...

MrBoyce
2018/05/15
23
0

没有更多内容

加载失败,请刷新页面

加载更多

Jenkins World 贡献者峰会及专家答疑展位

本文首发于:Jenkins 中文社区 原文链接 作者:Marky Jackson 译者:shunw Jenkins World 贡献者峰会及专家答疑展位 本文为 Jenkins World 贡献者峰会活动期间的记录 Jenkins 15周岁啦!Jen...

Jenkins中文社区
32分钟前
8
0
杂谈:面向微服务的体系结构评审中需要问的三个问题

面向微服务的体系结构如今风靡全球。这是因为更快的部署节奏和更低的成本是面向微服务的体系结构的基本承诺。 然而,对于大多数试水的公司来说,开发活动更多的是将现有的单块应用程序转换为...

liululee
46分钟前
7
0
OSChina 周二乱弹 —— 我等饭呢,你是不是来错食堂了?

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @ 自行车丢了:给主编推荐首歌 《クリスマスの夜》- 岡村孝子 手机党少年们想听歌,请使劲儿戳(这里) @烽火燎原 :国庆快来,我需要长假! ...

小小编辑
今天
474
9
玩转 Springboot 2 之热部署(DevTools)

Devtools 介绍 SpringBoot 提供了热部署的功能,那啥是热部署累?SpringBoot官方是这样说的:只要类路径上的文件发生更改,就会自动重新启动应用程序。在IDE中工作时,这可能是一个有用的功能...

桌前明月
今天
6
0
CSS--列表

一、列表标识项 list-style-type none:去掉标识项 disc:默认实心圆 circle:空心圆 squire:矩形 二、列表项图片 list-style-img: 取值:url(路径) 三、列表项位置 list-style-position:...

wytao1995
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部