php正则得到网页的keywords和description部分

作者:enenba | 发表于:2012-01-13 00:07 | 分类:php采集

     正则匹配网页的keywords部分,主要的方法也是获取页面的源代码,然后再从中使用正则匹配出来。但是PHP就有一个自带的函数get_meta_tags()。这个函数可以逐行解析文件中的 <meta> 标签解析工作将在 </head> 处停止。

可以想到,他的效率应该比采集源码再分析的快。

上个例子:

<?php
$tags = get_meta_tags('http://enenba.com');
printf("<p>输出tags数据为:</p><pre>%s</pre>\n",var_export( $tags ,TRUE));
?>

输出的是我站的'keywords' 和'description'

 

       当然也可以使用正则来获取

正则:

<?php
$html = file_get_contents('http://enenba.com');
$search = '|<meta[^>]+name="([^"]*)"[^>]+content="([^"]*)"[^>]+>|i';
preg_match_all($search, $html, $tags);

printf("<p>输出tags数据为:</p><pre>%s</pre>\n",var_export( $tags ,TRUE));
?>

附件下载/演示源码:
2.htm8.49KB

上一篇: 使用php正则获取网页的img部分   |   下一篇:使用php正则获取网页的titile部分» 标签: php采集 数据采集 PHP正则 采集规则

评论:

2012-11-08 14:29

这里的获取没有考虑单双引号

2012-11-08 14:38

是的,没有考虑,下次写个完整版。

2012-11-08 15:02

能不能现在写下,我不会这个正则。改来改去还是没成功!--

2012-11-08 16:45

$search = '|<meta[^>]+name=(["\'])(.*?)\\1[^>]+content=(["\'])(.*?)\\3[^>]+>|i';
preg_match_all($search, $html, $tags);

2012-11-08 17:59

谢谢了,还有就是name和content的位置可不可能兑换过来啊

2012-11-08 20:57

你获取下http://www.celestra.cn上面的那个正则只能获取出来3个meta还有几个关键meta获取不出来

array (
  0 =>
  array (
    0 => '',
    1 => '',
    2 => '',
  ),
  1 =>
  array (
    0 => '"',
    1 => '"',
    2 => '"',
  ),
  2 =>
  array (
    0 => 'viewport',
    1 => 'author',
    2 => 'copyright',
  ),
  3 =>
  array (
    0 => '"',
    1 => '"',
    2 => '"',
  ),
  4 =>
  array (
    0 => 'width=device-width',
    1 => 'Celestra',
    2 => 'Celestra Corporation Copyright 2002-2012,http://www.celestra.cn',
  ),
)

我不知道怎么解决,前辈

2012-11-08 21:14

如果你想要meta 倒不如用自带函数get_meta_tags()
$tags = get_meta_tags('http://www.celestra.cn');
printf("<p>输出tags数据为:</p><pre>%s</pre>\n",var_export( $tags ,TRUE));
可以查手册。

2012-11-09 08:50

谢谢,昨天晚上下班了忘记看了。