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
收藏随意^^请保留教程地址.