KFC门店信息获取 爬虫实战

最近在帮客户做东西时需要用到kfc的门店信息查询数据,在浏览了一圈博客之后,貌似大家都是采用

selenium + PhantomJS 

这种方式抓取kfc的ajax动态网页,

其实在分析了一波该网站的请求之后,相对来说还是很简单的一个爬虫,该网站甚至没有做浏览器的验证

url = http://www.kfc.com.cn/kfccda/storelist/index.aspx

如图:

在我们查询一个城市之后发现浏览器接受了一个json文件

再来分析一下请求头

可以看到该请求是通过POST方式像服务器发起了的

然后做下面还有一个Form data,这个是前台表单提交的数据,分析到这我们不如先来尝试一下模拟提交一次表单

 

URL = "http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname"
params = {'cname': city,'pageSize': 10
}
html = requests.post(URL, data=params)
info = json.loads(html.text)
print(info)

 运行如下:

{'Table': [{'rowcount': 43}], 'Table1': [{'rownum': 1, 'storeName': '山姆', 'addressDetail': '春城路沃尔玛一层', 'pro': 'Wi-Fi,点唱机,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 2, 'storeName': '大观', 'addressDetail': '大观街大观商业城沃尔玛1层', 'pro': 'Wi-Fi,点唱机,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 3, 'storeName': '吉大', 'addressDetail': '环城东路188号', 'pro': 'Wi-Fi,点唱机,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 4, 'storeName': '白云', 'addressDetail': '北京路延长线大白庙村家乐福超市一楼', 'pro': 'Wi-Fi,点唱机,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 5, 'storeName': '新迎', 'addressDetail': '新迎路212号好又多超市', 'pro': 'Wi-Fi,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 6, 'storeName': '青年路', 'addressDetail': '人民中路17号新西南大厦广场', 'pro': 'Wi-Fi,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 7, 'storeName': '龙泉', 'addressDetail': '龙泉路35-37号', 'pro': 'Wi-Fi,礼品卡', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 8, 'storeName': '北辰', 'addressDetail': '北京路延长线财富中心E栋', 'pro': 'Wi-Fi,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 9, 'storeName': '东寺街', 'addressDetail': '昆明东寺街中段东方广场A座一二层', 'pro': 'Wi-Fi,店内参观,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 10, 'storeName': '西山', 'addressDetail': '兴苑路城市领地花园超市一层', 'pro': 'Wi-Fi,店内参观,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 11, 'storeName': '新闻路', 'addressDetail': '新闻路337号-339号一层', 'pro': 'Wi-Fi,店内参观,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 12, 'storeName': '云大', 'addressDetail': '圆通东路佰腾数码广场一楼', 'pro': 'Wi-Fi,礼品卡', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 13, 'storeName': '正义路', 'addressDetail': '人民中路51、53号正义西街133号一层及正义坊A1栋二层', 'pro': 'Wi-Fi,点唱机,店内参观,礼品卡', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 14, 'storeName': '世纪城', 'addressDetail': '金源大道一号世纪金源购物中心一楼肯德基餐厅', 'pro': 'Wi-Fi,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 15, 'storeName': '云山路', 'addressDetail': '云山路与二环西路交叉口', 'pro': 'Wi-Fi,店内参观,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 16, 'storeName': '正大紫都城', 'addressDetail': '交菱路与二环西路交叉口正大紫都城一楼', 'pro': 'Wi-Fi,店内参观,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 17, 'storeName': '嘉年华', 'addressDetail': '烟草路嘉年华购物广场一层', 'pro': 'Wi-Fi,店内参观,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 18, 'storeName': '新南亚', 'addressDetail': '西山区滇池路南亚风情第一城A2栋一楼', 'pro': 'Wi-Fi,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 19, 'storeName': '光辉城市', 'addressDetail': '前兴路,光辉城市(沃尔玛入口)', 'pro': 'Wi-Fi,点唱机,店内参观,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 20, 'storeName': '和谐世纪', 'addressDetail': '小康大道,和谐世纪一层', 'pro': 'Wi-Fi,店内参观,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 21, 'storeName': '长水机场', 'addressDetail': '昆明长水国际机场候机楼负一楼', 'pro': '机场店,礼品卡', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 22, 'storeName': '星耀路', 'addressDetail': '星耀路星都总部基地星世界A座1-2层', 'pro': 'Wi-Fi,店内参观,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 23, 'storeName': '大屯', 'addressDetail': '安宁大屯路与珍泉交叉路口金色时代广场', 'pro': 'Wi-Fi,店内参观,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 24, 'storeName': '益龙万象城', 'addressDetail': '环城东路与白龙路交叉口益龙万象城一楼', 'pro': '店内参观,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 25, 'storeName': '新柏联', 'addressDetail': '三市街六号柏联广场商业廊一、二楼', 'pro': 'Wi-Fi,店内参观,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 26, 'storeName': '官南', 'addressDetail': '官南大道2169号大润发商业广场一楼2号商铺', 'pro': 'Wi-Fi,店内参观,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 27, 'storeName': '启鸿假日', 'addressDetail': '昆明假日城市小区一层', 'pro': 'Wi-Fi,店内参观,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 28, 'storeName': '新螺蛳湾二期', 'addressDetail': '宏仁片区昆明螺蛳湾商贸城二期5号楼F1-2', 'pro': 'Wi-Fi,店内参观', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 29, 'storeName': '前兴路万达', 'addressDetail': '前兴路万达广场二层', 'pro': 'Wi-Fi,店内参观,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 30, 'storeName': '长水机场精选', 'addressDetail': '昆明长水国际机场出发大厅区域B1-1号', 'pro': '精选店,礼品卡', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 31, 'storeName': '金方', 'addressDetail': '湖滨西路,金方扩建项目1.2层', 'pro': 'Wi-Fi,点唱机,店内参观,礼品卡', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 32, 'storeName': '海伦国际', 'addressDetail': '金源大道与广福路交汇处海伦国际', 'pro': 'Wi-Fi,店内参观,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 33, 'storeName': '美辰', 'addressDetail': '人民中路美辰百货1F肯德基', 'pro': 'Wi-Fi,点唱机,礼品卡,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 34, 'storeName': '昆明高铁到达', 'addressDetail': '昆明呈贡高铁站', 'pro': 'Wi-Fi', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 35, 'storeName': '长水机场到达精选', 'addressDetail': '昆明长水机场国际候机楼出发大厅', 'pro': '精选店', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 36, 'storeName': '机场安检内', 'addressDetail': '昆明长水国际机场安检区内', 'pro': '机场店', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 37, 'storeName': '机场精选出发浮岛F4层', 'addressDetail': '昆明长水机场出发层浮岛4F', 'pro': '精选店', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 38, 'storeName': '新顺城', 'addressDetail': '崇仁街11号一层F1-64/二层F2-12', 'pro': 'Wi-Fi,点唱机,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 39, 'storeName': '新顺城', 'addressDetail': '崇仁街11号一层F1-64/二层F2-12', 'pro': 'Wi-Fi,点唱机,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 40, 'storeName': '云投中心', 'addressDetail': '人民西路云投财富商业广场一层112号铺', 'pro': 'Wi-Fi,店内参观,生日餐会', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 41, 'storeName': '高新吾悦', 'addressDetail': '普吉街道办事处玉筇路与沙河路新城吾悦广场一层1031号商铺', 'pro': 'Wi-Fi,点唱机,店内参观,精选店', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 42, 'storeName': '昆明南站出发层', 'addressDetail': '昆明南站J20号商铺', 'pro': 'Wi-Fi,精选店', 'provinceName': '云南省', 'cityName': '昆明市'}, {'rownum': 43, 'storeName': '昆明火车站', 'addressDetail': '昆明站站房东侧一楼11号商铺', 'pro': 'Wi-Fi,点唱机,精选店', 'provinceName': '云南省', 'cityName': '昆明市'}]}

