`
阿尔萨斯
  • 浏览: 4173127 次
社区版块
存档分类
最新评论

获取一个网页的meta信息

 
阅读更多
<?php
//获取一个网页的meta信息
$url ="http://www.benxiaohai.com";
$meta = get_meta_tags($url);
//在这里还应该注意网页的编码问题,编码如果不一致,可以用iconv进行转码
print_r($meta);
//它将会返回一个标准的一维数组,如果meta信息为空,则返回一个空数组

这个函数是很方便,但是有时候会得到我们想得到更多的信息,这时候就应该再多加一些变化来使用了。下面的一段代码是一个简单的搜索引擎。因为搜索引擎可能只需要meta信息中的keyword和decription信息,所以其它多于的都会过滤掉。

&lt;?php
function get_meta_data($html) {
preg_match_all(
"|&lt;meta[^>]+name=//"([^//"]*)//"[^&gt;]+content=//"([^//"]*)//"[^&gt;]+&gt;|i",$html, $out,PREG_PATTERN_ORDER);
for ($i=0;$i < count($out[1]);$i++) {
//这里对这个数组进行遍历,取得自己想要的标签
if (strtolower($out[1][$i]) == "keywords") $meta['keywords'] = $out[2][$i];
if (strtolower($out[1][$i]) == "description") $meta['description'] = $out[2][$i];
}
return $meta;
}
?>


接下来的这段代码是一个基于这个的应用

<?php
function getUrlData($url)
{
$result = false;

$contents = getUrlContents($url);
if (isset($contents) && is_string($contents))
{
$title = null;
$metaTags = null;

preg_match('/&lt;title>([^&gt;]*)<//title>/si', $contents, $match );
if (isset($match) && is_array($match) && count($match) &gt; 0)
{
$title = strip_tags($match[1]);
}

preg_match_all('/<[/s]*meta[/s]*name="?' . '([^>"]*)"?[/s]*' . 'content="?([^&gt;"]*)"?[/s]*[//]?[/s]*&gt;/si', $contents, $match);

if (isset($match) && is_array($match) && count($match) == 3)
{
$originals = $match[0];
$names = $match[1];
$values = $match[2];

if (count($originals) == count($names) && count($names) == count($values))
{
$metaTags = array();

for ($i=0, $limiti=count($names); $i < $limiti; $i++)
{
$metaTags[$names[$i]] = array (
'html' => htmlentities($originals[$i]),
'value' =&gt; $values[$i]
);
}
}
}

$result = array (
'title' =&gt; $title,
'metaTags' =&gt; $metaTags
);
}

return $result;
}
function getUrlContents($url, $maximumRedirections = null, $currentRedirection = 0)
{
$result = false;

$contents = @file_get_contents($url);

// Check if we need to go somewhere else

if (isset($contents) && is_string($contents))
{
preg_match_all('/<[/s]*meta[/s]*http-equiv="?REFRESH"?' . '[/s]*content="?[0-9]*;[/s]*URL[/s]*=[/s]*([^>"]*)"?' . '[/s]*[//]?[/s]*&gt;/si', $contents, $match);

if (isset($match) && is_array($match) && count($match) == 2 && count($match[1]) == 1)
{
if (!isset($maximumRedirections) || $currentRedirection < $maximumRedirections)
{
return getUrlContents($match[1][0], $maximumRedirections, ++$currentRedirection);
}

$result = false;
}
else
{
$result = $contents;
}
}

return $contents;
}

$result = getUrlData('http://www.benxiaohai.com');
echo '&lt;pre>'; print_r($result); echo '</pre>';
/****************************************得到的结果如下*******************************
Array
(
[title] =&gt; 笨小孩心情驿站 - 老天爱笨小孩
[metaTags] =&gt; Array
(
[author] =&gt; Array
(
[html] =&gt; <meta name="author" content="笨�孩��驿�" />
[value] =&gt; 笨小孩心情驿站
)

[description] =&gt; Array
(
[html] =&gt; <meta name="description" content="�天�笨�孩" />
[value] =&gt; 老天爱笨小孩
)

[keywords] =&gt; Array
(
[html] =&gt; <meta name="keywords" content="笨�孩��驿�" />
[value] =&gt; 笨小孩心情驿站
)

)

)
****************************************************************************/
?&gt;

再下面的这段代码,将根据各个标签的长度给出优化建议,可以稍加修改,做出更完美的

<?php
$url="http://www.benxiaohai.com";
$result =get_meta_tags($url);
if(is_array($result)){
foreach($result as $key=>$value){
$key = strtolower($key);
switch ($key){
case "keywords":
$rs["keywords"] = $value;
break;
case "description":
$rs["description"]= $value;
break;
case "author":
$rs["author"]= $value;
break;
case "robots":
$rs["robots"]= $value;
break;
case "copyright":
$rs["copyright"] = $value;
break;
}
}
}else
{
echo "没有任何meta标签";
}
if(empty($rs["robots"])){
echo "没有Robots标签";
}
if(empty($rs["copyright"])){
echo "<br>页面没有任何版权信息";
}
if(empty($rs["author"])){
echo "<br>没有作者信息";
}
if(empty($rs["description"])){
echo "<br>没有页面描述信息";
}
if(empty($rs["keywords"])){
echo "<br>没有关键词信息";
}
?&gt;
分享到:
评论

相关推荐

    js(javascript)获取网页源码

    //获取目标地址信息 //地址为空时提示用户输入 if (url == "") { alert("请输入网页地址。"); return; } document.getElementById("source").value = "正在加载……"; //提示正在加载 createXmlHttp(); //...

    HttpClient以及获取页面内容应用

    通过一个URLConnection或者一个保存有网页内容的字符串来初始化Parser,或者使用静态函数来生成一个Parser对象。 ParserFeedback的代码很简单,是针对调试和跟踪分析过程的,一般不需要改变。而使用Lexer???? ...

    JS获取元素多层嵌套思路详解

    如果一段html嵌套过多,在js中获取还是比较麻烦的,我写了几套方案,大家可以参考参考,如果你有好的方法,也分享出来,让我们瞧瞧。 HTML: &lt;!DOCTYPE html&gt; &lt;html lang=en&gt; &lt;head&gt; &lt;meta ...

    php实现专业获取网站SEO信息类实例

    – 获取,因为它是第一个注册的网站域名年龄 – 获取的Twitter网站页面的数量 – 获取的Facebook链接的网站页面 – 获取网站谷歌网页速度等级 – 获取网站的谷歌网页排名 &lt;?php /** * * SEO report for ...

    html中meta标签及用法详解

    元素 可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词。  &lt;meta&gt; 标签位于文档的头部,不包含任何内容。  &lt;meta&gt; 标签的属性定义了与文档相关联的名称/值对...

    人工智能-项目实践-检索系统-网络信息检索系统实现

    网页内容预处理实现,主要流程是从给定文件中读取url,获取url对应网页,从网页中提取正文,分词后存储到文件中。 AnalyzerImpl:实现对网页正文和网页关键词(标题与meta标签中的keywords)的提取,以及分词,解析...

    HttpService(C#获取网站源码)

    1、HttpService.dll是一个用于http/https协议访问网络获取数据的链接库,该链接库封装了C#的HttpWebRequest用于请求数据的Get和Post的操作方式,直接输入一个网址即可实现获取对应网页的源码,为网络编程中必不可少...

    js获取系统当前时间

    网页特效|Linkweb.cn/Js|---最简单的全日制时间显示,代码非常...&lt;script&gt;setInterval("linkweb.innerHTML=new Date().toLocaleString()+' 星期'+'日一二三四五六'.charAt(new Date().getDay());",1000); &lt;/html&gt;

    html详解.doc

    2.&lt;meta&gt;信息:在服务器和客户之间传递隐含信息 其中最重要的设置: http-equiv:设置和获取Content的内容,并把content的内容添加 http的响应头中。 Content: meta信息的内容2 例如: &lt;meta http-equiv=”...

    MVC微信网页授权获取用户OpenId

    最近开发微信公众平台,做下记录,以前也开发过,这次开发又给忘了,搞了半天,还是做个笔记为好。  注意框架为MVC 开发微信公众平台。场景为,在模板页中获取用户openid,想要进行验证的页面,集成模板页就可以了...

    第2章 HTML网页设计基础 课件( 谢从华,高蕴梅,黄晓华.Web系统与技术[M],清华大学出版社,2018)

    2.2.1 元信息标签&lt;Meta&gt; 13 2.2.2 文本标签 18 2.2.3 列表标签 20 2.2.4 表格标签 24 2.2.5 超级链接标签 27 2.2.6 图像标签 29 2.2.7 背景声音标签 29 2.2.8 视频标签 29 2.3 网页表单和控件 30 2.3.1 表单...

    FlickrMetaCrawlr:FlickrMetaCrawlr 能够以编程方式下载 Flickr 照片和用户的元数据。 它依赖于开放的 Flickr API 并为一组指定的标签获取 Flickr 照片的元数据

    FlickrMetaCrawlr Flickr 爬虫能够以编程方式下载 Flickr 照片和用户的... 它依赖于开放的 Flickr API,并为一组指定的标签、边界框和时间范围获取 Flickr 照片的元数据。 它将照片元数据上传到传感器观察服务 (SOS)。

    JS远程获取网页源代码实例

    代码如下: &lt;...远程网页源代码读取&lt;/title&gt; &lt;style type=”text/css”&gt; /* 页面字体样式 */ body, td, input, textarea { font-family:Arial; font-size:12px; } &lt;/style&gt; &lt;script type

    网页与Web程序设计 课件 ppt 机械工业出版社 part1

    对于个人,可以按照爱好和兴趣建立一个具有独特风格的网站,通过它来展示自我,共享资源;对于政府机关,可以利用网站宣传政策法规和进行网络办公,实现电子政务。因此,网页设计和制作技术越来越受到重视。  目前...

    【JavaScript源代码】利用JS定时器实现元素移动.docx

     利用JS定时器做一个元素做一个有移动效果的方法,实现思路:首先声明一个变量存放元素距离左侧的边距,然后我们在声明一个变量存放每次元素需要移动的距离,然后再给这个方法一个完成时间就可以了。需要注意的是...

    AspNetSeo:用于处理ASP.NET Web应用程序的SEO数据的助手

    MetaDescription :获取或设置网页的元描述。 MetaKeywords :获取或设置网页的元关键字。 MetaRobots :获取或设置元机器人说明网页。 OgDescription :获取或设置网页的打开图描述。 在MetaDescription回落...

    房产信息网站管理系统

    网站页面设置 - 可以设置每个页面的自定义标题、META标签、采用模版;设置每个版块采用什么插件和插件的显示参数 界面风格设置 - 可以选择模版,编辑模板 网站升级更新 - 连接远程升级服务器,获取最新升级信息,...

    jQuery实现获取动态添加的标签对象示例

    本文实例讲述了jQuery实现获取动态添加的标签对象。...meta charset=UTF-8&gt; &lt;title&gt;www.jb51.net jQuery动态获取事件&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;div id=test&gt;&lt;/div&gt; &lt;/body&gt; &lt;scr

    java网络爬虫,网络检索作业

    实现了一下功能: (1) 能够搜集本站内的...一个线程抓完一个网页后要适当停顿(sleep);最多允许与被搜集站点同时建立2个连接(本地做网页解析的线程数则不限)。 (7)采用多线程并行编程技术,提高搜集速度。

    django之从html页面表单获取输入的数据实例

    1.首先写一个自定义的html网页 login.html &lt;!DOCTYPE html&gt; &lt;html lang=en&gt; &lt;head&gt; &lt;meta charset=UTF-8&gt; &lt;title&gt;test&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;form method=...

Global site tag (gtag.js) - Google Analytics