前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >thinkphp5.1 利用cli命令行+Guzzle类库实现多线程爬虫,希望对需要的朋友有所帮助!

thinkphp5.1 利用cli命令行+Guzzle类库实现多线程爬虫,希望对需要的朋友有所帮助!

作者头像
超级小可爱
发布2023-02-22 15:38:51
8450
发布2023-02-22 15:38:51
举报
文章被收录于专栏:小孟开发笔记

尚未亲自测试,仅供参考

下面thinkphp框架教程栏目将给大家讲解thinkphp5.1 利用cli命令行+Guzzle类库实现多线程爬虫,希望对需要的朋友有所帮助!

创建一个cli命令

1

php think make:command Thread thread

测试能否成功执行

1

php think thread

安装Guzzle类库

文档地址:guzzle文档地址(https://guzzle-cn.readthedocs.io/zh_CN/latest/quickstart.html)

实现代码

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106

<?php<br>/\*\*<br> \* Created by.<br> \* User: Jim<br> \* Date: 2020/9/29<br> \* Time: 14:31<br> \*/<br><br>namespace app\command;<br><br>use GuzzleHttp\Client;<br>use GuzzleHttp\Pool;<br>use think\console\Command;<br>use think\console\Input;<br>use think\console\Output;<br><br>/\*\*<br> \* Guzzle<br> \* Class Thread<br> \* @package app\command<br> \* 文档地址 https://guzzle-cn.readthedocs.io/zh\_CN/latest/quickstart.html<br> \*/<br><br>class Thread extends Command<br>{<br><br>    /\*\*<br>     \* 请求的总次数<br>     \* @var int<br>     \*/<br>    protected $totalPageCount = 50;<br>    /\*\*<br>     \* 当前请求的次数<br>     \* @var int<br>     \*/<br>    protected static $counter = 1;<br>    /\*\*<br>     \* 线程的数量<br>     \* @var int<br>     \*/<br>    protected $threads = 20;<br><br>    protected function configure()<br>    {<br>        // 指令配置<br>        $this->setName('thread');<br>        // 设置参数<br><br>    }<br><br>    protected function execute(Input $input, Output $output)<br>    {<br><br>        $client = new Client();<br>        $requests = function ($total) use ($client) {<br>            foreach (range(1, $total) as $r) {<br>                $uri = 'https://apinew.juejin.im/content\_api/v1/short\_msg/detail';<br>                yield function () use ($client, $uri) {<br>                    return $client->postAsync($uri, [<br>                        'verify' => false,<br>                        'json' => [<br>                            'msg\_id' => '6845185452727599118'<br>                        ]<br>                    ]);<br>                };<br>            }<br><br>        };<br><br>        $pool = new Pool($client, $requests($this->totalPageCount), [<br>            'concurrency' => $this->threads,<br>            // 请求成功<br>            'fulfilled' => function ($response, $index) use ($output) {<br>                $res = $response->getBody()->getContents();<br>                $output->writeln($res);<br>                $output->writeln("正在执行第{$index}个·····");<br>                if ($this->checkThreadIsEnd() == true) {<br>                    $output->writeln("------------请求结束---------");<br>                    return false;<br>                }<br>            },<br>            // 请求失败<br>            'rejected' => function ($reason, $index) use ($output) {<br>                $output->writeln("执行失败,{$reason}");<br>            },<br>        ]);<br>        $promise = $pool->promise();<br>        $promise->wait();<br>    }<br><br>    /\*\*<br>     \* 检测任务是否结束<br>     \* @return bool<br>     \*/<br>    private function checkThreadIsEnd()<br>    {<br>        if (self::$counter < $this->totalPageCount) {<br>            self::$counter++;<br>            return false;<br>        } else {<br>            return true;<br>        }<br>    }<br><br><br>}

执行命令

1

php think thread

效果

未经允许不得转载:肥猫博客 » thinkphp5.1 利用cli命令行+Guzzle类库实现多线程爬虫,希望对需要的朋友有所帮助!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 尚未亲自测试,仅供参考
  • 下面thinkphp框架教程栏目将给大家讲解thinkphp5.1 利用cli命令行+Guzzle类库实现多线程爬虫,希望对需要的朋友有所帮助!
  • 创建一个cli命令
  • 安装Guzzle类库
  • 实现代码
  • 执行命令
  • 效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档