Curl盗取京东图片
2013-11-25 19:24
323 查看
前段时间尝试做购物商城系统上时候需要用到图片材料,之前有听老师说过可以通过curl获取网站图片,但是没认真 自己用到了才认真去学习。话了一天时间研究京东前端源代码,ok,经研究发现京东图片服务器做的太有规律了,不想拿都不行。首先也许有人会说,不就图片吗,鼠标右击另存为不就行了,至于吗?但是朋友:我十分钟能下载几千张图片,你右击试试。还有人可能会说,这个简单,找个小偷采集器不就行了。是的,小偷采集器是可以拿到图片,但是上平的名称和价格呢?一个购物网站不可能只要图片而已吧。
废话不多说,下面我来盗取一下京东。
实例化运行试试:
注意:url必须是这种数字递增格式的,不然不能对全部页面进行遍历。
运行php文件,然后等京东的图片自己跑过来(注意更改一下php.ini 的max_execution_time选项,默认php文件执行时间是30秒,如果你网速慢现在文件多的话会中断哦)
废话不多说,下面我来盗取一下京东。
function getjd($path,$pagenum){ $url=$path; $pages=$pagenum; $arr=explode('-',$url); for($i=1;$i<=$pages;$i++){//$pages为分页的数量 $arr[14]=$i;//url中最后一个1所在的位置 $url=implode('-',$arr); $curl = curl_init ();//初始化curl curl_setopt ( $curl, CURLOPT_URL, $url ); curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt($curl, CURLOPT_HEADER, 1); curl_setopt ( $curl, CURLOPT_POST, 1 ); curl_setopt ( $curl, CURLOPT_POSTFIELDS, $data ); $html = curl_exec ( $curl );//获得页面内容 preg_match_all ( "/<script type=\"text\/javascript\">(.*?)<\/script>/", $html, $prices ); //var_dump($prices); $priceArray = explode ( "\"", $prices [1] [1] );//根据不同的页面不同使用var_dump($prices);找到这个文件在做位置 {"key":"0947B44DB97B32EF6ABF5F437018B33D8397430A","skuids":" $skuids = str_replace(",",",J_",$priceArray [7]); $priceURL = "http://p.3.cn/prices/mgets?skuIds=J_{$skuids}&&type=1"; $priceString = file_get_contents($priceURL); $json = json_decode($priceString); //获取出商品名称及200*200图像路径输出(更多操作请自行跟去需要添加:如写入数据库) preg_match_all ( "/<img .*? alt='(.*)' (data-lazyload|src)='(.*?)' .*\/>/", $html, $macthes ); foreach($macthes[1] as $key => $alt){ $proname = $alt; $image = basename($macthes[3][$key]); $price = $json[$key] -> p; echo "<p>name:{$proname},price:{$price},image:{$image}</p>"; } preg_match_all ( "/href='(.*?)'><img width='220'/", $html, $match1 ); var_dump($match1); $detailUrl=$match1[1];//获得商品详情页面url foreach($detailUrl as $val){ //$val=preg_replace("/'/",'',$val); $detailHtml=file_get_contents($val); preg_match_all ( '/src="(.*?)" width="50"/', $detailHtml, $match2 ); $n5=$match2[1];//获得n5图片 foreach($n5 as $img){ $img=preg_replace("/n5/","n0",$img); /* //京东图片服务器很有规律仔细一研究就能找到 诸如:http://img12.360buyimg.com/n5/g7/M03/0D/04/rBEHZlCQhssIAAAAAAGZEkzR65MAACkVgPAbioAAZkq326.jpg img12.360buyimg.com后边的n5为50*50格式图片只需改为n0就能得到800*800格式图片, 其他格式图片分别改为1、2、3、4、5...即可 */ //把文件写入当前文件夹的n0文件夹中 file_put_contents('./n0/'.$k++.basename($img),file_get_contents($img)); } $j=0; echo "page".$j++."<br>"; } } }
实例化运行试试:
$url='http://list.jd.com/670-671-6864-0-0-0-0-0-0-0-1-1-1-1-1-72-4137-0.html'; getjd($url,6);关于curl我就不多说,curl可以做很多事,在获取internet文件时要比file_get_contents稳定,它有100多个配置参数,够喝一壶的。
注意:url必须是这种数字递增格式的,不然不能对全部页面进行遍历。
运行php文件,然后等京东的图片自己跑过来(注意更改一下php.ini 的max_execution_time选项,默认php文件执行时间是30秒,如果你网速慢现在文件多的话会中断哦)
相关文章推荐
- Win 32 多线程程序设计学习笔记之三:*WaitFor*Object函数
- IKVM简介
- 算法导论 第8章 线性时间排序-计数排序的原址排序
- 黑马程序员--Java基础之IO流(2)
- uva 10369(最小生成树)
- 交换机基本原理和转发流程总结
- Qt实现截屏
- MFC 处理双击事件时屏蔽掉单击事件
- 关于使用图片轮播插件无法实现效果的问题
- 智能终端应用程序测试内容
- 分析成绩单
- 关于使用图片轮播插件无法实现效果的问题
- 数字滤波
- TQ2440裸板---lcd液晶显示(详细注释)
- Java 输入
- 简析javascript 的 window.XMLHttpRequest
- 12--4为小学生出10道计算题
- 服务器端返回json
- [asp.net入门]利用ADO.NET处理数据的简单之处
- RS编码和纠错算法