吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3497|回复: 13
收起左侧

[其他转载] 表示不服,来个PHP批量(并发)爬虫下载小姐姐图片到本地

[复制链接]
laogepj 发表于 2021-5-9 00:17
本帖最后由 laogepj 于 2021-5-9 09:35 编辑

看到论坛都没有php采集爬虫我就不服了,php照样并发批量采集,一点都不耽误快速找小姐姐。
142张照片8秒搞定
1.来个PHP批量(同步)爬虫下载小姐姐图片到本地
2.里面引用的库文件请转移带这里下载https://github.com/playm3u8/whttp
3.和download.php目录同级即可
3.执行命令 php download.php
3.php版本在7.2以上
[PHP] 纯文本查看 复制代码
<?php
require_once './whttp/autoload.php';
use PL\Whttp,PL\Debug;

function getImg($id)
{
        $retlist = [];
        $html = whttp::get("https://bcy.net/item/detail/{$id}?_source_page=hashtag")
                ->core('window.__ssr_data = JSON.parse("','");')
                ->getBody();
        $json  = json_decode(stripslashes($html), true);
        if (isset($json['detail']['post_data']['multi'])) {
                $multi = $json['detail']['post_data']['multi'];
                foreach ($multi as $key => $value) {
                        $retlist[$key] = $value['path'];
                }
        }
        return $retlist;
}

$param = [
        'url' => 'https://bcy.net/apiv3/common/circleFeed?circle_id=492',
];



$retlist = [];
$result  = Whttp::get($param['url']);
if($result->getCode() != 200) {
        print("请求错误"."\n");
} else {
        // 记录请求耗时起点
        Debug::remark('begin');
        $getlist = $result->getJson('data.items');
        foreach ($getlist as $key => $value) {
                $retlist[$key]['id']    = $value['item_detail']['item_id'];
                $retlist[$key]['plain'] = $value['item_detail']['plain'];
                $retlist[$key]['img']   = getImg($value['item_detail']['item_id']);
        }
        // 下载图片
        foreach ($retlist as $key => $value) {
                print("id:{$value['id']}"."\n");
                print("plain:{$value['plain']}"."\n");
                $img = Whttp::get($value['img'])
                    ->savepath("./bcy_img/".$value['id'])
                    ->concurrent(10) // 同时并发任务数量
                    ->gany(Function($data) 
                {
                        $error = $data['error'];
                        $url   = $data['info']['url'];
                        if(empty($error)) {
                                print("下载成功:{$url}"."\n");
                        } else {
                                print("下载失败:{$url}"."\n");
                        }
                });
                $img->getDownload();
                print("=================我是分隔符================="."\n");
        }
}

// 请求耗时终点
Debug::remark('end');
// 计算请求耗时
$cost   = floatval(Debug::getRangeTime('begin','end',4));
// 计算内存消耗
$memory = strtolower(Debug::getRangeMem('begin','end'));
print("[耗时:".$cost."秒] [内存消耗:".$memory."]");

111111.png QQ截图20210509000232.png

免费评分

参与人数 2吾爱币 +2 热心值 +1 收起 理由
折原臨也丶 + 1 + 1 谢谢@Thanks!
我是一个外星人 + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

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

elightning 发表于 2021-5-15 02:58
php采集的精髓在于curl连接复用
这个库只实现了并发,没有实现连接复用
大量https的情况下,最影响效率的就是tcp三次握手+ssl四次握手
每个并发重复握手很没意义

另外php爬虫的弱势就是单线程,这个库采用的curl多重并发只是个消息队列机制解决不了单线程的问题
我目前喜欢golang结合php 多线程+连接复用 并发性能非常强悍 如果试过就绝对上瘾
牛皮菜 发表于 2021-5-9 11:44
色色 发表于 2021-5-9 12:01
 楼主| laogepj 发表于 2021-5-9 14:26
色色 发表于 2021-5-9 12:01
大佬  图片下载地址能直接保存成文本吗

可以的,$retlist[$key]['img']就是是图片地址
大侠在路上 发表于 2021-5-31 11:28
感谢楼主分享,先学习一下。
yaobao78 发表于 2021-6-11 17:25
收藏了,刚好会PHP
罗婷 发表于 2021-6-13 23:48
elightning 发表于 2021-5-15 02:58
php采集的精髓在于curl连接复用
这个库只实现了并发,没有实现连接复用
大量https的情况下,最影响效率的 ...

http协议就是短链接啊 - - 咋复用 - -
sam喵喵 发表于 2021-6-13 23:52
扎克当年就用wget爬了一堆图片,PHP建站
五月何欢 发表于 2021-6-16 09:48
半次元的神经病,真该整治下国内的这种风气
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-25 13:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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