关于PHP自定义采集图片脚本
上次看了韩顺平老师的自定义数据采集脚本视频,自己手痒了也想自己写一个玩玩,不料!就是这几十行的代码,我整整敲了一天才算完美过关,各种坑爹的事情不由分说,下面我来谈谈我深刻的体会!
因为是自己看着视频敲的,思路跟着视频走,但是还是很容易写错字符,或者错漏字符,当然了,我也没庆幸一遍就写完整(态度还是蛮好的),比如,在拼接GET请求的时候丢了拼接符号(.),稍微一看没错啊!心里肯定是人家防采集了(屁大点的网站,防个毛的采集),这个退缩的理由,让我在采集这边一直不敢去深究,采集要用到正则,而正则只是在我开始学习PHP的时候,看过一点点,知道是个怎么回事,其他的就不了了之,心里没底气呀,还好经过昨天跟今天,通过Discuz论坛的DXC采集跟Dedecms后台采集的反复研究,最终能够采集到数据,我还是挺欣慰的,这一关算是过了吧。
再其次,还是在模拟浏览器发送请求的时候,其中Host中的ost字符我一直跟着视频用的大写(HOST),但是老师视频里是能够正常请求相应到数据的,而我就是死活弄不出来,差点就放弃了,估计又要陷入深深的自卑当中吧,还好不厌其烦的我,用火狐Debug了一下,根据发送请求字符一个个对,当把host改过来就通过了,那一刻我想死的冲动都有了。
这个也许是最坑爹的吧,耽误了我几个小时,但是,下面还有更坑爹的,截掉头部信息,以及后面的几个字符串,才能获取到图片流的真正二进制码啊,视频里讲是后面11个字符,我也想过可能不一样,就把8到15都试了一遍,采集到的图片还是无效显示,接着又用狐火右键源码看了一把,把字符从0开始截取,最终测试结果是头部后面4个字符,才是图片的二进制码,调这个我也差点疯了,先是head(Content-Type:image/jpeg)浏览器显示图片,再是写入到text文件中看代码,又是Unicode编码保存等问题,又是PHP流的问题,跟着别的知识倒是看了不少,也许是视频老了吧,各种不合适。
所以,这些关键技术,还是要自己一点点过关才行,下面贴一下坑爹的代码:
<?php set_time_limit(100);//1.连接到服务器(主机)网站$fp = fsockopen("www.a67.com",80,$error,$errstr,30);if(!$fp){die("连接失败 $error - $errstr");}//2.准备发送HTTP请求$httpstr = "GET /list/1/p.2 HTTP/1.1\r\n";$httpstr.= "HOST: www.a67.com\r\n";$httpstr.= "Connection: Close\r\n\r\n";//3.发送HTTP请求fwrite($fp,$httpstr,strlen($httpstr));//4.接收从a67返回的静态页内容$res=""; while(!feof($fp)){ //使用while循环读取,防止消耗高内存$res.=fread($fp,1024);}fclose($fp); //关闭连接,关闭文件流//5.现在使用正则表达式取出图片的路径$reg = '/<img alt="[^"]*" title="[^"]*" src="([^"]*)"/'; //子表达式preg_match_all($reg,$res,$arr);//print_r($arr[1]);die;//6.取出src中的图片,并保存到本地,即对$arr[1]进行遍历foreach($arr[1] as $v){$img_part_name = str_replace("http://img.a67.com","",$v);//7.连接到服务器(主机)网站$fp2 = fsockopen("img.a67.com",80,$error,$errstr,30);if(!$fp2){die("连接失败2 $error - $errstr");}$infos = pathinfo($img_part_name);//8.准备发送HTTP请求$httpstr2 = "GET $img_part_name HTTP/1.1\r\n";$httpstr2.= "Host: img.a67.com\r\n"; //这里的Host,后面三个字母要小写啊$httpstr2.= "Connection: Close\r\n\r\n";//echo $httpstr2; die;//9.发送HTTP请求fwrite($fp2,$httpstr2,strlen($httpstr2));//接收流,二进制的内容$img_str=""; while(!feof($fp2)){$img_str.=fread($fp2,1024);}fclose($fp2); //关闭连接,关闭文件流,不关闭,会系统关闭$index = strpos($img_str,"\r\n\r\n"); $img_str = substr($img_str,$index+4);$path = "./myimages";if (!file_exists($path)){mkdir($path);}file_put_contents("{$path}/{$infos['basename']}",$img_str);}echo "采集成功";?>
关于PHP自定义采集图片脚本相关推荐
- php 自动获取头像,PHP_WordPress中用于获取及自定义头像图片的PHP脚本详解,get_avatar()(获取头像)
get_avat - phpStudy...
WordPress中用于获取及自定义头像图片的PHP脚本详解 get_avatar()(获取头像)get_avatar() 函数用来获取置顶邮箱或者用户的头像代码,在评论列表中非常常用. 这个函数提供 ...
- 在自建的数据集上训练yolov3准备(二):树莓派自动采集图片,tensorflow_label_tool下载图片,yolo_mark标注与清洗数据(附python脚本)
前言 上一篇文章写了如何在Google的open image v4上分类下载数据集并保存成yolo格式,这里接着写.为了确认标注没有问题,我们可以用yolo_mark来清洗一遍.而有时可能我们需要自己 ...
- php获取头像,WordPress中用于获取及自定义头像图片的PHP脚本详解
get_avatar()(获取头像)get_avatar() 函数用来获取置顶邮箱或者用户的头像代码,在评论列表中非常常用. 这个函数提供一个 get_avatar 过滤器,用来过滤头像的 Html ...
- 网站流量日志数据自定义采集
1. 原理分析 首先,用户的行为会触发浏览器对被统计页面的一个http请求,比如打开某网页.当网页被打开,页面中的埋点javascript代码会被执行. 埋点是指:在网页中预先加入小段javascri ...
- 前端页面JS埋点自定义采集实现
1 设计实现 1.1 确定收集信息 名称 途径 备注 访问时间 web server Nginx $msec IP web server Nginx $remote_addr 域名 javascrip ...
- 鸿蒙os事例代码,鸿蒙HarmonyOS App开发造轮子之自定义圆形图片组件的实例代码
一.背景 在采用Java配合xml布局编写鸿蒙app页面的时候,发现sdk自带的Image组件并不能将图片设置成圆形,反复了翻阅了官方API手册(主要查阅了Compont和Image相关的API),起 ...
- 火车头怎么采集图片-火车头采集图片并保存本地化
火车头怎么采集图片?首先我们一起来了解一下火车头采集器,火车头采集器抓取数据取是决于您的规则.要获取某个网页的所有内容,您需要先获取此网页的网址.程序按规则抓取列表页面,分析其中的URL,然后写规则获 ...
- MFC+Halcon实现相机的实时采集+保存采集图片
前言 我们在Halcon上可以很容易的实现连接相机与实时采集图片的操作,利用电脑自带的"DirectShow"相机执行文件可以实现实时显示相机的采集效果与拍照,现在我们利用halc ...
- Python调用大恒相机采集图片(Ubuntu16.04)
Python调用大恒相机(Ubuntu16.04) 文章目录 Python调用大恒相机(Ubuntu16.04) 下载API文件 环境配置 验证 采集图片 下载API文件 wget http://gb ...
- Android 自定义圆形图片 CircleImageView
1.效果预览 1.1.布局中写自定义圆形图片的路径即可 1.2.然后看一看图片效果 1.3.原图是这样的 @mipmap/ic_launcher 2.使用过程 2.1.CircleImageView源 ...
最新文章
- 【 Notes 】Categories of Wireless Local Positioning Systems
- [codevs 2926] 黑白瓷砖(2002年安徽省队选拔赛)
- Office EXCEL 中如何让一个单元格的数据链接到另一个工作表的数据
- 安卓逆向系列教程 4.4 逆向云播 VIP
- Python websocket
- python xlrd模块_Python中xlrd模块解析
- 一台2003服务器上怎样设置2个网站,服务器怎样设置多站点 服务器程序 win2003+apache...
- 第7章—SpringMVC高级技术—不用web.xml,而使用java类配置SpringMVC
- 在Mac端的 几种文本操作技巧
- 字符串超长导致emWin卡死
- 绑定流详解——网络测试仪实操
- pt100热电阻计算公式C语言,PT100计算公式
- Day-3 文字排版
- 在mysql中,涉及到金钱的数据类型一般是什么?
- 庖丁解牛——深入解析委托和事件
- 黑盘-蓝盘-绿盘-红盘
- XXE-什么是XXE
- 【数据挖掘结果】大数据企业的汇总信息
- [matlab笔记]多元函数泰勒展开
- Python + selenium自动化工具 + 滑块验证码+点选验证码,实现模拟登录“中国铁路网12306”