数据还算规整,只要稍作处理就可以用,

完整代码如下:

 

import requests
import jsonclass EasyKFC:URL = "http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname"# 得到所在城市kfc门店的数量 params:int@staticmethoddef get_num(city):""":param city:str:return:int"""params = {'cname': city,'pageSize': 0}html = requests.post(EasyKFC.URL, data=params)info = json.loads(html.text)return int(info['Table'][0]['rowcount'])# 得到所有kfc门店@staticmethoddef get_all_info(city):""":param city:str:return:dict"""params = {'cname': city,'pageSize': EasyKFC.get_num(city)}html = requests.post(EasyKFC.URL, data=params)info = json.loads(html.text)info['rowcount'] = int(info['Table'][0]['rowcount'])for i in info['Table1']:i['addressDetail'] = i['cityName'] + i['addressDetail']i['storeName'] = i['storeName'] + '餐厅'info.pop('Table')return info# 指定所在城市kfc最大获取数量 返回一个字典,@staticmethoddef get_info(city, num):""":param city:str:param num:int:return:dict"""params = {'cname': city,'pageSize': num}html = requests.post(EasyKFC.URL, data=params)info = json.loads(html.text)info['rowcount'] = int(info['Table'][0]['rowcount'])for i in info['Table1']:i['addressDetail'] = i['cityName'] + i['addressDetail']i['storeName'] = i['storeName'] + '餐厅'info.pop('Table')return info

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/29162.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

