采集神器,优采云的手动抓取策略和入库操作!
优采云 发布时间: 2020-08-09 08:12#程序员工资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>
采集一些好多防爬虫的网站,有个挺好用的工具:优采云...直接通过浏览器形式访问,一力破万法.
准备工作:money,花钱去优采云官网买一个月或则更长时间的会员,这样你能够搞云采集
下面,自己去抓取数据,抓取完成后,设置定时云采集
然后你点击云采集,查看数据,就会有很多数据了,,下面是,如何把这种数据搞到本地,然后定时清空
上代码:
直接通过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; // 返回数据
}
}
城市合伙人全球招募中:
参与线下宏伟新蓝图,用业绩说话!
软件线索、软件需求,米鼠网帮你变现!
更灵活的合作模式(不限地域、不限金额、不限项目)
更高额的提成比列(提成是软件项目收益的80%)
利润的核算方法:
以平台公开招标的最低价中标价钱为基准,剩下的为收益部份,如对平台的最低中标价钱有异议,可以推荐供应商进行竞标。
义务:
1、作为城市合伙人,在该城市借助自身优势推广“米鼠网平台”,拓展乙 方所拥有的“米鼠网平台”实名认证用户和 VIP 用户
2、作为城市合伙人,在该城市借助自身优势推广“米鼠网商城”,并寻求该地域软件产品销售商,促成软件产品销售商委托乙方在“米鼠网商城”上代理销售软件产品销售商的软件产品的交易,并拓展软件产品采购用户促使与乙方的采购交易。