上次看了韩顺平老师的自定义数据采集脚本视频,自己手痒了也想自己写一个玩玩,不料!就是这几十行的代码,我整整敲了一天才算完美过关,各种坑爹的事情不由分说,下面我来谈谈我深刻的体会!

因为是自己看着视频敲的,思路跟着视频走,但是还是很容易写错字符,或者错漏字符,当然了,我也没庆幸一遍就写完整(态度还是蛮好的),比如,在拼接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自定义采集图片脚本相关推荐

  1. php 自动获取头像,PHP_WordPress中用于获取及自定义头像图片的PHP脚本详解,get_avatar()(获取头像) get_avat - phpStudy...

    WordPress中用于获取及自定义头像图片的PHP脚本详解 get_avatar()(获取头像)get_avatar() 函数用来获取置顶邮箱或者用户的头像代码,在评论列表中非常常用. 这个函数提供 ...

  2. 在自建的数据集上训练yolov3准备(二):树莓派自动采集图片,tensorflow_label_tool下载图片,yolo_mark标注与清洗数据(附python脚本)

    前言 上一篇文章写了如何在Google的open image v4上分类下载数据集并保存成yolo格式,这里接着写.为了确认标注没有问题,我们可以用yolo_mark来清洗一遍.而有时可能我们需要自己 ...

  3. php获取头像,WordPress中用于获取及自定义头像图片的PHP脚本详解

    get_avatar()(获取头像)get_avatar() 函数用来获取置顶邮箱或者用户的头像代码,在评论列表中非常常用. 这个函数提供一个 get_avatar 过滤器,用来过滤头像的 Html ...

  4. 网站流量日志数据自定义采集

    1. 原理分析 首先,用户的行为会触发浏览器对被统计页面的一个http请求,比如打开某网页.当网页被打开,页面中的埋点javascript代码会被执行. 埋点是指:在网页中预先加入小段javascri ...

  5. 前端页面JS埋点自定义采集实现

    1 设计实现 1.1 确定收集信息 名称 途径 备注 访问时间 web server Nginx $msec IP web server Nginx $remote_addr 域名 javascrip ...

  6. 鸿蒙os事例代码,鸿蒙HarmonyOS App开发造轮子之自定义圆形图片组件的实例代码

    一.背景 在采用Java配合xml布局编写鸿蒙app页面的时候,发现sdk自带的Image组件并不能将图片设置成圆形,反复了翻阅了官方API手册(主要查阅了Compont和Image相关的API),起 ...

  7. 火车头怎么采集图片-火车头采集图片并保存本地化

    火车头怎么采集图片?首先我们一起来了解一下火车头采集器,火车头采集器抓取数据取是决于您的规则.要获取某个网页的所有内容,您需要先获取此网页的网址.程序按规则抓取列表页面,分析其中的URL,然后写规则获 ...

  8. MFC+Halcon实现相机的实时采集+保存采集图片

    前言 我们在Halcon上可以很容易的实现连接相机与实时采集图片的操作,利用电脑自带的"DirectShow"相机执行文件可以实现实时显示相机的采集效果与拍照,现在我们利用halc ...

  9. Python调用大恒相机采集图片(Ubuntu16.04)

    Python调用大恒相机(Ubuntu16.04) 文章目录 Python调用大恒相机(Ubuntu16.04) 下载API文件 环境配置 验证 采集图片 下载API文件 wget http://gb ...

  10. Android 自定义圆形图片 CircleImageView

    1.效果预览 1.1.布局中写自定义圆形图片的路径即可 1.2.然后看一看图片效果 1.3.原图是这样的 @mipmap/ic_launcher 2.使用过程 2.1.CircleImageView源 ...

最新文章

  1. 【 Notes 】Categories of Wireless Local Positioning Systems
  2. [codevs 2926] 黑白瓷砖(2002年安徽省队选拔赛)
  3. Office EXCEL 中如何让一个单元格的数据链接到另一个工作表的数据
  4. 安卓逆向系列教程 4.4 逆向云播 VIP
  5. Python websocket
  6. python xlrd模块_Python中xlrd模块解析
  7. 一台2003服务器上怎样设置2个网站,服务器怎样设置多站点 服务器程序 win2003+apache...
  8. 第7章—SpringMVC高级技术—不用web.xml,而使用java类配置SpringMVC
  9. 在Mac端的 几种文本操作技巧
  10. 字符串超长导致emWin卡死
  11. 绑定流详解——网络测试仪实操
  12. pt100热电阻计算公式C语言,PT100计算公式
  13. Day-3 文字排版
  14. 在mysql中,涉及到金钱的数据类型一般是什么?
  15. 庖丁解牛——深入解析委托和事件
  16. 黑盘-蓝盘-绿盘-红盘
  17. XXE-什么是XXE
  18. 【数据挖掘结果】大数据企业的汇总信息
  19. [matlab笔记]多元函数泰勒展开
  20. Python + selenium自动化工具 + 滑块验证码+点选验证码,实现模拟登录“中国铁路网12306”

热门文章

  1. nginx 代理部署前端项目
  2. ESP32-SPI接口bl0942驱动
  3. 欧姆龙服务器显示oE,欧姆龙CP1H-E系列PLC实现Modbus TCP\RTU\ASCII通信视频教程
  4. java基于springboot+vue的虚拟游戏道具交易商城 element
  5. linux创建添加用户脚本,Linux 脚本之用户创建
  6. 简述hdfs工作原理_HDFS原理概念扫盲
  7. html+css改字体,css怎么改字体样式?
  8. Vue 电商管理系统
  9. 研磨设计模式之简单工厂模式
  10. WinRAR命令行参数整理