对于爬虫的好奇好像由来已久,一直在研究python的爬虫,今天得空研究研究php的爬虫

index.php

 <?php
header("Content-Type:text/html;charset=utf-8");
if(isset($_GET['img']) and !empty($_GET['img'])){
include 'getimg.php';
$img=new GetImg();
$img->set('start_page',90000);
$img->set('end_page',90010);
$img->start_getimg();
}else{
echo "<a href='./index.php?img=1'>开始</a>";
}

getimg.php

 <?php
/**
* 957796988@qq.com
*/
ini_set('implicit_flush',1); //为一个配置选项设置值
ob_implicit_flush(1); //打开绝对刷送
ob_end_clean(); //清空(擦除)缓冲区并关闭输出缓冲
date_default_timezone_set('PRC'); //初始化时区
set_time_limit(0); //设置脚本最大执行时间 class GetImg{ private $start_page=90010; //开始页数
private $end_page=91000; //结束页数
private $url='images'; //命名文件夹 public function set($key,$val){ $this->$key=$val;
} /*CURL*/
private function curl_get_con($url,$https=true,$method="get",$data=null){
$ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_HEADER,false); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); if($https){
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
} if($method=="post"){
curl_setopt($ch,CURLOPT_POST,true); curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
} $str=curl_exec($ch); curl_close($ch); return $str;
} /*保存图片方法*/
private function save_img($url,$dir,$i){
//创建目录
if(!is_dir($dir)){
mkdir($dir,777);
}
//获取内容
$res=file_get_contents($url);
//命名文件
$file_name=$dir.'/'.$i.'_'.date('Ymd_His').'.jpg';
//重写
file_put_contents($file_name,$res);
return $file_name;
} /*获取方法*/
public function start_getimg(){ echo "<style>table{ border-collapse:collapse }tr{border:1px solid #ccc}</style>
<table width='1000' border='0' cellpadding='5' cellspacing='5' ><tr width='100'><td colspan='2'>爬虫已运行:请查看".$this->url."文件夹</td></tr>";
for($i=$this->start_page+1;$i<=$this->end_page;$i++){
//爬 地址
$url="https://www.bbb290.com/htm/pic2/".$i.".htm";
//开启CURL 获取到内容
$result=$this->curl_get_con($url);
//使用正则匹配内容中的 图片
preg_match_all("/https:\/\/img.*jpg/U",$result,$a); $a=$a[0]; echo "<tr><td>正在捕捉".$i."。</td><td>"; if(empty($a)){
echo "<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;----".$i."为空。</td></tr>";
continue;
} foreach ($a as $value){
//保存图片
$file_name=$this->save_img($value,$this->url,$i);
echo "<img src='".$file_name."' width='100' height='100' />";
}
if($i==$this->end_page){
echo "<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;----".$i."捕捉结束。</td></tr>";
echo "<br />全部捕捉结束。";
break;
}
echo "<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;----".$i."捕捉结束。</td></tr>";
}
}
}

网址貌似被河蟹了~~

