欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

一个php文本采集类

程序员文章站 2022-06-16 17:25:48
...
  1. $C = new Collection();
  2. $C->url = 'http://bbs.it-home.org/subject_search?cat=1001&search_text=%E5%B9%B4%E8%BD%BB%E4%BA%BA';
  3. $C->startFlag = '

    ';
  4. $C->endFlag = '
    ';
  5. $C->init();
  6. $C->regExp = "|

    (.*)

    |Uis";
  7. $C->parse();
  8. print_rr($C->result);
  9. */
复制代码

php文本采集类文件:

  1. /**

  2. 模块名:php文本采集类
  3. **/
  4. class Collection{
  5. //入口 公有
  6. var $url; //欲分析的url地址
  7. var $content; //读取到的内容
  8. var $regExp; //要获取部分的正则表达式
  9. var $codeFrom; //原文的编码
  10. var $codeTo; //欲转换的编码
  11. var $timeout; //采集等待的时间
  12. var $startFlag; //文章开始采集的标志 默认为0 在进行采集条目时,只对$startFlag 和 $endFlag之间的文字块进行搜索和采集。

  13. var $endFlag; //文章结束采集的标志 默认为文章末尾 在进行采集条目时,只对$startFlag 和 $endFlag之间的文字块进行搜索和采集。
  14. var $block; //$startFlag 和 $endFlag之间的文字块
  15. //出口 私有
  16. var $result; //输出结果
  17. //初始化收集器

  18. function init(){
  19. if(empty($url))
  20. $this->getFile();
  21. $this->convertEncoding();
  22. }
  23. //采集所需内容
  24. function parse(){
  25. $this->getBlock();
  26. preg_match_all($this->regExp, $this->block ,$this->result,PREG_SET_ORDER);
  27. return $this->block;
  28. }
  29. //错误处理
  30. function error($msg){
  31. echo $msg;
  32. }
  33. //读取远程网页 如果成功,传回文件;如果失败传回false
  34. function getFile(){
  35. $datalines = @file($this->url);
  36. if(!$datalines){
  37. $this->error("can't read the url:".$this->url);
  38. return false;
  39. } else {
  40. $importdata = implode('', $datalines);
  41. $importdata = str_replace(array ("\r\n", "\r"), "\n", $importdata);
  42. $this->content = $importdata;
  43. }
  44. }
  45. //获取所需要的文字块
  46. function getBlock(){
  47. if(!empty($this->startFlag))
  48. $this->block = substr($this->content,strpos($this->content,$this->startFlag));
  49. if(!empty($this->endFlag))
  50. $this->block = substr($this->block,0,strpos($this->block,$this->endFlag));
  51. }
  52. //内容编码的转换
  53. function convertEncoding(){
  54. if(!empty($this->codeTo))
  55. $this->codeFrom = mb_detect_encoding($this->content);
  56. //如果给定转换方案,才执行转换。
  57. if(!empty($this->codeTo))
  58. $this->content = mb_convert_encoding($this->content,$this->codeTo,$this->codeFrom) or $this->error("can't convert Encoding");
  59. }
  60. }//end of class
  61. ?>
复制代码