好吧,本屌承认又在糊弄朋友们了,这个没啥特别的,就是记录下一次帮人弄个简单的小说采集器时遇到的一些小问题。
第一,如何截取特定标签间的内容:
当然,用可(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中如何截取中文字符串