網站上有很多jq的聯動,主要是城市地區數據,那我們怎么獲取到這些數據并且保存在我們的數據表中,這是國家的數據,下面我們用PHP程序將他們采集下來
1.數據采集
publicfunctioncountryaddress(){
$ModelObj=D('Areas');
$baseUrl='http://www.300.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2023/';
//第一級
$firstDetail=file_get_contents($baseUrl.'index.html');
$firstPattern='/tdahref=\'(\d+).html\'(.*?)br\/\/a\/td/i';
preg_match_all($firstPattern,$firstDetail,$firstResult);
$urllist=$firstResult[1];
$namelist=$firstResult[2];
foreach($namelistas$k=$v){
$iscun=$ModelObj-where(array('name'=iconv('GB2312','UTF-8',$v)))-find();
if(!$iscun){
$adddata=array(
'code'=$k+1,//省級編碼暫時默認以排序號來定
'name'=iconv('GB2312','UTF-8',$v),
'parent_id'=0,
);
$first_re=$ModelObj-data($adddata)-add();
if($first_re){
//第二級
$secondDetail=file_get_contents($baseUrl.$urllist[$k].'.html');
$secondPattern=/tdahref=\'.$urllist[$k].\/(\d+?)\.html\'(\d+?)\/a\/tdtdahref=\'.$urllist[$k].\/(\d+?)\.html\'(.*?)\/a/i;
preg_match_all($secondPattern,$secondDetail,$secondResult);
$secondUrlList=$secondResult[1];
$secondCodeList=$secondResult[2];
$secondNameList=$secondResult[4];
foreach($secondNameListas$m=$n){
$iscun=$ModelObj-where(array('name'=iconv('GB2312','UTF-8',$n),'parent_id'=$first_re))-find();
if(!$iscun){
$adddata=array(
'code'=$secondCodeList[$m],
'name'=iconv('GB2312','UTF-8',$n),
'parent_id'=$first_re,
);
$second_re=$ModelObj-add($adddata);
if($second_re){
//第
$thirdDetail=file_get_contents($baseUrl.$urllist[$k].'/'.$secondUrlList[$m].'.html');
$thirdPattern='/td(?:ahref=\'.*?\')*(\d+?)(?:\/a)*\/tdtd(?:ahref=\'.*?\')*(.*?)(?:\/a)*\/td/i';
preg_match_all($thirdPattern,$thirdDetail,$thirdResult);
$thirdCodeList=$thirdResult[1];
$thirdNameList=$thirdResult[2];
foreach($thirdNameListas$p=$q){
$iscun=$ModelObj-where(array('name'=iconv('GB2312','UTF-8',$q),'parent_id'=$second_re))-find();
if(!$iscun){
$adddata=array(
'code'=$thirdCodeList[$p],
'name'=iconv('GB2312','UTF-8',$q),
'parent_id'=$second_re,
);
$third_re=$ModelObj-add($adddata);
}
}
}
}
}
}
}
}
}
2.省級代碼替換
/**
*
*/
publicfunctionprovincereplace(){
//省級code
$provinceCode=array(
array('code'='110000','title'='北京市'),
array('code'='120000','title'='天津市'),
array('code'='130000','title'='河北省'),
array('code'='140000','title'='山西省'),
array('code'='150000','title'='內蒙古自治區'),
array('code'='210000','title'='遼寧省'),
array('code'='220000','title'='吉林省'),
array('code'='230000','title'='黑龍江省'),
array('code'='310000','title'='上海市'),
array('code'='320000','title'='江蘇省'),
array('code'='330000','title'='浙江省'),
array('code'='340000','title'='安徽省'),
array('code'='350000','title'='福建省'),
array('code'='360000','title'='江西省'),
array('code'='370000','title'='山東省'),
array('code'='410000','title'='河南省'),
array('code'='420000','title'='湖北省'),
array('code'='430000','title'='湖南省'),
array('code'='440000','title'='廣東省'),
array('code'='450000','title'='廣西壯族自治區'),
array('code'='460000','title'='海南省'),
array('code'='500000','title'='重慶市'),
array('code'='510000','title'='四川省'),
array('code'='520000','title'='貴州省'),
array('code'='530000','title'='云南省'),
array('code'='540000','title'='西藏自治區'),
array('code'='610000','title'='陜西省'),
array('code'='620000','title'='甘肅省'),
array('code'='630000','title'='青海省'),
array('code'='640000','title'='寧夏回族自治區'),
array('code'='650000','title'='新疆維吾爾自治區'),
);
$ModelObj=D('Areas');
foreach($provinceCodeas$k=$v){
$ModelObj-where(array('name'=$v['title']))-setField('code',$v['code']);
}
}
3.處理級別父級代碼
/**
*處理級別父級代碼
*/
publicfunctionlevelandparentcode(){
$ModelObj=D('Areas');
$alllist=$ModelObj-select();
foreach($alllistas$k=$v){
if(!$v['parent_id']){
$data=array(
'level'=1,
'parent_code'='0',
);
}else{
$parent=$ModelObj-where(array('id'=$v['parent_id']))-find();
if(!$parent['parent_id']){
$data=array(
'level'=2,
'parent_code'=$parent['code'],
);
}else{
$data=array(
'level'=3,
'parent_code'=$parent['code'],
);
}
}
$re=$ModelObj-where(array('id'=$v['id']))-save($data);
}
}
4.有了的數據做聯動就很簡單。
formid=searce
pclass=screen-li
selectname=provinceid=province
optionvalue=省/option
volistname=provinceid=item!--循環省數據--
optionvalue={$item.code}{$item.name}/option
/volist
/select
/
pclass=screen-li
selectname='city'id=city
optionvalue=市/option
/select
/
pclass=screen-li
selectname='area'id=area
optionvalue=區/縣/option
/select
/
script
$('#province).change(function(){
id=$(this).val();
get_city(id)
})
functionget_city(id){
url_get_city={:U('city')}?id=+id
$(#city).load(url_get_city,{n:Math.random()});
}
$('#city).change(function(){
id=$(this).val();
get_area(id)
})
functionget_area(id){
url_get_area={:U('area')}?id=+id
$(#area).load(url_get_area,{n:Math.random()});
}
/script
后臺只要通過id查詢出該級別下的數據就可以