jae-jae / QueryList

:spider: The progressive PHP crawler framework! 优雅的渐进式PHP采集框架。
https://querylist.cc
2.65k stars 441 forks source link

range()在一个元素上有双class name或者说一个以上的class name就无法获得数据 #80

Closed 54853315 closed 3 years ago

54853315 commented 5 years ago

已经用querylist采集了几个网站了,非常不错,这是第一次遇到双class name无法采集到item的。

目标网址:https://www.17vape.com/portal.php?mod=list&catid=1

包裹item的元素是:<div class="bm_c xls"><dl>......</dl></div>

我尝试了多个range,我认为最贴切的2个range在下面的代码里,执行结果都是空的[]

//采集规则
        $reg  = [
            'detail_link' => ['dd>span>a', 'href'],
            //采集文章标题
            'title'       => ['dt>div>a>.img', 'alt'],
            'image'       => ['dt>div>a>.img', 'src'],
            'brief'       => ['dd>.span:eq(1)', 'text', '-a -.content_copyright -script'],
        ];
        $rang = '.bm_c:eq(0)';  //现在使用的
//        $rang = '.xls>dl';  //这是我最初使用的

        try {
//            echo QueryList::get($url)->getHtml();  // worked

            $data = QueryList::get($url, [
                'timeout' => 30,
            ], $this->getRobotHeader())->rules($reg)->range($rang)->query()->getData()->all();
            dd($data);  // show empty []
jae-jae commented 5 years ago

这个问题跟标签多class没有关系,可能是选择器书写不正确,或者网页内容是动态加载的等其它原因