Fiddler 采集阿里店铺数据
采集思路:
通过Fiddler工具的,自动回复器功能替换修改js文件,通过js获取页面html代码,发送至服务器,服务器提取数据,在发布自已的网站。
工具:
Fiddler,thinkphp5
1配置Fiddler

2编辑js文件,(示例代码)
//采集分类链接
var getlist = function(){
var list = new Array();
$('.offer-list-row-offer').each(function(){
var url = $(this).find('.title-link').attr('href');
list.push(url);
});
var cateName = $('.sub-cat a span').text();
$.ajax({
url:'https://cj.51zuso.com/index/index/getList',
type: 'POST',
data:{
'list':list,
'cateName':cateName,
},
success : function(data){
$('body').prepend(data);
},
error:function(){
alert('error');
}
});
}
getlist();3服务器接收代码(示例代码)
//采集分类链接
public function getList(){
$data = input('post.');
$list = $data['list'];
$cateName = $data['cateName'];
$status = 0;
$inserData = array();
$count = 0;
$re = 0;
foreach($list as $k=>$v){
$inserData['url'] = $v;
$inserData['cateName'] = $cateName;
$inserData['status'] = $status;
$check = Db::name('links')->where(['url'=>$v,'cateName'=>$cateName])->count();
if($check == 0){
Db::name('links')->insert($inserData);
}else{
$re++;
}
$count++;
}
return '成功采集链接'.$count.'条,重复'.$re.'条';
}//获取祥情内容
var getContent = function(){
$(function(){
//标题
var html = $('html').prop("outerHTML");
var url = window.location.href;
$.ajax({
url:'https://cj.51zuso.com/index/index/getContent',
type: 'POST',
data:{
'html':html,
'url':url
},
success : function(data){
if(data.sta == 0){
$('body').prepend('采集成功,等待'+data.sle+'毫秒跳转到下个产品');
setTimeout(function(){
window.location.href = data.url;
},data.sle);
}else if(data.sta == 1){
alert('内容采集完成!');
}
},
error:function(){
alert('error');
}
});
})
}
getContent();4服务器提取需要的数据(示例代码)
//获取祥情
public function getContent(){
$html = input('html');
$url = input('url');
$id = Db::name('links')->where('url',$url)->value('id');
file_put_contents('./cjhtml/'.$id.'.html',$html);
Db::name('links')->where('id',$id)->update(['status'=>1]); //修改状态
$maxId = Db::name('links')->max('id');
if($id == $maxId){
return json(['url'=>'采集完成!','sta'=>1]);
}
$next = Db::name('links')->where('id','>',$id)->where('status',0)->order('id asc')->limit(1)->find();
$sle = mt_rand(2000,5000);
return json(['url'=>$next['url'],'sta'=>0,'sle'=>$sle]);
}5发布到自已的网站(示例代码)
//手动写入数据
public function pushData()
{
die();
$db2 = [
// 数据库类型
'type' => 'mysql',
// 数据库连接DSN配置
'dsn' => '',
// 服务器地址
'hostname' => '120.25.75.131',
// 数据库名
'database' => '1008',
// 数据库用户名
'username' => '1008',
// 数据库密码
'password' => 'HKTJAK2ishydFxe5',
// 数据库连接端口
'hostport' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => 'bp_',
];
//93">产品展示</option>
//132">|--------长排较</option>
//131">|--------脚杯</option>
//130">|--------拉手</option>
//129">|--------合页饺链</option>
//143 搭扣
$cateName = '搭扣类';
$data = Db::name('links')->where('cateName',$cateName)->field('title,imgs,content')->select();
$insertData = array();
foreach($data as $k=>$v){
$v['cover'] = json_decode($v['imgs'],true)[0];
$v['addtime'] = time();
$v['edittime'] = time();
$v['catid'] = 143;
$v['lang'] = 'def';
$insertData[$k] = $v;
}
foreach($insertData as $k=>$v){
$content = $v['content'];
unset($v['content']);
$dataId = Db::connect($db2)->table('bp_product')->insertGetId($v);
Db::connect($db2)->table('bp_product_data')->insert(['dataId'=>$dataId,'content'=>$content]);
}
echo $cateName.'写入成功';
}
注意
采集过程中注意访问页面的速度,一个页面随机2-5秒时间延迟,未发现阿里的验证,采集很顺利,
Fiddler 文件备份
tp5备份控制器与数据库备份