php做的一个简易爬虫的更多相关文章

  1. 做了一个简易的git 代码自动部署脚本

    做了一个简易的git 代码自动部署脚本 http://my.oschina.net/caomenglong/blog/472665 发表于2个月前(2015-06-30 21:08)   阅读(200 ...

  2. 【重学Node.js 第4篇】实现一个简易爬虫&启动定时任务

    实现一个简易爬虫&启动定时任务 课程介绍看这里:https://www.cnblogs.com/zhangran/p/11963616.html 项目github地址:https://gith ...

  3. 一个简易的SocketIM

    今天做了一个简易的socketIM的小示例.基本思想是开启两个winform,每个winform既充当服务器也充当客户端.一个监听8000端口,另外一个监听8001端口,两个winform接收到信息之 ...

  4. webmagic的设计机制及原理-如何开发一个Java爬虫

    之前就有网友在博客里留言,觉得webmagic的实现比较有意思,想要借此研究一下爬虫.最近终于集中精力,花了三天时间,终于写完了这篇文章.之前垂直爬虫写了一年多,webmagic框架写了一个多月,这方 ...

  5. 使用 HttpClient 和 HtmlParser 实现简易爬虫

    这篇文章介绍了 HtmlParser 开源包和 HttpClient 开源包的使用,在此基础上实现了一个简易的网络爬虫 (Crawler),来说明如何使用 HtmlParser 根据需要处理 Inte ...

  6. [转]使用 HttpClient 和 HtmlParser 实现简易爬虫

    http://www.ibm.com/developerworks/cn/opensource/os-cn-crawler/ http://blog.csdn.net/dancen/article/d ...

  7. webmagic的设计机制及原理-如何开发一个Java爬虫 转

    此文章是webmagic 0.1.0版的设计手册,后续版本的入门及用户手册请看这里:https://github.com/code4craft/webmagic/blob/master/user-ma ...

  8. 一个简易的Python全站抓取系统

    很长时间没有更新博客了,前一阵时间在做项目,里面有一个爬虫系统,然后就从里面整理了一点代码做成了一个简易的爬虫系统,还挺实用的. 简单说来,这个爬虫系统的功能就是:给定初始的链接池,然后设定一些参数, ...

  9. 自己来实现一个简易的OCR

    来做个简易的字符识别 ,既然是简易的 那么我们就不能用任何的第三方库 .啥谷歌的 tesseract-ocr, opencv 之类的 那些玩意是叼 至少图像处理 机器视觉这类课题对我这种高中没毕业的人 ...

随机推荐

  1. Centos下_MysqL5.7在使用mysqldump命令备份数据库报错:mysqldump: Got error: 1449: The user specified as a definer ('fk_system'@'localhost') does not exist when using LOCK TABLES

    在阿里云服务器增加一个shell脚本定时备份数据库脚本执行任务时,测试性的执行了备份命令,如下 [root@iZ2ze503xw2q1fftv5rhboZ mysql_bak]# /usr/local ...

  2. 老男孩Python全栈开发(92天全)视频教程 自学笔记17

    day17课程内容: 装饰器回顾练习 登录功能: #登录京东,不同的页面,选择页面,然后不同的登录方式with open('作业5.1jingdong','w',encoding='utf8') as ...

  3. 关于UIButton嵌入到UIView点击无反应问题的解决方法和delegate的简单用法示例(转载)

    做项目封装UIView的时候碰到的问题,没想到有个哥们儿还写成博客,特此收藏! 问题是这样的,几个界面用到同一个自定义返回按钮,于是就想着把这个按钮单独封装起来,添加一个UIView类,在里面自定义U ...

  4. 1 Python数据类型--

    常见的Python数据类型: (1)数值类型:就是平时处理的数字(整数.浮点数) (2)序列类型:有一系列的对象并排或者排列的情况.如字符串(str),列表(list),元组(tuple)等 (3)集 ...

  5. Qt msvc Modules

    3D ActiveQt container ActiveQt server Bluetooth Concurrent Core Enginio Declarative Gui Help Locatio ...

  6. Android安全机制

    1)Android是基于Linux内核的,因此Linux对文件权限的控制同样适用于Android.在Android中每个应用都有自己的/data/data/包名文件夹,该文件夹只能该应用访问,而其他应 ...

  7. R语言-时间序列

    时间序列:可以用来预测未来的参数, 1.生成时间序列对象 sales <- c(18, 33, 41, 7, 34, 35, 24, 25, 24, 21, 25, 20, 22, 31, 40 ...

  8. firebug中的console常用的方法

    firebug中的console常用的方法 1.console.log("Hello!"); --------------------显示基本信息 2.console.info(& ...

  9. Flex中获取RadioButtonGroup中的RadioButton的值

    Flex中获取RadioButtonGroup中的RadioButton的值 1.设计源码 <?xml version="1.0" encoding="utf-8& ...

  10. windows驱动程序wdf--KMDF大致框架

    继WDM后微软出了WDF,封装了WDM中的一些基本代码逻辑.本人菜鸟,也不知道本质上有何区别,只觉得是多了Wdf开头的函数,基本的编程框架上有点出入. KMDF是WDF的内核级部分,为了理清KMDF的 ...