,如何把这些数据搞到本地,然后定时清空

优采云 发布时间: 2021-02-11 12:04

  ,如何把这些数据搞到本地,然后定时清空

  采集有很多防爬虫类网站,有一个非常有用的工具:优采云 ...直接通过浏览器进行访问,并且一举突破。

  准备工作:花钱,花钱去优采云官方网站购买一个月或更长时间的会员,这样就可以从事云采集

  下一步,自己去获取数据,完成获取后,设置定时云采集

  

  然后,您单击云采集来查看数据,将会有很多数据,下面是如何在本地获取这些数据,然后定期对其进行清除

  上部代码:

  直接通过get_group_list获取您的组ID,然后获取所需的组ID并在下面的get_task_list中运行它以获取所有任务的列表,因此您可以循环任务列表并在其中获取数据。运行完成后,执行api的清除操作,结束了。

  

class NewsData extends Frontend{

//备注

//八爪鱼接口文档

//https://dataapi.bazhuayu.com/help#_ref_status_code

public function ins_list()

{

$task_list=$this->get_task_list();

if($task_list==false){

echo "任务列表为空";

die();

}

$NewsSource=new NewsSource();

foreach ($task_list as $k=>$v){

$task_id=$v['taskId'];//任务id

//根据任务ID调用任务相关的数据详情

echo "任务{$v['taskName']}:{$task_id}开始: ";

sleep(1);

//循环获取数据

$data=$this->get_task_data($task_id);

$ins=[];

if(empty($data)){

echo "数据为空:跳过! ";

continue;

}

//循环插入数据

foreach ($data as $k2=>$item){

$ins=[

"cate_name"=>"新闻",

"search_name"=>$item['搜索关键词'],

"title"=>$item['最新文章标题'],

"keywords"=>"",

"description"=>"",

"thumb"=>"",

"content"=>'',

"create_time_text"=>$item['时间'],

"status"=>"1",

"oldurl"=>$item['最新文章链接'],

"author"=>$item['公众号名称'],

"author_avatar"=>$item['公总号头像'],

"author_wechat"=>$item['公众号微信号'],

];

if(strlen($item['内容'])gz_str($item['内容']);

//查询是否重复

$has_id=Db::name("news_source")->where(["title"=>$ins['title']])->value("id");

if(intval($has_id)!==0){

echo "重复ID:{$has_id},标题:{$ins['title']}--标题重复,跳过! ";

continue;

}

//插入一条数据

$ins_id=Db::name("news_source")->insertGetId($ins);

echo "成功插入一条id:{$ins_id} ";

unset($ins);

}

unset($data);

//清空任务数据

$this->remove_task_data($task_id);

}

echo "执行结束!";

die();

}

public $url="https://dataapi.bazhuayu.com";

//获取token值

public function get_token(){

$token_name="bazhuayu_token";

$token_data=Cache::get($token_name);

//如果数据为空 或者 数据过期时间"xxxx..",

"grant_type"=>"password",

];

$params=http_build_query($params);

$token_json=$this->sendPost($url,$params);

$token_data=json_decode($token_json,true);

if(!isset($token_data['expires_in'])){

echo $token_json;

return false;

}

$token_data['expires_time']=$token_data['expires_in']+time();

Cache::set($token_name,$token_data,$token_data['expires_in']);

return $token_data;

}

if(!empty($token_data)){

return $token_data;

}else{

return false;

}

}

//获取header 封装token到header中

public function get_header(){

$token_data=$this->get_token();

if($token_data==false){

echo "token错误!";

die();

}else{

$header=[

"Authorization:".$token_data['token_type'].' '.$token_data["access_token"],

];

return $header;

}

}

//获取任务组 列表

public function get_group_list(){

$url="https://dataapi.bazhuayu.com/api/TaskGroup";

$header=$this->get_header();

$list=$this->sendGet($url,$header);

$list=json_decode($list,true);

var_dump($list);

}

//获取任务详情 列表

public function get_task_list(){

$group_id=2206006;//定义任务组id

$url=$this->url."/api/Task?taskGroupId=".$group_id;

$header=$this->get_header();

$list=$this->sendGet($url,$header);

$list=json_decode($list,true);

$list=isset($list['data'])?$list['data']:false;

return $list;

}

//获取任务的数据

public function get_task_data($task_id=null)

{

//$task_id="0385e312-b674-4793-9435-xxxx";

$offset=0;

$size=200;

//$url=$this->url."/api/alldata/GetDataOfTaskByOffset?taskId={$task_id}&offset={$offset}&size={$size}";

$url=$this->url."/api/notexportdata/gettop?taskId={$task_id}&size={$size}";

$header=$this->get_header();

$data=$this->sendGet($url,$header);

$data=json_decode($data,true);

if(isset($data['data']['dataList'])&&!empty($data['data']['dataList'])){

return $data['data']['dataList'];

}else{

return false;

}

}

//清空任务的数据

public function remove_task_data($task_id=null)

{

//$task_id="02be503d-4568-430b-9f15-c3511ad8e98b";

$url=$this->url."/api/task/RemoveDataByTaskId?taskId=".$task_id;

$header=$this->get_header();

$json=$this->sendPOst($url,null,$header);

var_dump($json);

echo "任务ID{$task_id}数据销毁完成!";

}

/**

* 发起请求

* @param string $url 请求地址

* @param string $data 请求数据包

* @return string 请求返回数据

*/

public function sendPost($url,$data,$header=null)

{

$curl = curl_init(); // 启动一个CURL会话

curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对*敏*感*词*来源的检测

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); // 从证书中检查SSL加密算法是否存在

if(!empty($header)){

curl_setopt($curl, CURLOPT_HTTPHEADER, $header);

curl_setopt($curl, CURLOPT_HEADER, 0);//返回response头部信息

}

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转

curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer

curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求

curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包

curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回

$return_data = curl_exec($curl); // 执行操作

if (curl_errno($curl)) {

echo 'Errno'.curl_error($curl);

}

curl_close($curl); // 关键CURL会话

return $return_data; // 返回数据

}

public function sendGet($url,$header=null)

{

$curl = curl_init(); // 启动一个CURL会话

curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对*敏*感*词*来源的检测

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); // 从证书中检查SSL加密算法是否存在

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转

curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer

if(!empty($header)){

curl_setopt($curl, CURLOPT_HTTPHEADER, $header);

curl_setopt($curl, CURLOPT_HEADER, 0);//返回response头部信息

}

curl_setopt($curl, CURLOPT_TIMEOUT, 20); // 设置超时限制防止死循

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回

$return_data = curl_exec($curl); // 执行操作

if (curl_errno($curl)) {

echo 'Errno'.curl_error($curl);

}

curl_close($curl); // 关键CURL会话

return $return_data; // 返回数据

}

}

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线