网页文章自动采集(如何把优采云搞到本地,..准备工作 )
优采云 发布时间: 2021-09-07 02:10网页文章自动采集(如何把优采云搞到本地,..准备工作
)
采集一些反爬虫网站,有个很实用的工具:优采云...直接通过浏览器访问,一招破万。
准备:花钱,花钱去优采云官网买一个月以上的会员,这样就可以搞云采集
接下来自己去抓取数据,抓取完成后设置定时云采集
然后你点击cloud采集查看数据,会有很多数据,这里是如何在本地获取这些数据,然后定期清除
上代码:
直接通过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; // 返回数据
}
}