KFC点餐收银

一、问题描述 参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C或Java或Python结合设计模式(2种以上)至少实现系统的以下功能: 1.正常餐品结算和找零。 2.基本套餐结算和找零。 3.使用优惠劵购买餐品结算和找零。 4.可在…

肯德基收银系统

肯德基收银系统 一.题目分析 同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C或Java或Python结合设计模式(2种以上)至少实现系统的以下功能: 1.正常餐品结…

肯德基 服务器响应异常,肯德基链接服务器异常

肯德基链接服务器异常 内容精选 换一换 精简视图提供了云服务器资源概况和状态的可视化统计结果,帮助您直观的了解云服务器资源。在精简视图中,您可以快速获取弹性云服务器基本信息、登录信息、配置信息、监控信息。精简视图提供了云服务器资源概况和状态的可视化统计结果,直…

如何在手机上完成日语翻译中文

如何在手机上完成日语翻译中文?作为从小看《海贼王》、《名侦探柯南》、《火影忍者》等一系列日漫长大的我们,自然有一种想要学习日语的冲动。但是学习一种语言不是一朝一夕就能完成的,虽然小编不能让你瞬间学会日语,但是有一种让…

如何将日语在线翻译成中文

如何将日语在线翻译成中文?日本的动漫产业非常发达,作为从小看日漫长大的我们,谁都想学习几句日语或者将我们的口头禅翻译为日语。所以今天小编将要教大家一个方法,帮助小伙伴们快速将日语在线翻译为中文,小伙伴们要不…

以下工具能够翻译日语文字

随着全球化的发展,商务交流越来越频繁,很多企业需要进行日语翻译服务以便更好地沟通和合作;在日本旅游,游客需要与当地人交流并了解当地文化,而日语翻译可以帮助游客更好地跨越语言障碍;学术研究需要涉及到…

日语翻译中文-大家都再用的日语转换中文的转换器

日语翻译中文,今天给大家分享一款英免费翻译软件,我们为什么要选择这款好用的翻译软件,因为汇集了世界最好的几个翻译平台(百度/谷歌/有道),第一点翻译质量高,选择性多。第二点支持各种语言互译…

如何跟聊天机器人一起绘画?

出品人:Towhee 技术团队 顾梦佳 从AI作画背后的 Diffusion 到智能聊天里的 ChatGPT,生成模型的热潮一浪接着一浪,似乎也预示着超大预训练模型就是人工智能的未来。在万众瞩目的 GPT 4.0 “官宣”之前,微软率先发布融合了大语言模型…

科研绘图(编程绘图、网站绘图、配色、素材、提取数...)

配色网站:https://mycolor.space/ 素材网站:https://www.freepik.com/ python:seaborn库:https://zhuanlan.zhihu.com/p/81553421?utm_sourcewechat_session matlab:绘图代码示例:知乎:阿昆的科…

