最近项目(TP6)中要做一些数据采集,找到了QueryList这个采集框架,还蛮容易上手的,主要是把采集到的数据,在入库之前做了下处理,官方文档中还有更高级的玩法(见官方文档:http://www.querylist.cc/docs/guide/v4/processing-data),直接在规则部分,通过过滤器来处理数据,记录一下:
public function getdata(){
$url = 'https://www.xx.com';
//规则
$rules = [
'title'=>['.title','text'],
'author'=>['a.author_url','text'],
'url'=>['a.pwrap','href']
];
//切片选择器,主要用于遍历列表中最小单元
$range = '.item';
//构造头部信息发送请求获取数据
$db = QueryList::rules($rules)->range($range)->get($url,null,
[
'headers'=>[
'User-Agent'=>'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
'Accept-Encoding' => 'gzip, deflate, br',
]
]
)->query()->getData();
//用map方法遍历处理数据,替换多余的内容
$result = $db->map(function ($item){
$item['title'] = str_replace('NFT最新消息: ','',$item['title']);
$item['author'] = str_replace('作者: ','',$item['author']);
return $item;
})->all();
//批量添加到数据库
// $addNews = new Pd;
// $addNews->saveAll($result);
return json($result);
}