百度搜尋 queryList
,文件地址 。
由於 PhantomJS
對 laravel
的引入支援不好,所以我將兩者安裝到專案根目錄的 sdk/queryList/
下。
"jaeger/querylist": "^4.2",
"jaeger/querylist-phantomjs": "^4.0"
再下載 PhantomJS 二進位制檔案,我也放到了 sdk/
目錄下。
Laravel 中在 console
中寫邏輯程式碼,以抓取百度直播網頁版為例:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use DB;
class Phantomjs extends Command
{
protected $signature = 'js:test';
protected $description = '....';
protected $ql;
public function __construct(){
parent::__construct();
}
public function handle()
{
require_once base_path().'/sdk/queryList/vendor/autoload.php';
$this->ql = \QL\QueryList::getInstance();
// 設定PhantomJS二進位制檔案路徑
$this->ql->use(\QL\Ext\PhantomJs::class,'/www/wwwroot/blog/sdk/phantomjs-2.1.1/bin/phantomjs');
while(true){
$this->bd();
sleep(5);
}
}
public function bd(){
$room_id = $this->bd_roomid;
$url = 'http://mbd.baidu.com/webpage?type=live&action=liveshow&room_id='.$room_id;
$data = $this->ql->browser(function (\JonnyW\PhantomJs\Http\RequestInterface $r) use ($url){
$r->setMethod('GET');
$r->setUrl($url);
$r->setTimeout(10000); // 10 seconds
$r->setDelay(3); // 3 seconds 這裡的延時很重要
return $r;
})
->rules([
'avatar' => ['.msg-box-avatar', 'src'],
'username' => ['.msg-box-name', 'text'],
'text' => ['.msg-box-text', 'text'],
])
->range('.msg-box')
->queryData(); //array
}
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結