php做的一个简易爬虫,代码参考示例

作者: JONE 分类: PHPer 发布时间: 2020-06-04 15:09

源地址 https://www.cnblogs.com/we-jack/p/8178099.html

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 /> ----".$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 /> ----".$i."捕捉结束。</td></tr>";
echo "<br />全部捕捉结束。";
break;
}
echo "<br /> ----".$i."捕捉结束。</td></tr>";
}
}
}