php抓取网页动态数据(经理让做一个插件,demo中要直接保存id,)
优采云 发布时间: 2021-10-16 20:00php抓取网页动态数据(经理让做一个插件,demo中要直接保存id,)
前言:10月20日星期五,经理要求做一个插件,用thinkphp做这个demo
如果你在使用CURL获取远程数据时出现乱码,可以加入
header("content-type:text/html;charset=utf-8");
或者使用mb_convert_encoding函数来转换字符编码
这个demo最终要捕获的信息是经过不断的分层调用,即
1.根据a*敏*感*词*ey获取所有品牌并获取品牌id
2.根据品牌id获取所有型号,获取型号id
3.根据model id获取所有样式,并获取样式Id
4.根据样式Id获取详细信息
使用json解码函数解析服务端返回的Json数据,注意不要添加
//curl_setopt($ch, CURLOPT_HEADER, 1);//不加,否则无法正确解析json数据,因为数据收录更多http头信息
json_decode函数的第二个参数为true,保证返回值是数组
使用 $this->assign("模板变量名", $decoded array)
所有品牌数据都可以在前端的下拉列表中获取:
请选择品牌:
{$vo.name}
使用ajax将选中的下拉列表值传递给后端,使用循环数组的方法根据值获取品牌id
$(document).ready(function(){
var car1=$("#list1 option:selected").val();
$.ajax({
type:"post",
url:"{:U('Home/Car/car1')}",
data:"car1="+car1,
success:function(html){
if(html){
// alert(html);
$("#list2").html(html);
}
}
});
});
获取id输出模型数据,后端代码:
//得到品牌的名称
$car1=I('post.car1');
...............................//部分curl省略
$json1=json_decode($output,true);
$result = $json1['result'];
foreach($result as $a){
foreach($a as $b){
if($b==$car1){
//此处的$id1是要传递给url的
$id1=$a['id'];
}
}
}
..............................//再次进行curl操作,根据id得到所有的车型信息
$json2=json_decode($rs2,true);
$result2 = $json2['result'];
dump($result2);
//将型号的数组数据保存至session中,在型号的下拉列表中根据型号值遍历数组得到型号id
session("result2",$result2);
foreach($result2 as $val){
echo $str1=''."".'';
foreach($val['list'] as $v) {
$str1=''.$v['name'].'';
echo $str1;
}
}
上面的方法是对的,为什么不直接在session中保存id,因为前端ajax动态选择模型名,直接在一个控制器中的方法并没有得到用户选择的模型
根据模型选择样式的ajax代码和上面类似,然后还是遍历。遍历session中保存的数组获取model id,然后根据id获取style的数组数据,输出html
通过上面的方法类推,整个demo就完成了
以下是使用 CURL 的规则: