一、 什么是php采集程序?

二、 为什么要采集?

三、 采集些什么?

php缓存小偷PHP采集 抓取 Node.js

四、 如何采集?

五、 采集思路

六、 采集范例程序

七、 采集心得

什么是php采集程序?

php采集程序,也叫php小偷,紧张是用于自动搜集网络上web页里特定内容,用php措辞写的web程序,运行于支持php的平台上。
谈到\公众自动搜集\"大众,你可能遐想到百度goole,遐想到搜索引擎所做的事情。
php采集程序,正是做类似的事情。

为什么要采集?

互联网正以飞快的速率在发展,web数据每天以几何级数据量递增,面对这弘大的数据,作为一个网站管理员的你,该如何搜集自己所须要的信息呢?特殊对某个 或某几个同类网站,你须要它们的大量信息,来充足你的网站内容,难道就只能复制粘贴的过日子吗?一个网站管理员,你真的就得花大量韶光去搞原创内容,而与全体互联网信息量的发展速率脱节吗?这些问题的办理方法只有一个:采集。
如果有那么一个程序,你帮你的网站自动或半自动的采集你所须要的特定内容,即时更 新你网站的信息,是否是你梦寐以求的呢?这便是采集程序涌现的缘故原由所在。

采集些什么?

这要看你做的什么类型的网站了。
如果你做图片站,就采集图片;做音乐站,就采集mp3,做新闻站,就采集新闻等等。
统统根据你网站的内容架构须要而定。
确定你要采集的东西,才好写出相应的采集程序。

如何采集?

常日采集程序,都是对症下药的。
也便是须要有目标网站,搜集一些你须要的采集内容的网站,分别对其html代码进行剖析,找出规律性的东西,依据你要采集 的特定内容,写出php代码。
采集到你要的东西往后,你可以选择自己须要的存放办法。
比如直接天生html页面,或是放进数据库,作进一步处理或是存放成 特定的形式,以备后用。

采集思路

采集程序的思路很大略大体可以分为以下几个步骤:

1. 获取远程文件源代码(file_get_contents或用fopen).

2.剖析代码得到自己想要的内容(这里用正则匹配,一样平常是得到分页)。

3.跟根得到的内容进行下载入库等操作。

在这里第二步有可能要重复的操作好几次,比如说要先剖析一下分页地址,在剖析一下内页的内容才能取得我们想要的东西。

[html]

1. <?php

2. /获取远程文件源代码常用三种方法/

3. /方法一、 fopen(),stream_context_create()方法/

4. $opts = array(

5. 'http'=>array(

6. 'method'=>\"大众GET\公众,

7. 'header'=>\"大众Accept-language: en\r\n\公众 .

8. \公众Cookie: foo=bar\r\n\公众

9. )

10. );

11. $context = stream_context_create($opts);

12. $fp = fopen('http://www.example.com', 'r', false, $context);

13. fpassthru($fp);

14. fclose($fp); /方法二、 socket/

15. function get_content_by_socket($url, $host){

16. $fp = fsockopen($host, 80) or die(\"大众Open \"大众. $url .\"大众 failed\公众);

17. $header = \公众GET /\"大众.$url .\公众 HTTP/1.1\r\n\公众;

18. $header .= \"大众Accept: /\r\n\公众;

19. $header .= \公众Accept-Language: zh-cn\r\n\公众;

20. $header .= \"大众Accept-Encoding: gzip, deflate\r\n\公众;

21. $header .= \公众User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; InfoPath.1; .NET CLR 2.0.50727)\r\n\"大众;

22. $header .= \公众Host: \"大众. $host .\"大众\r\n\公众;

23. $header .= \公众Connection: Keep-Alive\r\n\"大众;

24. //$header .= \"大众Cookie: cnzz02=2; rtime=1; ltime=1148456424859; cnzz_eid=56601755-\r\n\r\n\公众;

25. $header .= \公众Connection: Close\r\n\r\n\公众;

26. fwrite($fp, $header);

27. while (!feof($fp)) {

28. $contents .= fgets($fp, 8192);

29. }

30. fclose($fp);

31. return $contents;

32. }

