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循环获取的话直接拼上后面的参数即可。当然,代码还有很多可以优化的地方。欢迎指正。
以上
PHP cURL抓取网上图片的更多相关文章
- php curl抓取远程页面内容的代码
使用php curl抓取远程页面内容的例子. 代码如下: <?php /** * php curl抓取远程网页内容 * edit by www.jbxue.com */ $curlPost = ...
- PHP使用CURL抓取网页
CURL是一个非常强大的开源库,支持很多协议,包括HTTP.FTP.TELNET等,我们使用它来发送HTTP请求.它给我 们带来的好处是可以通过灵活的选项设置不同的HTTP协议参数,并且支持HTTPS ...
- PHP CURL 抓取失败 自己调试
蛋疼的一下午,物理机win7旗舰版+APACHE2 ,CURL抓取一直成功. 虚拟机ubuntu+apache2一直抓取失败. 晚上,问个仁兄才知道,CURL可以调试: 参考这位兄台: 地址 curl ...
- shell用curl抓取页面乱码,参考一下2方面(转)
1.是用curl抓取的数据是用类似gzip压缩后的数据导致的乱码.乱码:curl www.1ting.com |more乱码:curl -H "Accept-Encoding: gzip&q ...
- 使用file_get_contents()和curl()抓取网络资源的效率对比
使用file_get_contents()和curl()抓取网络资源的效率对比 在将小程序用户头像合成海报的时候,用到了抓取用户头像对应的网络资源,那么抓取方式有很多,比如 file_get_cont ...
- 好用的 curl 抓取 页面的封装函数
由于经常使用php curl 抓取页面的内容,在此mark 平时自己封装的 curl函数,(其实 现在也开始用 Python 来爬了~ ^-^) /** * 封装curl方法 * @author Fr ...
- 通过CURL抓取页面中的图片路径并下载到本地
1.首页是图片处理页面downpic.php <?phpfunction getImage($url,$filename="") { if($url=="" ...
- curl抓取页面时遇到重定向的解决方法
用php的curl抓取网页遇到了问题,为阐述方便,将代码简化如下: <?php function curlGet($url) { $ch = curl_init(); curl_setopt($ ...
- PHP用curl抓取网站数据,仿造IP、伪造来源等,防屏蔽解决方案教程
1.伪造客户端IP地址,伪造访问referer:(一般情况下这就可以访问到数据了) curl_setopt($curl, CURLOPT_HTTPHEADER, ['X-FORWARDED-FOR:1 ...
随机推荐
- 内网渗透之Windows认证(二)
title: 内网渗透之Windows认证(二) categories: 内网渗透 id: 6 key: 域渗透基础 description: Windows认证协议 abbrlink: d6b7 d ...
- springboot的@ConditionalOnClass注解
大家好,我是"良工说技术". 今天给大家带来的是springboot中的@ConditionalOnClass注解的用法.上次的@ConditionalOnBean注解还记得吗? ...
- redis安装与连接
安装(centos7): yum install redis 启动与停止: systemctl start redis. service systemctl stop redis.service 修改 ...
- Reactive UI -- 反应式编程UI框架入门学习(二)
前文Reactive UI -- 反应式编程UI框架入门学习(一) 介绍了反应式编程的概念和跨平台ReactiveUI框架的简单应用. 本文通过一个简单的小应用更进一步学习ReactiveUI框架的 ...
- LuoguP3047 [USACO12FEB]附近的牛Nearby Cows(树形DP,容斥)
\[f[u][step] = \begin{cases} C[u] & step = 0 \\ (\sum{f[v][step - 1]}) - f[u][step - 2] \cdot (d ...
- java-方法创建与使用
1.方法: 1)封装一段特定的业务逻辑功能 2)方法尽可能的独立,一个方法只干一件事(低耦合) 3)方法可以被反复调用多次(高复用) 4)减少代码重复,有利于代码维护,有利于团队协作开发2.方法的定义 ...
- GitHub Pages 站点建设
1.简介 GitHub Pages 是通过 GitHub 托管和发布的公共网页,将纯文本转换为静态博客网站. 您可以使用 GitHub Pages 来展示一些开源项目.博客甚或分享您的简历,有内存限制 ...
- Shell第一章《变量》
shell前言 什么是shell shell-'壳' 命令解释器,一种应用程序 shell语言特点 SHELL语言是指UNIX操作系统的命令语言,同时又是该命令语言的解释程序的简称. Shell本身是 ...
- [NOIP2018提高组] 保卫王国 (树链剖分+动态DP)
题面 题目链接-Luogu 题目链接-Loj(要加Freopen) 题解 什么是动态DP? OneInDark:你不需要知道这么多,你只需要知道是利用了广义矩阵乘法就够了! 广义矩乘 广义矩阵乘法,简 ...
- 简单创建一个SpringCloud2021.0.3项目(四)
目录 1. 项目说明 1. 版本 2. 用到组件 3. 功能 2. 上三篇教程 3. 日志处理 1. 创建日志公共模块 2. Eureka引入日志模块 4. 到此的功能代码 5. 注册中心换成naco ...