PHP抓取网页图片
<?php
set_time_limit(0);//抓取不受时间限制
if($_POST['Submit']=="开始抓取"){
$URL=$_POST['link'];
get_pic($URL);
} function get_pic($pic_url) {
//获取图片二进制流
$data=CurlGet($pic_url);
//利用正则表达式得到图片链接
$pattern_src1 = '/<img.*?src\=\"(.*\.jpg).*?>/';//只匹配jpg格式的图片
$pattern_src2 = '/<img.*?src\=\"(.*\.bmp).*?>/';//只匹配bmp格式的图片
$pattern_src3 = '/<img.*?src\=\"(.*\.png).*?>/';//只匹配png格式的图片
$pattern_src4 = '/<img.*?src\=\"(.*\.gif).*?>/';//只匹配gif格式的图片
$num1 = preg_match_all($pattern_src1, $data, $match_src1);
$num2 = preg_match_all($pattern_src2, $data, $match_src2);
$num3 = preg_match_all($pattern_src3, $data, $match_src3);
$num4 = preg_match_all($pattern_src4, $data, $match_src4);
$arr_src1=$match_src1[1];//获得图片数组
$arr_src2=$match_src2[1];
$arr_src3=$match_src3[1];
$arr_src4=$match_src4[1];
echo '======抓取开始======<br />';
get_name1($arr_src1);
get_name1($arr_src2);
get_name1($arr_src3);
get_name1($arr_src4);
get_name2($arr_src1);
get_name2($arr_src2);
get_name2($arr_src3);
get_name2($arr_src4); echo '======抓取结束=======<br />';
return 0;
} function get_name1($pic_arr){
//图片编号和类型
$pattern_type = '/.*\/(.*?)$/';
foreach($pic_arr as $pic_item){//循环取出每幅图的地址
$num = preg_match_all($pattern_type,$pic_item,$match_type);
//以流的形式保存图片
$write_fd = @fopen($match_type[1][0],"wb");
echo "图片网址:<a href='".$pic_item."' target='_blank'>".$pic_item."</a><br />";
@fwrite($write_fd, CurlGet($pic_item));
@fclose($write_fd);
}
return 0;
} function get_name2($pic_arr){
//图片编号和类型
$pattern_type = '/.*\/(.*?)$/';
foreach($pic_arr as $pic_item){//循环取出每幅图的地址
$num = preg_match_all($pattern_type,$pic_item,$match_type);
//以流的形式保存图片
$write_fd = @fopen($match_type[1][0],"wb");
echo "图片网址:<a href='".$_POST['link'].$pic_item."' target='_blank'>".$_POST['link'].$pic_item."</a><br />";
@fwrite($write_fd, CurlGet($_POST['link'].$pic_item));
@fclose($write_fd);
}
return 0;
} //抓取网页内容
function CurlGet($url){
$url=str_replace('&','&',$url);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false); //curl_setopt($curl, CURLOPT_REFERER,$url);
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; SeaPort/1.2; Windows NT 5.1; SV1; InfoPath.2)");
curl_setopt($curl, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($curl, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 0);
$values = curl_exec($curl);
curl_close($curl);
return $values;
}
?>
HTML代码
<html>
<head>
<title>网页图片抓取</title>
</head>
<body>
<form action="" method="post">
要抓取图片的网址:<input type="text" id="link" name="link" value="请在这里输入要抓取图片的网址" OnClick="this.value=''" size="100" /><br />
<input type="submit" id="Submit" name="Submit" value="开始抓取" />
</form>
</body>
</html>
PHP抓取网页图片的更多相关文章
- Python3简单爬虫抓取网页图片
现在网上有很多python2写的爬虫抓取网页图片的实例,但不适用新手(新手都使用python3环境,不兼容python2), 所以我用Python3的语法写了一个简单抓取网页图片的实例,希望能够帮助到 ...
- 抓取网页图片的脚本(javascript)
抓取网页图片的脚本(javascript) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24172223 脚本内容 (没有换行) ...
- C语言调用curl库抓取网页图片
思路是先用curl抓取网页源码,然后以关键字寻找出图片网址. #include <stdio.h> #include <stdlib.h> #include <str ...
- C语言调用curl库抓取网页图片(转)
思路是先用curl抓取网页源码,然后以关键字寻找出图片网址. 范例: #include <stdio.h> #include <stdlib.h> #include < ...
- python抓取网页图片
本人比较喜欢海贼王漫画,所以特意选择了网站http://www.mmonly.cc/ktmh/hzw/list_34_2.html来抓取海贼王的图片. 因为是刚刚学习python,代码写的不好,不要喷 ...
- Python -- 网络编程 -- 抓取网页图片 -- 豆瓣妹子
首先分析页面URL,形如http://dbmeizi.com/category/[1-14]?p=[0-476] 图片种类对应编号: 1:'性感', 2:'有沟', 3:'美腿', 4:'小露点', ...
- Python -- 网络编程 -- 抓取网页图片 -- 图虫网
字符串(str)编码成字节码(bytes),字节码解码为字符串 获取当前环境编码:sys.stdin.encoding url编码urllib.parse.quote() url解码urllib.pa ...
- 从urllib和urllib2基础到一个简单抓取网页图片的小爬虫
urllib最常用的两大功能(个人理解urllib用于辅助urllib2) 1.urllib.urlopen() 2. urllib.urlencode() #适当的编码,可用于后面的post提交 ...
- java 抓取网页图片
import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.Out ...
随机推荐
- Java 优先队列
Java PriorityQueue 优先队列是一种重要的数据结构,其利用的是小/大顶堆来实现的. Java中提供了PriorityQueue,PriorityQueue是基于小顶堆实现的无界优先队列 ...
- MySQL插入10万数据时间(结论:最快14.967s,每秒插入6681条)
记录我的一次MySQL操作Demo: 存储过程: DROP PROCEDURE IF EXISTS my_insert; CREATE PROCEDURE my_insert() BEGIN ; lo ...
- Java学习记录:文件的输入输出流
Java中的输入.输出流中可以用于文件的读写,拷贝. 由于文件都是由字节组成的,可以将文件中的内容以字节的方式读取出来. 输入流还可以直接转换为图片来使用.其实ImageIcon提供了方法可以直接打开 ...
- 猎八哥FLY——将数据库中的某一表中的某一列或者多列添加到另一张表的某一列中
成绩表的字段:xueshenghao,yu,shu,yy均为int类型.新标与成绩表字段相同,不同的是成绩表中拥有数据,而新表中没有(是一张空表,一条数据都没有).需求:将成绩表中每一个人的yu,sh ...
- 结对编程四则运算gui
码市地址:https://git.coding.net/linzhao/sizeyunsuangui.git 林 钊 -- 201421123105 吴世荣 -- 201421123119 王坤彬 - ...
- 团队作业8——第二次项目冲刺(Beta阶段)博客汇总
一.冲刺计划安排 http://www.cnblogs.com/teamworkers/p/6875742.html 二.七天冲刺汇总 http://www.cnblogs.com/teamworke ...
- 关于在git添加远程地址的过程中遇到的问题
问题产生的过程 我根据菜鸟教程的步骤,做了如下操作: 1.打开安装文件夹中的git-bash程序 2.设置username和email 3.添加远程地址 结果如下: 之后通过百度知道要先git ini ...
- 201521123003《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 1.List中指定元素的删除(题目4-1) 1.1 实验总结 我们利用Sca ...
- 201521123102 《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 1.List中指定元素的删除(题目4-1) 1.1 实验总结 在实验中,Sc ...
- 201521123081《Java程序设计》 第6周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...