PHP定时任务通过CURL图片的抓取例子

下文为各位介绍一个PHP定时任务通过CURL图片的抓取例子,希望例子对大家帮助,基本思路就是通过一个URL连接,将所有图片的地址抓取下来,然后循环打开图片,利用文件操作函数下载下来,保存到本地,并且把图片的alt属性也抓取下来,最后将数据保存到自己数据库.

废话不多说,看程序就能明白了,其中,需要用到PHP定时任务和PHP的一个第三方插件simple_html_dom.php 的使用,参考simple_html_dom的下载和使用.

  1. <?php
  2. function getLink($url){
  3. <a href="/tags.php/include/" target="_blank">include</a>_once('simple_html_dom.php');
  4. $ch = curl_init();
  5. <a href="/tags.php/curl_setopt/" target="_blank">curl_setopt</a>($ch,CURLOPT_URL,$url);
  6. curl_setopt($ch,CURLOPT_HEADER,false);
  7. curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  8. $output = curl_exec($ch);
  9. curl_close($ch);
  10. $html = new simple_html_dom();
  11. $html->load($output);
  12. $links = array();
  13. $arr = array();
  14. $title = array();
  15. <a href="/tags.php/foreach/" target="_blank">foreach</a>($html->find('a') as $element){
  16. if( <a href="/tags.php/preg_match/" target="_blank">preg_match</a>('#^\/content_[0-9]+_1\.html$#i',$element->href)){
  17. array_push($links,'http://www.phpfensi.com'.$element->href);
  18. array_push($title,$element->title);
  19. }
  20. }
  21. $links = array_values(array_unique($links));
  22. $title = array_values(array_unique($title));
  23. $arr['links'] = $links;
  24. $arr['title'] = $title;
  25. return $arr;
  26. }
  27. function loadimg($url,$dirname){
  28. include_once('simple_html_dom.php');
  29. $ch = curl_init();
  30. curl_setopt($ch,CURLOPT_URL,$url);
  31. curl_setopt($ch,CURLOPT_HEADER,false);
  32. curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  33. $output = curl_exec($ch);
  34. curl_close($ch);
  35. $html = new simple_html_dom();
  36. $html->load($output);
  37. $arr = array();
  38. foreach($html->find('img[w]') as $element){
  39. $image = $element->src;
  40. }
  41. $data = file_get_contents($image);
  42. $info = getimagesize($image);//获取图片信息,大小,格式
  43. switch($info[2]){
  44. case 1:
  45. $str = 'gif';
  46. break;
  47. case 2:
  48. $str = 'jpg';
  49. break;
  50. case 3:
  51. $str = 'png';
  52. break;
  53. default:
  54. continue;
  55. break;
  56. }
  57. if($info[1] < 10 || $info[0] < 10) continue;//图片太小,不是有价值的图片,跳过本次循环
  58. $filename = time().rand(1,999999).'.'.$str;
  59. if(!is_dir($dirname)){
  60. mkdir($dirname,0777,true);
  61. }
  62. $fp = <a href="/tags.php/fopen/" target="_blank">fopen</a>($dirname.$filename,'w');
  63. fwrite($fp,$data);
  64. fclose($fp);
  65. return $dirname.$filename;
  66. }
  67. do{
  68. set_time_limit(0);
  69. ignore_user_abort();
  70. $img = getLink('http://www.phpfensi.com /qutu_1.html');
  71. $count = count($img['links']);
  72. $arr = array();
  73. for($i=0;$i<$count;$i++){
  74. $arr[]=loadimg($img['links'][$i],'images/');
  75. }
  76. $img['url'] = $arr;
  77. echo '<br/>';
  78. $img['title'];
  79. $res = array();
  80. $len = count($img['title']);
  81. //重新将数据组装成我们常用的二维数组,方便数据的数据库处理
  82. for($i=0;$i<$len;$i++){
  83. $res[$i]['title'] = $img['title'][$i];
  84. $res[$i]['url'] = $img['url'][$i];
  85. }
  86. foreach($res as $item){
  87. echo '<img src='.$item["url"].'>'.$item["title"].'<br />';
  88. }
  89. $interval = 24*3600;
  90. sleep($interval);
  91. }while(true);
  92. ?>