33.

34. /方法三、file_get_contents (),stream_context_create() 方法三/

35. $opts = array(

36. 'http'=>array(

37. 'method'=>\"大众GET\公众,

38. 'header'=>\公众Content-Type: text/html; charset=utf-8\"大众

39. )

40. );

41. $context = stream_context_create($opts);

42. $file = file_get_contents('http://www.sohu.com/', false, $context);

43.

44. /方法四、 PHP的cURL http://www.chinaz.com/program/2010/0119/104346.shtml/

45. $ch = curl_init();

46. // 2. 设置选项,包括URL

47. curl_setopt($ch, CURLOPT_URL, \公众http://www.sohu.com\公众);

48. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

49. curl_setopt($ch, CURLOPT_HEADER, 0);

50. curl_setopt($ch,CURLOPT_HTTPHEADER,array (\"大众Content-Type: text/xml; charset=utf-8\"大众,\公众Expect: 100-continue\"大众));

51. // 3. 实行并获取HTML文档内容

52. $output = curl_exec($ch);

53. var_dump($output);

54. // 4. 开释curl句柄

55. curl_close($ch);

56.

57. /把稳

58. 1.利用file_get_contents和fopen必须空间开启allow_url_fopen。
方法:编辑php.ini,设置 allow_url_fopen = On,allow_url_fopen关闭时fopen和file_get_contents都不能打开远程文件。

59. 2. 利用curl必须空间开启curl。
方法:windows下修正php.ini,将extension=php_curl.dll前面的分号去掉,而且需 要拷贝ssleay32.dll和libeay32.dll到C:/WINDOWS/system32下;Linux下要安装curl扩展。

60. /

61. ?>

采集范例程序

[html]

1. /一个图片下载函数/

2. function getimg($url,$filename){

3. /判断图片的url是否为空,如果为空停滞函数/

4. if($url==\"大众\"大众){

5. return false;

6. }

7. /取得图片的扩展名,存入变量$ext中/

8. $ext=strrchr($url,\公众.\"大众);

9. /判断是否是合法的图片文件/

10. if($ext!=\"大众.gif\公众 && $ext!=\公众.jpg\公众){

11. return false;

12. }

13. /读取图片/

14. $img=file_get_contents($url);

15. /打开指定的文件/

16. $fp=@fopen($filename.$ext,\公众a\"大众);

17. /写入图片到指示的文件/

18. fwrite($fp,$img);

19. /关闭文件/

20. fclose($fp);

21. /返回图片的新文件名/

22. return $filename.$ext;

23. }

采集图片php程序

[html]

1. 复制代码

2. <?php

3. /

4. 采集图片php程序

5.

6. Copyright(c) 2008 by 小超(ccxxcc) All rights reserved

7.

8. To contact the author write to {@link mailto:ucitmc@163.com}

9.

10. @author ccxxcc

11. @version $Id: {filename},v 1.0 {time} $

12. @package system

13. /

14.

15. set_time_limit(0);

16. /

17. 写文件

18. @param string $file 文件路径

19. @param string $str 写入内容

20. @param char $mode 写入模式

21. /

22. function wfile($file,$str,$mode='w')

23. {

24. $oldmask = @umask(0);

25. $fp = @fopen($file,$mode);

26. @flock($fp, 3);

27. if(!$fp)

28. {

29. Return false;

30. }

31. else

32. {

33. @fwrite($fp,$str);

34. @fclose($fp);

35. @umask($oldmask);

36. Return true;

37. }

38. }

39.

40. function savetofile($path_get,$path_save)

41. {

42. @$hdl_read = fopen($path_get,'rb');

43. if($hdl_read == false)

44. {

45. echo(\"大众<span style='color:red'>$path_get can not get</span>\公众);

46. Return ;

47. }

48. if($hdl_read)

49. {

50. @$hdl_write = fopen($path_save,'wb');

51. if($hdl_write)

52. {

53. while(!feof($hdl_read))

54. {

55. fwrite($hdl_write,fread($hdl_read,8192));

56. }

57. fclose($hdl_write);

58. fclose($hdl_read);

59. return 1;

60. }

61. else

62. return 0;

63. }

64. else

65. return -1;

66. }

67.

68. function getExt($path)

69. {

70. $path = pathinfo($path);

71. return strtolower($path['extension']);

72. }

73.

74. /

75. 按指定路径天生目录

76.

77. @param string $path 路径

78. /

79. function mkDirs($path)

80. {

81. $adir = explode('/',$path);

82. $dirlist = '';

83. $rootdir = array_shift($adir);

84. if(($rootdir!='.'||$rootdir!='..')&&!file_exists($rootdir))

85. {

86. @mkdir($rootdir);

87. }

88. foreach($adir as $key=>$val)

89. {

90. if($val!='.'&&$val!='..')

91. {

92. $dirlist .= \"大众/\"大众.$val;

93. $dirpath = $rootdir.$dirlist;

94. if(!file_exists($dirpath))

95. {

96. @mkdir($dirpath);

97. @chmod($dirpath,0777);

98. }

99. }

100. }

101. }

102.

103. /

104. 从文本中取得一维数组

105.

106. @param string $file_path 文本路径

107. /

108. function getFileListData($file_path)

109. {

110. $arr = @file($file_path);

111. $data = array();

112. if(is_array($arr) && !empty($arr))

113. {

114. foreach($arr as $val)

115. {

116. $item = trim($val);

117. if(!empty($item))

118. {

119. $data[] = $item;

120. }

121. }

122. }

123. Return $data;

124. }

125.

126. //采集开始

127.

128. //传入自己的须要采集的图片url列表文本文件 每个图片url写一行

129. $url_file = isset($_GET['file'])&&!empty($_GET['file'])?$_GET['file']:null;

130. $txt_url = \公众txt/\"大众.$url_file;

131.

132. $urls = array_unique(getFileListData($txt_url));

133. if(empty($urls))

134. {

135. echo('<div style=\"大众color:red\"大众>无链接地址</div>');

136. die();

137. }

138. $save_url = \公众images/\"大众.date(\公众y_m_d\"大众,time()).\公众/\"大众;

139. mkDirs($save_url); //按日期建立文件夹

140. $i = 1;

141. if(is_array($urls)&&count($urls))

142. {

143. foreach($urls as $val)

144. {

145. savetofile($val,$save_url.date(\公众His\"大众,time()).\公众_\"大众.$i.\"大众.\"大众.getExt($val));

146. echo($i.\"大众.\"大众.getExt($val).\"大众 got\n\"大众);

147. $i++;

148. }

149. }

150.

151. echo('<div style=\"大众color:green\公众>finish</div>');

152.

153. ?>

采集心得

共享一下个人的采集心德:

1.不采那些作防盗链了的站,实在可以作假来路但是这样的站采集本钱太高

2.采集只管即便快的站,最好在本地进行采集

3.采集时有很多时候可以先把一部分数据存入数据库,等往后进行下一步的处理。

4.采集的时候一定要作好出错处理,我一样平常都是如果采集三次没有成功就跳过。
以前常常就由于一条内容不能采就卡在那里一贯的采。

5.入库前一定要作好判断,检讨内容的合法,过滤不必要的字符串。

后记:对付大部分转行的人来说,找机会把自己的根本知识补齐,边事情边补根本知识,至心很主要。

\"大众我们相信大家都可以成为一个IT大神,现在开始,选择一条阳光大道,助你入门,学习的路上不再迷茫。
这里是北京尚学堂,初学者转行到IT行业的聚拢地。
\"大众