本文实例讲述了PHP通过CURL实现定时任务的图片抓取功能。分享给大家供大家参考,具体如下:
下文为各位介绍一个PHP定时任务通过CURL图片的抓取例子,希望例子对大家帮助,基本思路就是通过一个URL连接,将所有图片的地址抓取下来,然后循环打开图片,利用文件操作函数下载下来,保存到本地,并且把图片的alt属性也抓取下来,最后将数据保存到自己数据库.
废话不多说,看程序就能明白了,其中,需要用到PHP定时任务和PHP的一个第三方插件simple_html_dom.php 的使用,参考simple_html_dom的下载和使用.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
<?php function getLink( $url ){ include_once ( 'simple_html_dom.php' ); $ch = curl_init(); curl_setopt( $ch ,CURLOPT_URL, $url ); curl_setopt( $ch ,CURLOPT_HEADER,false); curl_setopt( $ch ,CURLOPT_RETURNTRANSFER,1); $output = curl_exec( $ch ); curl_close( $ch ); $html = new simple_html_dom(); $html ->load( $output ); $links = array (); $arr = array (); $title = array (); foreach ( $html ->find( 'a' ) as $element ){ if (preg_match( '#^\/content_[0-9]+_1\.html$#i' , $element ->href)){ array_push ( $title , $element ->title); } } $links = array_values ( array_unique ( $links )); $title = array_values ( array_unique ( $title )); $arr [ 'links' ] = $links ; $arr [ 'title' ] = $title ; return $arr ; } function loadimg( $url , $dirname ){ include_once ( 'simple_html_dom.php' ); $ch = curl_init(); curl_setopt( $ch ,CURLOPT_URL, $url ); curl_setopt( $ch ,CURLOPT_HEADER,false); curl_setopt( $ch ,CURLOPT_RETURNTRANSFER,1); $output = curl_exec( $ch ); curl_close( $ch ); $html = new simple_html_dom(); $html ->load( $output ); $arr = array (); foreach ( $html ->find( 'img[w]' ) as $element ){ $image = $element ->src; } $data = file_get_contents ( $image ); $info = getimagesize ( $image ); //获取图片信息,大小,格式 switch ( $info [2]){ case 1: $str = 'gif' ; break ; case 2: $str = 'jpg' ; break ; case 3: $str = 'png' ; break ; default : continue ; break ; } if ( $info [1] < 10 || $info [0] < 10) continue ; //图片太小,不是有价值的图片,跳过本次循环 $filename = time().rand(1,999999). '.' . $str ; if (! is_dir ( $dirname )){ mkdir ( $dirname ,0777,true); } $fp = fopen ( $dirname . $filename , 'w' ); fwrite( $fp , $data ); fclose( $fp ); return $dirname . $filename ; } do { set_time_limit(0); ignore_user_abort(); $img = getLink( 'http://www.zzvips.com/qutu_1.html' ); $count = count ( $img [ 'links' ]); $arr = array (); for ( $i =0; $i < $count ; $i ++){ $arr []=loadimg( $img [ 'links' ][ $i ], 'images/' ); } $img [ 'url' ] = $arr ; echo '<br/>' ; $img [ 'title' ]; $res = array (); $len = count ( $img [ 'title' ]); //重新将数据组装成我们常用的二维数组,方便数据的数据库处理 for ( $i =0; $i < $len ; $i ++){ $res [ $i ][ 'title' ] = $img [ 'title' ][ $i ]; $res [ $i ][ 'url' ] = $img [ 'url' ][ $i ]; } foreach ( $res as $item ){ echo '<img src=' . $item [ "url" ]. '>' . $item [ "title" ]. '<br />' ; } $interval = 24*3600; sleep( $interval ); } while (true); ?> |
希望本文所述对大家PHP程序设计有所帮助。