(phpstudy)CurlMulti:queryList批量采集图片链接到数据库

呃,现阶段还不会使用多线程里配合图片的直接下载 -2018-12-23 11:29:45
另,虽然采集到了图片(也就是说改改就能采集到文章内容),但是呢离自己想要的文章变形还有不小的差距.就当技术储备了吧. ̄へ ̄


之前遇到的问题

CurlMulti 在QueryList中找不到
AbsoluteUrl也无法使用

使用composer安装

composer require jaeger/querylist-curl-multi
composer require jaeger/querylist-absolute-url

下面是完整的代码

<?php
namespace app\index\controller;
use \app\index\controller\User;
use \app\admin\controller\Index as AdminIndex;
use QL\QueryList;
use QL\Ext\AbsoluteUrl;
use QL\Ext\CurlMulti;

use think\Db;
use think\Controller;
class Index extends Controller
{
    public function index()
    {
        $DB=new Db;
        // $data = $DB::table('gxxl')->select();
        $data = Db::query("select * from imgmsic");
        // 分配数据
        $this->assign("data",$data);
        return view();
    }
    public function gxxlImg()
    {
        // 注册插件
        $ql = QueryList::use([
            AbsoluteUrl::class, // 转换URL相对路径到绝对路径
            CurlMulti::class    // Curl多线程采集
        ]);
        
        // 获取文章列表链接集合,使用AbsoluteUrl插件转换URL相对路径到绝对路径.
        $urls = $ql->get('http://baidu.com/tupian/list.html',[
            'param1' => 'testvalue',
            'params2' => 'somevalue'
        ],[
            'headers' => [
                'Referer' => 'http://baidu.com/',
                'User-Agent' => 'testing/1.0',
                'Accept'     => 'application/json',
                'X-Foo'      => ['Bar', 'Baz'],
                'Cookie'    => 'abc=111;xxx=222'
            ]
        ])->absoluteUrl('http://baidu.com/tupian/list.html')->find('.hy-video-list .clearfix a')->attrs('href')->all();
        
        
        //使用CurlMulti多线程插件采集文档内容
        $ql->rules([ // 设置采集规则
            // 'title'   => ['.head h3', 'text'],
            'imgArr' => ['#playlist .playlist', 'html'],
            // 'imgArr' => array('#playlist4 img','originalsrc')
            ])
            // 设置采集任务
            ->curlMulti($urls)
            // 每个任务成功完成调用此回调
            ->success(function (QueryList $ql, CurlMulti $curl, $r) {
                echo "Current url:{$r['info']['url']} \r\n";
                $data = $ql->query()->getData()->all();
                $durl = QueryList::html($data[0]['imgArr'])->find('img')->map(function($a){
                    $src= $a->attr('originalsrc');
                    $title= $a->attr('title');
                    // 直接下载不会,只好写入到数据库中,再通过php curl下载吧
                    Db::execute("insert into imgmsic value(null,?,?)",[$src,$title]);
                    return $a->attr('originalsrc');
                });
                dump($durl);
                dump($data);
            })
            // 开始执行多线程采集
            ->start([
                // 最大并发数
                'maxThread' => 10,
                // 错误重试次数
                'maxTry'    => 3
            ]);
    }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值