汤姆猫+AI求IP“翻红”?股东年内忙减持

作为初代手机宠物陪伴游戏,“会说话的汤姆猫”曾在全球积累了大量粉丝,汤姆猫IP也成为一代经典。2017年,A股上市公司金科文化将诞生自海外“汤姆猫”收入麾下。你或许不知道,汤姆猫已成为中国A股市场的一只股票代码。 在金科文化…

ChatGPT 驱动的《会聊天的汤姆猫》封测结束,采用生成式 AI 创作美术

金科汤姆猫公司的《会说话的汤姆猫》此前利用 ChatGPT 技术全新打造了《会聊天的汤姆猫》,从技术创新和产品升级的角度来看,这是一次具有积极意义的尝试。但产品功能有所欠缺,且只有安卓平台可用,于 3 月开启封测。 据金科汤姆猫…

Nginx 代理Nexus 页面静态元素(图片)404!

日常踩坑记录。 如果你也遇到了可以尝试修改下看能否改善你的问题。 nginx 旧配置 # Nexus maven 私有仓库location /nexus {proxy_pass http://192.168.128.168:89/nexus;} 访问页面 虽然不影响使用,但是logo 小图标你都不显示,看着不舒服。解决它 …

chatgpt赋能python:Python常见错误及解决方法

Python常见错误及解决方法 Python作为一种非常流行的动态语言,拥有着丰富的库和工具,因其易读性和高效性,被广泛的用于Web开发、数据分析、科学计算等领域。但是,在我们编写Python程序的过程中,也难免会遇到各种各样的…

社区供稿 | 中文 LangChain 项目的实现开源工作

Chinese-LangChain 是 yanqiangmiffy 同学的开源项目https://hf.co/spaces/ChallengeHub/Chinese-LangChainhttps://github.com/yanqiangmiffy/Chinese-LangChain 中文 langchain 项目,基于 ChatGLM-6b langchain 实现本地化知识库检索与智能答案生成。 LangChain …

我们是怎么把1天变成了72小时的?普惠AGIUI开源项目

(想看重播的读者可以翻到文章底部~) 不知大家有没有想过如何把一天24小时的时间变长?还有如何知道自己下一步应该做什么? 现在这些都可以基于大语言模型LLM来帮我们实现(模拟仿真)了,LLM具备推理…

chatgpt赋能python:Python如何创建角色

Python如何创建角色 在游戏开发中,创建角色是非常重要的一个环节,也是游戏设计的重要一环。Python作为一种广泛使用的编程语言,可以用于快速且高效地创建角色。 1. 创建角色的基本思路 创建角色的主要思路是定义角色的属性,包括…

【好用的办公软件】万彩办公大师教程丨标准安装版/绿色免安装版/离线版区别

万彩办公大师标准安装版:下载后,解压,双击安装包,需要像安装普通软件那样,一步步的安装; 万彩办公大师绿色免安装版:下载完,解压,不需要安装,直接双击图中文件…

【电脑常用办公软件】万彩办公大师教程丨全能视频转换工具

关于万彩办公大师的全能视频转换工具 全能视频转换工具兼容Windows操作系统,实现多种视频格式间的流畅转换。支持批量转换视频到其他格式;支持多种输出视频格式,自定义质量和大小,最大程度上满足其想要在不同播放设备上播放视频的…

【免费思维导图软件】万彩脑图大师教程 | 导出导入思维导图模板

在万彩脑图大师中, 你可以轻松导出导入思维导图模板进行保存或编辑,具体操作步骤如下: 一、导出模板 1)单击左上角的“文件“—点击“保存成模板“—输入标题,关键字以及进行高级模板设置—保存 【图1▲】 2&#…

【免费思维导图软件】万彩脑图大师教程 | 贯穿思维导图演示过程的背景音乐设置

添加背景音乐可以赋予思维导图画面感和节奏感,渲染特定氛围,调动观众情绪,使之全身心投入参与到演示之中。您可以在“选项”窗口中为思维导图添加和设置背景音乐。 添加设置背景音乐的具体操作步骤如下: 1. 添加背景音乐 “选项…