php爬虫

php爬虫实现方法

1.将整个网页作为一个字符串读入

     $str = file_get_contents(http://www.xxx.com);

2.通过正则表达式匹配相应的内容

   例如匹配图片的的正则$imageRule='/\<img src =(.*)\>/is';  //i忽略规则的大小写, s .这个元字符可以匹配换行符, ()表示子模式

                                preg_match_all($imageRule,$str,$arr); //()中的内容被保存到arr[1]这个数组中

        匹配标题的正则规则   $titleRule="/title=\"(.*)\"/";

       

    这样就抓取到了图片的地址,类似的方式还可以抓取网页的超链接 标题等信息。

 

补充说明:

3.常用的正则规则

     (1)  匹配中文字符的正则表达式: [\u4e00-\u9fa5]
     (2) 匹配双字节字符(包括汉字在内):[^\x00-\xff] 
     (3) 匹配空行的正则表达式:\n[\s| ]*\r 
     (4) 匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ 
     (5)  匹配首尾空格的正则表达式:(^\s*)|(\s*$) 
     (6) 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
     (7)匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$ 
     (8) 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 
     (9) 匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})? 
     (10) 匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$

 

 4.注意事项

    (1) 匹配中文的时候要注意原网页的编码格式,如果和php文件的编码格式不一样是匹配不到的,这种情况下可以对要匹配的内容进行转码

    (2)效率问题 正则的效率很低,能处理的字串尽量不要用这种方式

    (3) . / \?*等特殊的字符要转义,转义使用\进行字符转义

  

posted on 2013-03-07 23:59  李乐已存在  阅读(308)  评论(0编辑  收藏  举报

AmazingCounters.com