肯德基餐厅查询:
肯德基餐厅查询:
url=http://www.kfc.com.cn/kfccda/storelist/index.aspx
1.分析:
-数据为动态加载数据(输入城市关键字查询之后,url并没有改变,说明数据是动态加载出来的)
-通过抓包工具搜索捕获动态加载数据
import requests
url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
headers={"User-Agent":'Mozilla/5.0(Windows NT 10.0;WOW64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/85.0.4183.121Safari/537.36'
}
#此处随便找了一个headers定义
response=requests.get(url=url)
page_text=response.text
data={"cname":"","pid":"","keyword":"上海","pageIndex":"1","pageSize":"10",
}
#参数:data是用来实现参数动态化,等同与get方法中的params参数的作用
response=requests.post(url=url,headers=headers,data=data)
page_text=response.json()
page_text
输出结果{‘Table’: [{‘rowcount’: 34}],
‘Table1’: [{‘rownum’: 1,
‘storeName’: ‘开发区上海路’,
‘addressDetail’: ‘开发区上海路80号利群时代超市一楼’,
‘pro’: ‘24小时,Wi-Fi,店内参观,礼品卡’,
‘provinceName’: ‘江苏省’,
‘cityName’: ‘南通市’},
{‘rownum’: 2,
‘storeName’: ‘太仓新区东亭路’,
‘addressDetail’: ‘太仓市娄江路与县府街交叉口西南侧(太仓新区上海路北、东亭路东地块)万达广场’,
‘pro’: ‘Wi-Fi,点唱机,店内参观,礼品卡,生日餐会’,
‘provinceName’: ‘江苏省’,
‘cityName’: ‘苏州市’},
{‘rownum’: 3,
‘storeName’: ‘动力南广场(汇金奥特莱斯B1层)’,
‘addressDetail’: ‘石龙路750-3号上海南站地下商场南馆’,
‘pro’: ‘礼品卡’,
‘provinceName’: ‘上海市’,
‘cityName’: ‘上海市’},
{‘rownum’: 4,
‘storeName’: ‘南广场’,
‘addressDetail’: ‘秣陵路303号上海火车站西南出口一侧’,
‘pro’: ‘Wi-Fi,礼品卡’,
‘provinceName’: ‘上海市’,
‘cityName’: ‘上海市’},
{‘rownum’: 5,
‘storeName’: ‘北广场’,
‘addressDetail’: ‘秣陵路303号上海站北广场北立面1F大厅入口西侧位置’,
‘pro’: ‘Wi-Fi’,
‘provinceName’: ‘上海市’,
‘cityName’: ‘上海市’},
{‘rownum’: 6,
‘storeName’: ‘南站精选(火车站站内)’,
‘addressDetail’: ‘沪闵路9001号上海南站候车大厅’,
‘pro’: ‘精选店,礼品卡’,
‘provinceName’: ‘上海市’,
‘cityName’: ‘上海市’},
{‘rownum’: 7,
‘storeName’: ‘上海滩’,
‘addressDetail’: ‘佘山林湖路888号-1上海滩区5号’,
‘pro’: ‘Wi-Fi,精选店,礼品卡’,
‘provinceName’: ‘上海市’,
‘cityName’: ‘上海市’},
{‘rownum’: 8,
‘storeName’: ‘动力南精选(3号线2号出口)’,
‘addressDetail’: ‘沪闵路9001号上海南站(1F三角地A-1)一层’,
‘pro’: ‘精选店,礼品卡’,
‘provinceName’: ‘上海市’,
‘cityName’: ‘上海市’},
{‘rownum’: 9,
‘storeName’: ‘上海南路’,
‘addressDetail’: ‘青山湖区上海路3号’,
‘pro’: ‘Wi-Fi,店内参观,礼品卡,生日餐会’,
‘provinceName’: ‘江西省’,
‘cityName’: ‘南昌市’},
{‘rownum’: 10,
‘storeName’: ‘长安休息站南(上海方向)’,
‘addressDetail’: ‘沪杭高速长安服务区南(上海方向)’,
‘pro’: ‘点唱机,精选店,礼品卡’,
‘provinceName’: ‘浙江省’,
‘cityName’: ‘嘉兴市’}]}
2.提取店名和位置信息
import requests
url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
headers={"User-Agent":'Mozilla/5.0(Windows NT 10.0;WOW64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/85.0.4183.121Safari/537.36'
}
#此处随便找了一个headers定义
response=requests.get(url=url)
page_text=response.text
data={"cname":"","pid":"","keyword":"上海","pageIndex":"1","pageSize":"10",
}
#参数:data是用来实现参数动态化,等同与get方法中的params参数的作用
response=requests.post(url=url,headers=headers,data=data)
page_text=response.json()
for dic in page_text['Table1']:pos=dic['addressDetail']print(pos)
此时的结果
开发区上海路80号利群时代超市一楼
太仓市娄江路与县府街交叉口西南侧(太仓新区上海路北、东亭路东地块)万达广场
石龙路750-3号上海南站地下商场南馆
秣陵路303号上海火车站西南出口一侧
秣陵路303号上海站北广场北立面1F大厅入口西侧位置
沪闵路9001号上海南站候车大厅
佘山林湖路888号-1上海滩区5号
沪闵路9001号上海南站(1F三角地A-1)一层
青山湖区上海路3号
沪杭高速长安服务区南(上海方向)
3想要获取所有页码对应的位置信息(上面只是获取第一页的信息)
点击其他页面时只有pageIndex不同
#想要获取所有页码对应的位置信息
import requests
url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
headers={"User-Agent":'Mozilla/5.0(Windows NT 10.0;WOW64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/85.0.4183.121Safari/537.36'
}
#此处随便找了一个headers定义
response=requests.get(url=url)
page_text=response.text
#上海kfc一共四页,所以遍历4次
for pageNum in range(1,4):data={"cname":"","pid":"","keyword":"上海","pageIndex":str(pageNum),"pageSize":"10",}#参数:data是用来实现参数动态化,等同与get方法中的params参数的作用response=requests.post(url=url,headers=headers,data=data)page_text=response.json()for dic in page_text['Table1']:pos=dic['addressDetail']print(pos)
此时输出结果为全部的肯德基餐厅位置(1-4页)
开发区上海路80号利群时代超市一楼
太仓市娄江路与县府街交叉口西南侧(太仓新区上海路北、东亭路东地块)万达广场
石龙路750-3号上海南站地下商场南馆
秣陵路303号上海火车站西南出口一侧
秣陵路303号上海站北广场北立面1F大厅入口西侧位置
沪闵路9001号上海南站候车大厅
佘山林湖路888号-1上海滩区5号
沪闵路9001号上海南站(1F三角地A-1)一层
青山湖区上海路3号
沪杭高速长安服务区南(上海方向)
经济技术开发区天宝园五里二区A1+A2户一层
沂蒙路与上海路交汇处颐高上海街一期铺位258、259号两层
人民西路93号1、2层
上海南路与苏州西路交汇处
上海路四段二号
杨浦区四平路903号肯德基
乳山路136号
秣陵路303号上海站南广场站内一层过安检电梯口旁
南坪西路上海城一层
上海浦东新区机场镇晨阳路196号
上海路与和平街交叉口大润发商业广场一楼肯德基
秣陵路303号上海火车站东南出口东侧一层
铁路上海虹桥站出发层商铺号:3F-A3-1
上海北路230号肯德基
新东路101号地块(上海东路北、新河东路东)世茂广场大润发超市内
盈港东路158号国家会展中心(上海)之商业广场一层D-L114号、二层D-L220号
上海道与洞庭路交口
沪蓉高速公路(G42)江苏段仙人山服务区南区一层
上海街99号卓展购物中心二期
东长治路588号上海白玉兰广场商场LG2—M55