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) . / \?*等特殊的字符要转义,转义使用\进行字符转义