巧妙运用PHP函数实现采集器

开发 后端
文章这里巧妙利用PHP函数中的file_get_contents()和preg_match_all()实现采集器,希望对大家有帮助。

PHP经过长时间的发展,很多用户都很了解PHP了,我们现在可以利用PHP函数实现采集器程序。何为采集器,通常又叫小偷程序,主要是用来抓取别人网页内容的。关于采集器的制作,其实并不难,就是远程打开要采集的网页,然后用正则表达式将需要的内容匹配出来,只要稍微有点正则表达式的基础,都能做出自己的采集器来的。

#T#前几天做了个小说连载的程序,因为怕更新麻烦,顺带就写了个采集器,采集八路中文网的,功能比较简单,不能自定义规则,不过大概思路都在里面了,自定义规则可以自己来扩展。用php来做采集器主要用到两个PHP函数:file_get_contents()和preg_match_all(),前一个是远程读取网页内容的,不过只在php5以上的版本才能用,后一个是正则函数,用来提取需要的内容的。面就一步一步来讲功能实现。因为是采集小说,所以首先要将书名、作者、类型这三个提取出来,别的信息可根据需要提取。

这样还不够,还需要一个切取PHP函数:

  1. function cut($string,$start,$end){     
  2. $message = explode($start,$string);     
  3. $message = explode($end,$message[1]); return $message[0];}其中$string为要被切取的内容,$start为开始的地方,$end为结束的地方。取出分类号:     
  4.  
  5. $start = "Html/Book/";     
  6. $end    
  7. "List.shtm";     
  8. $typeid = cut($typeid[0][0],$start,$end);     
  9. $typeid = explode("/",$typeid);[/php]     
  10.  
  11. 这样,$typeid[0]就是我们要找的分类号了。方法如下:     
  12.  
  13. $ustart = "\"";     
  14. $uend    
  15. "\"";     
  16. //t表示title的缩写     
  17. $tstart = ">";     
  18. $tend    
  19. "<";     
  20. //取路径,例如:123.shtm,2342.shtm,233.shtm     
  21. preg_match_all("/\"[0-9]{1,}\.(shtm)\"/is",$chapterurl,$url);     
  22. //取标题,例如:***章 九世善人     
  23. preg_match_all("/<a href=\"[0-9]{1,}\.shtm\"(.*?)\<\/a>/is",$file,$title);     
  24. $countcountcount = count($url[0]);     
  25. for($i=0;$i<=$count;$i++)     
  26. {     
  27. $u = cut($url[0][$i],$ustart,$uend);     
  28. $t = cut($title[0][$i],$tstart,$tend);     
  29. $array[$u] = $t;     
  30. }    

$array数组就是所有的章节地址了,到这里,采集器就完成一半了,剩下的就是循环打开每个章节地址,读取,然后将内容匹配出来。这个比较简单,这里就不详细叙述了。好了,今天就先写到这吧,***次写这么长的文章,语言组织方面难免有问题,还请大家多包涵!

责任编辑:田树 来源: it168
相关推荐

2009-12-10 10:18:05

PHP读取文件

2009-11-25 14:36:39

PHP函数usort(

2011-03-17 17:30:06

NginxiptablesDDOS

2021-12-09 15:30:12

采集器开源-iLogtail

2009-12-07 11:31:51

PHP分类列表

2009-12-02 16:38:26

PHP发送邮件函数

2009-12-03 20:15:02

PHP rmdir()

2009-12-08 16:19:21

PHP函数pack

2009-12-04 09:41:25

PHP函数flush(

2009-11-24 11:00:05

PHP函数Date()

2009-11-13 11:18:22

ADO.NET修改数据

2011-02-18 16:07:46

微软 SQL Serv

2012-01-04 11:09:10

Java采集器

2019-01-24 15:30:09

TensorFlow机器学习

2009-11-24 18:08:39

PHP函数array_

2009-12-10 15:33:02

PHP函数fgets

2009-12-04 18:05:05

PHP stristr

2009-12-01 13:29:04

PHP ini_set

2009-11-27 16:35:01

php函数mkdir

2010-08-31 13:56:38

PHP5多线程
点赞
收藏

51CTO技术栈公众号