PHP定时任务通过CURL图片的抓取例子
下文为各位介绍一个PHP定时任务通过CURL图片的抓取例子,希望例子对大家帮助。
基本思路就是通过一个URL连接,将所有图片的地址抓取下来,然后循环打开图片,利用文件操作函数下载下来,保存到本地,并且
把图片的alt属性也抓取下来,最后将数据保存到自己数据库。
废话不多说,看程序就能明白了,其中,需要用到PHP定时任务和PHP的一个第三方插件simple_html_dom.php,的使用,参考simple_html_dom的下载和使用
代码:
<?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($links, 'http://www.phprm.com' . $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.phprm.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);本文链接:http://www.phprm.com/code/82398.html
收藏随意^^请保留教程地址.