php采集器小记

好吧,本屌承认又在糊弄朋友们了,这个没啥特别的,就是记录下一次帮人弄个简单的小说采集器时遇到的一些小问题。

 

第一,如何截取特定标签间的内容:

当然,用可(dou)爱(bi)的正则可以解决,在期间遇到一个有趣的地方,本来是直接匹配的标签对的正则内容,然后作为数组输出,

可惜越界包含了其他标签,事实证明了只要(.*?),保证不为空就行。但是在期间查了份资料,preg_quote将需要匹配的内容保持为转义状态,

也就是不用特地去加反斜杠之类的,但是鄙人尝试输出时,并未成功。

 

第二,如何处理爬取乱码:

在爬取过程中,可能会出现乱码,我们需要在实际运用过程中,考虑是否定义网页编码,或者定义输出编码,抑或是输出时进行转换,参考资料如下:

http://www.cnblogs.com/amboyna/archive/2008/04/21/1163116.html  php链接数据库编码问题

header(“Content-Type: text/html;charset=utf-8”);   网页头部加入可解决部分乱码

http://cn2.php.net/manual/en/function.mb-convert-encoding.php  php各种编码函数转换

。。。 这条我忘了0rz…

 

第三,如何处理数据量大带来的边界溢出:

其实这点问题我没解决,网上找了个方法好像很屌的样子,不过我这里没成功,即在php.ini里修改,

加上pcre.backtrack_limit=-1,然后preg_replace,preg_match_all,此类的边界问题可能会得到解决。

 

第四,如何清除文中空格,标点,以及标签:

标签清除可用strips_tag,简单粗暴。至于空格标签?试着preg_replace和str_replace,前者需要正则,后者直接替换的字符串。

在此期间需要注意,不可见及不能识别文字可通过编码,如urldecode进行具象化,然后将其替换再decode。如:http://zhidao.baidu.com/link?url=Ppil4x5ruvZ8mZX2w20jOJN-X_ZjwelCDVtjtGZ5ra_QD4Wq5ckIP4SOxAP3g7qDk9S-C3jcpSzXF9VHim-iZq

还有很重要的一点,不同编码的脚本,里面的规则如正则里的符号是不一样的,需要特别转换一下文件属性。PS:\s可代表空格tab一类。

 

第五,如何采集文章的中文并且随机取出关键词:

UTF-8:

用mb_substr($str, 0, 100, ‘utf-8’) 或者mb_strcut($str, 0, 120, ‘utf-8’); 第一个方法是截取100个字,不是100个字节,utf-8编码 第二个方法是100个字节 这两个方法都不会乱码的 先产生随机数字,在根据随机数字调用上面的方法,注意,加了utf-8可能会造成数据取不到,鄙人并未找出原因,猜测是取到的正好为过滤掉的乱码字符。

GBK:

chr(rand(161,215)).chr(rand(161,249)),utf8的是三位。

使用时请注意函数mb_strlen,mt_rand(用于随机)。

 

最后,附上两个带感的文献:

http://www.jb51.net/article/30024.htm  PHP压缩html网页代码

http://bbs.chinaunix.net/thread-3567100-1-1.html  php中如何截取中文字符串