吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2685|回复: 3
收起左侧

[其他转载] PHP 爬取 ZOL 壁纸下载到本地文件

[复制链接]
快乐小风 发表于 2019-3-1 16:16
本帖最后由 快乐小风 于 2019-3-1 16:17 编辑

前几天看到一个关于 PHP 的爬虫工具(queryList) , 看了看 , 根据官网 demo 改了改 , 来爬一下图片下载

注意: 只支持 desk.zol.com.cn


运行环境
  • linux(windos) + nginx(apache) + php
  • php 版本 >= 7.0
  • 本地测试是docker,应该任何集成环境都可以(如:xampp,phpstudy,wawp)
  • 下载解压(bdquerylist) ,放到你的服务器根目录
  • 访问地址: http://127.0.0.1/queryList/indexx.html
  • 打开后显示如下图:
  • 首页显示效果

    首页显示效果



使用方法
  • 输入要下载的地址(如:http://desk.zol.com.cn/bizhi/571_5680_2.html)
  • 选择要下载分辨率(默认1440x900)
  • 选择保存地址(默认在文件包里的 image 文件夹内,只在 mac 上测试,win 上面的自定义地址不确定可用)




源码文件,有兴趣的可以看看(小白一枚,大神勿喷 )

[PHP] 纯文本查看 复制代码
<?php
$data = $_POST;
if(empty($data) || empty($data['bz_url'])){
    echo json_encode(['code'=>500,'msg'=>'必填参数不能为空']);die;
}
if(substr($data['bz_url'] , 0 , 22) != 'http://desk.zol.com.cn'){
    echo json_encode(['code'=>501,'msg'=>'请传入正确的 ZOL 地址!']);die;
}
$rs['width']  = '1440';//默认分辨率
$rs['height'] = '900';//默认分辨率
if(!empty($data['bz_dpi'])){
    $dpi = explode(',',$data['bz_dpi']);
    if(count($dpi) != 2){
        echo json_encode(['code'=>502,'msg'=>'分辨率解析失败']);die;
    }
    if(!in_array($dpi[0] , [2880,2560,1920,1680,1600,1440,1366,1280]) || !in_array($dpi[1] , [1800,1600,1080,1050,900,768,1024,800])){
        echo json_encode(['code'=>503,'msg'=>'无法识别的分辨率']);die;
    }
    $rs['width']  = trim($dpi[0]);//默认分辨率
    $rs['height'] = trim($dpi[1]);//默认分辨率
}
$path = './image/';
if(!empty($data['bz_path'])){
    if(!is_dir($data['bz_path'])){
        $rk = mkdir($data['bz_path'],0777);
        if(!$rk) echo json_encode(['code'=>505,'msg'=>'保存目录文件夹创建失败']);die;
    }
    $path = $data['bz_path'];
}

//使用 queryList 下载ZOL壁纸
require('./autoload.php');
use QL\QueryList;
$withDownImageUrl = trim($data['bz_url']);
$ql = QueryList::getInstance();
$ql->bind('downloadImage',function ($path,$rs){
    $data = $this->getData()->map(function ($item) use($path,$rs){
        $imageUrl = '';
        if(!empty($item['image'])){
            $imageUrl .= $item['image'];
        }
        if(!empty($item['images'])){
            $imageUrl .= $item['images'];
        }
        if(empty($imageUrl)) return false;

        $urlArr = explode('144x90',$imageUrl);
        if(count($urlArr) !=2) return false;
        $imageUrl = $urlArr[0].$rs['width'].'x'.$rs['height'].$urlArr[1];
        // 获取图片
        $img = file_get_contents($imageUrl);
        if(!is_dir($path.$rs['title'].'_'.$rs['count'])){
                $isMkDir = mkdir($path.$rs['title'].'_'.$rs['count'],0777);
            if(!$isMkDir){
                $item['down_image'] = '文件夹创建失败';return;
            }
        }
        //存储路径和文件名
        $localPath = $path.$rs['title'].'_'.$rs['count'].'/'.date('YmdHis').mt_rand(10000,99999).'.jpg';
        // 保存图片到本地路径
        $res = file_put_contents($localPath,$img);
        $item['issave']  = !empty($res)?'1':'0';
        $item['message'] = !empty($res)?'保存成功':'保存失败';
        return $item;
    });
    //更新data属性
    $this->setData($data);
    return $this;
});
$html = $ql->get($withDownImageUrl);
//标题
$rs['title'] = $ql->find('#titleName')->text();
//图片总数
$rs['count'] = mb_substr(explode('/',$ql->find('h3>span')->text())[1],0,-1);
$data = $html->rules([
    'image' =>['#showImg>li>a>img','src'],
    'images' =>['#showImg>li>a>img','srcs'],
])->query()->downloadImage($path,$rs)->getData()->all();
$responseData['title'] = $rs['title'];
$responseData['count'] = $rs['count'];
$responseData['succ']  = 0;
$responseData['fail']  = 0;
foreach ($data as $v) {
    if($v['issave']){
        $responseData['succ']+=1;
    }else{
        $responseData['fail']+=1;
    }
}

echo json_encode(['code'=>200,'msg'=>'下载完成','data'=>$responseData]);die;




源码下载:   https://www.lanzouj.com/i3a4vib





最后的最后啦 , 喜欢的记得给个好评哈!


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

halolo 发表于 2019-3-1 16:58
代码bug有点多,另外,有SSRF漏洞,对于域名的判断是可以bypass的。
 楼主| 快乐小风 发表于 2019-3-1 17:43
halolo 发表于 2019-3-1 16:58
代码bug有点多,另外,有SSRF漏洞,对于域名的判断是可以bypass的。

感谢指出 , 这个东西本身几乎都是在本机运行,如果要运行 SSRF 的话,还要控制本机电脑?
refix 发表于 2019-3-16 23:07
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-27 01:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表