PHP cURL抓取网上图片

  cURL的底层是由一个命令行工具实现的,用于获取远程文件或传输文件,更多的情况是用来模拟get/post表单提交。也可以用户文件上传,爬取文件,支持FTP/FTPS,HTTP/HTTPS等协议,通俗来讲,这些类型的服务器,cURL都可以抓取。

  今天尝试了一下用cURL抓取无聊网网上的图片。上代码。

 1 <?php
 2 $url = ‘http://wuliaoo.com/tuhua/‘;
 3 $ch = curl_init();
 4
 5 curl_setopt($ch,CURLOPT_URL,$url);
 6 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); // 设置curl_exec()获取的信息以字符流形式返回
 7 curl_setopt($ch,CURLOPT_SSLVERSION,CURL_SSLVERSION_TLSv1); // 设置CURL选项为TLS
 8
 9 $data = curl_exec($ch);
10 $info = curl_getinfo($ch);
11 curl_close($ch);
12 // var_dump(htmlentities($data)); 打印获取的网页源码,但是不加htmlentities函数的话会将页面输出
13 preg_match_all(‘/<img[^>]*src=(\‘|\")(.*?)\\1[^>]*>/i‘,$data,$array); // 匹配正则,所有的img标签
14
15 $path = ‘./aaimage/‘; // 目录提前建好
16 foreach ($array[2] as $k => $v) {
17     if(fopen($array[2][$k],‘r‘)){
18         ob_clean(); // 清空PHP缓存区的内容。这一步其实不确定需不需要,但是为了保险,我还是加上了。
19         $ch = curl_init();
20         curl_setopt($ch, CURLOPT_URL, $v);
21         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
22         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
23         $file = curl_exec($ch);
24         curl_close($ch);
25         $filename = pathinfo($v, PATHINFO_BASENAME); // 获取文件名和后缀
26
27         $resource = fopen($path . $filename, ‘a‘);
28         fwrite($resource, $file);
29         fclose($resource);
30     }
31
32 }

其实我们可以把这段代码封装好。而且还可以把获取网页内容换成file_get_contents()的形式。同样可以获取网页的内容。

function down_pic($url = null){
    $data = file_get_contents($url);
    preg_match_all(‘/<img[^>]*src=(\‘|\")(.*?)\\1[^>]*>/i‘,$data,$array);

    $path = ‘./aaimage/‘;
    foreach ($array[2] as $k => $v) {
        if(fopen($array[2][$k],‘r‘)){

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $v);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
            $file = curl_exec($ch);
            curl_close($ch);
            $filename = pathinfo($v, PATHINFO_BASENAME);

            $resource = fopen($path . $filename, ‘a‘);
            fwrite($resource, $file);
            fclose($resource);
        }

    }
}

// 这是获取该网站5页的图片
for($i=1;$i<=5;$i++){
    $url = ‘http://wuliaoo.com/tuhua/page/‘.$i;
    down_pic($url);
}

获取页数各个网站不是固定。

这是第一页。page不带参数或者带上参数都可以跳转到这一页。

这是第二页的URL

所以用for循环获取的话直接拼上后面的参数即可。当然,代码还有很多可以优化的地方。欢迎指正。

以上

原文地址:https://www.cnblogs.com/chenrunxuan/p/8595304.html

时间: 2024-07-29 10:34:12

PHP cURL抓取网上图片的相关文章

好用的 curl 抓取 页面的封装函数

由于经常使用php curl 抓取页面的内容,在此mark 平时自己封装的 curl函数,(其实 现在也开始用 Python 来爬了~ ^-^) /** * 封装curl方法 * @author FredGui * @param string $url 必选 接口地址 * @param string $post 可选 如果是post访问填写post参数数组 * @param int $timeout 可选 超时时间 * @param string $cookie * @param int $de

CURL抓取网页内容

<?php $curl = curl_init();//初始化一个cURL对象 $url = "http://cart.jd.com/cart/cart.html?backurl=http://item.jd.com/176166.html&rid=0.9533184533 938766"; $header = array(); $header[] = 'User-Agent: 5.0 (iPhone; U; CPU iPhone OS 4_3 like Mac OS X

curl抓取页面时遇到重定向的解决方法

用php的curl抓取网页遇到了问题,为阐述方便,将代码简化如下: [php] view plaincopy <?php function curlGet($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, true); return curl_exec($ch);

用curl抓取网站数据,仿造IP、防屏蔽终极强悍解决方式

最近在做一些抓取其它网站数据的工作,当然别人不会乖乖免费给你抓数据的,有各种防抓取的方法.不过道高一尺,魔高一丈,通过研究都是有漏洞可以钻的.下面的例子都是用PHP写的,不会用PHP来curl的孩纸先学习一下这块再往下看,可以参考这篇文章:http://blog.csdn.net/linglongwunv/article/details/8020845 下面言归正传,先说一种常见的方式,伪造来源IP,这也是好多刷票朋友常用的方法: 1.简单一点的可以在header伪造X-FORWARDED-FO

PHP CURL抓取网页 simple_html_dom类

抓取网页数据后 数据录入到discuz中 <?php include('simple_html_dom.php'); function urlText(){ $url = 'http://www.kxt.com/data/3.html';//外汇 $ch=curl_init(); $timeout = 1; // echo CURLOPT_URL; // CURLOPT_URL: 这是你想用PHP取回的URL地址.你也可以在用curl_init()函数初始化时设置这个选项 curl_setopt

shell命令curl抓取网页内容-下载xls文件

通过curl命令抓取网页内容,关键点如下: 1.curl要模拟浏览器,最好是有个代理,因为很多站点都会搞个反爬虫什么的. 2.我的需求很简单,就是在国家外汇管理局上下载各种货币对美元的汇率. http://www.safe.gov.cn/wps/portal/sy/tjsj_dmzsl 3.主要命令:curl,grep,awk,xls2txt,msql(LOAD DATA ). curl:提取url xls2txt:shell下的xls操作命令 xls2txt-0.14.tar.gz 下载地址:

curl抓取

<?phpheader("content-type:text/html;charset=utf8");set_time_limit(0); //=================================工具函数=====================function real_url($current_url, $base_url='') {    $data = parse_url($current_url);    if ( ! isset($data['host'

用 python 或者curl 抓取web数据时

今天接到一个web的同事求助,他本来通过java抓取一个web页面的内容,但是发现抓取得都是些乱码,然后又尝试用 python的urllib来获取,依然是乱码,不过在浏览器访问却是正常的json格式数据. 首先,我先用curl获取了下这个web,发现确实是一些不可见的字符,把它保存下来. 再使用浏览器获取下这个web内容,对比下发现字节数是不一样的,说明不是编码显示的问题. 这个时候我考虑可能是http协议参数的问题,于是使用wireshark捕获用浏览器的请求,用tcpdump捕获了curl的

CURL抓取页面

cURL的基本原理 curl是利用URL语法在命令行方式下工作的开源文件传输工具,他能够从互联网上获得各种各样的网络资源.简单来说,curl就是抓取页面的升级版. 1 2 3 4 5 6 7 8 9 10 11 12 <?php  //1.初始化,创建一个新cURL资源  $ch = curl_init(); //2.设置URL和相应的选项  curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com/");   curl_setopt