🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#### 百度地图获取-全国数据(名称,地址,电话) 通过调用百度地图,抓取全国某个地方的数据,如餐厅,车管所 #### 1.在百度地图开放api上注册一个帐号 并创建应用,获取一个调用密钥,一般密钥每天都有调用限制,有时需要好几天才能处理完一份数据 具体参考: http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-placeapi #### 2.需要自己有全国城市的数据,获取到百度地图去获取 接下来,在我的城市表里增加两个字段,isdeal:表示该城市是否处理完,dealpage:表示当前城市获取到第几页,默认从0开始,然后不断遍历城市获取数据,当处理完成或者处理不了把isdeal=1,处理完一页之后,dealpage+1. Php案例代码: ~~~ /** * 爬虫 -》车管所 -》交警大队 */ public function curl() { /** * 1.先获取城市 */ $cityService = service('City'); $officeService = service('BtrOffice'); //获取一个未处理城市 $city = $cityService->where(['isdeal' => 0])->order('id asc')->find(); if (!$city) { return success("数据已经处理完成!"); } $parameter = [ 'query' => '车管所',//要查询的地方,如餐厅 'page_size' => 20,//每页大小,最多20 'page_num' => $city['dealpage'], 'scope' => 1,//1 或空,则返回基本信息 'region' => $city['name'],//城市名称或百度地图城市代码 'output' => 'json',//返回格式 'ak'=>'c6hlXlNBKnVYMQVEIeX0MW7BRGPcGU17'//应用密钥,有限制 // 'ak' => '4oyItR1wqUfit5q4lGNO3kd5roGmmccy' ]; $url = 'http://api.map.baidu.com/place/v2/search?' . http_build_query($parameter);//拼接参数 $result = json_decode(http_request($url), true); if ($result['status'] != 0) {//返回错误结果 return error($result['message']); } if (isset($result['results'])) { $content = $result['results']; if (count($content) <= 0) {//过滤数据 $city['isdeal'] = 1; $res = $cityService->update($city); if ($res) { log_debug("获取车管所", $city['name'] . '处理完成'); return success("{$city['name']}-城市处理完成"); } else { log_debug("获取车管所", $city['name'] . '处理完成异常'); return error("{$city['name']}处理完成异常"); } } /** * 保存数据 */ foreach ($content as $item) { //省份数据 //数据有设置 if (isset($item['num'])&&$item['num']>=0) {//过滤数据 $city['isdeal'] = 1; $res = $cityService->update($city); if ($res) { log_debug("获取车管所", $city['name'] . '处理完成'); return success("{$city['name']}-城市处理完成"); } else { log_debug("获取车管所", $city['name'] . '处理完成异常'); return error("{$city['name']}处理完成异常"); } } //保存数据进库 $office['type'] = 1;//车管所 $office['city_id'] = $city['id']; if (isset($item['name'])) $office['name'] = $item['name']; else { continue; } if (isset($item['telephone'])) $office['phone'] = $item['telephone']; //组装地址 if (isset($item['address'])) $office['address'] = $item['address']; if (isset($item['location']['lat'])) $office['lat'] = $item['location']['lat']; if (isset($item['location']['lng'])) $office['lng'] = $item['location']['lng']; $res = $officeService->add($office); if (!$res) { log_debug("车管所数据", "添加失败"); } } //处理下一页 $city['dealpage'] = $city['dealpage'] + 1; $res = $cityService->update($city); if (!$res) { log_debug("车管所数据", "处理下一页失败"); return error($city['name'] . ":处理一页失败"); } else { return success($city['name'] . ":处理一页"); } } else { $city['isdeal'] = 1; $res = $cityService->update($city); if ($res) { log_debug("获取车管所", $city['name'] . '处理完成'); return success("{$city['name']}-城市处理完成"); } else { log_debug("获取车管所", $city['name'] . '处理完成异常'); return error("{$city['name']}处理完成异常"); } } } ~~~ 结果预览: ![](https://box.kancloud.cn/668912898856b8fae501344822e52d6b_906x599.png)