项目案例实现|Python爬虫 03:爬取城市肯德基餐厅信息
- 项目来源
- 项目需求
- 具体分析
-
- 1. 指定URL
- 2. UA伪装
- 3. 发送请求
- 4. 获取响应结果
- 5. 持久化存储
- 6. 个性化需求
- 项目代码
- 检验
项目来源 本项目来源B站UP主路飞学城视频:视频链接点这里
项目需求 利用爬虫爬取全国不同城市的肯德基餐厅信息
具体分析 1. 指定URL 项目用到的URL为肯德基餐厅地址查询,点击打开后跳转至该页面。通过抓包工具对整张页面发请求,查看拿到的响应数据发现没有任何信息,可见在本需求下,不再是对整张页面发请求,而是对局部数据的提取。随意输入一个城市名称进行查询,此处以’武汉’为例,观察上方URL没有发生变化且页面也没有跳转,初步估计获取的信息是ajax请求到的。打开抓包工具的ajax请求界面,拿到一个数据包如下:
文章图片
数据包中表明该请求为一个post请求,URL为
http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword
,此URL即为目标URL。url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
2. UA伪装
header = {
'User-Agent': 'Mozilla/5.0 (Macintosh;
Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
3. 发送请求 通过前面的分析,对该URL地址发送请求
params = {'cname': '',
'pid': '',
'keyword': '武汉',
'pageIndex': '1',
'pageSize': '10'
}
res = requests.post(url=url, data=https://www.it610.com/article/params, headers=header)
4. 获取响应结果 在抓包工具中查询得返回的响应结果的数据类型为text类型,故以text形式保存
text_obj = res.text
5. 持久化存储 json文件也能存储text内容,此处调用json模块进行存储
filename = '武汉' + '.json'
fp = open(filename, 'w', encoding='utf-8')
json.dump(text_obj, fp=fp, ensure_ascii=False)
6. 个性化需求 通过改变参数字典中keyword值以及pageIndex的值即可完成对不同城市的查询以及翻页操作。
项目代码
# -*- coding: utf-8 -*-
# @author: QIN
# @time: 2021/1/11 12:36
# @function :
import requests
import jsonif __name__ == '__main__':
url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
header = {
'User-Agent': 'Mozilla/5.0 (Macintosh;
Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
keyword = input('输入查询城市名称:')
params = {'cname': '',
'pid': '',
'keyword': keyword,
'pageIndex': '1',
'pageSize': '10'
}
res = requests.post(url=url, data=https://www.it610.com/article/params, headers=header)
text_obj = res.text
filename = keyword +'.json'
fp = open(filename, 'w', encoding='utf-8')
json.dump(text_obj, fp=fp, ensure_ascii=False)
print('查询结果保存成功')
这里只做了不同城市的动态查询,下面对程序进行检验
检验 输入武汉,将保存的json文件通过json解析器解析
{【python|Python学习记录-项目案例实现(爬虫篇 03)】
“Table”: [{
“rowcount”: 13
}],
“Table1”: [{
“rownum”: 1,
“storeName”: “武汉徐东”,
“addressDetail”: “徐东大街18号销品茂一层”,
“pro”: “Wi-Fi,点唱机,礼品卡,生日餐会”,
“provinceName”: “湖北省”,
“cityName”: “武汉市”
}, {
“rownum”: 2,
“storeName”: “光谷”,
“addressDetail”: “珞瑜路456号武汉光谷国际商会大厦1-2层”,
“pro”: “Wi-Fi,礼品卡”,
“provinceName”: “湖北省”,
“cityName”: “武汉市”
}, {
“rownum”: 3,
“storeName”: “武大”,
“addressDetail”: “珞珈山路19号武汉大学正门对面中商平价一楼”,
“pro”: “Wi-Fi,点唱机,礼品卡”,
“provinceName”: “湖北省”,
“cityName”: “武汉市”
}, {
“rownum”: 4,
“storeName”: “武展”,
“addressDetail”: “解放大道696号武汉国际会展中心负一楼西下沉式广场”,
“pro”: “Wi-Fi,点唱机,礼品卡”,
“provinceName”: “湖北省”,
“cityName”: “武汉市”
}, {
“rownum”: 5,
“storeName”: “武汉站”,
“addressDetail”: “武汉火车站东出站口”,
“pro”: “Wi-Fi,礼品卡”,
“provinceName”: “湖北省”,
“cityName”: “武汉市”
}, {
“rownum”: 6,
“storeName”: “武汉火车站二”,
“addressDetail”: “武汉火车站西站广场”,
“pro”: “Wi-Fi”,
“provinceName”: “湖北省”,
“cityName”: “武汉市”
}, {
“rownum”: 7,
“storeName”: “T3到达”,
“addressDetail”: “武汉天河机场3号航站楼到达层A出口”,
“pro”: “Wi-Fi,机场店”,
“provinceName”: “湖北省”,
“cityName”: “武汉市”
}, {
“rownum”: 8,
“storeName”: “T3出发”,
“addressDetail”: “武汉天河机场3号航站楼出发层(禁区内)”,
“pro”: “Wi-Fi,点唱机,机场店”,
“provinceName”: “湖北省”,
“cityName”: “武汉市”
}, {
“rownum”: 9,
“storeName”: “奥山甜品站”,
“addressDetail”: “青山区和平大道809号罗家港路口武汉奥山世纪广场一层G1053号商铺”,
“pro”: null,
“provinceName”: “湖北省”,
“cityName”: “武汉市”
}, {
“rownum”: 10,
“storeName”: “中弘”,
“addressDetail”: “涧西区武汉路以东、联盟路以北、康滇路以西、规划路以南中弘范特区一层”,
“pro”: “Wi-Fi,店内参观,生日餐会”,
“provinceName”: “河南省”,
“cityName”: “洛阳市”
}]
}
文章图片
可见文件中的内容与网站查询到的结果相同,即本案例完成!
(这里大家可以看到出现了河南省洛阳市的字样,为什么会这样我也不清楚,如果有清楚的大佬欢迎指出!感激不尽!!)
推荐阅读
- CTF题|BUUCTF-[极客大挑战 2019]EasySQL 1
- python|python c dll_Python使用Ctypes与C/C++ DLL文件通信过程介绍及实例分析
- 笔记|打印dataframe数据的几种方法
- python|Python进阶系列 - 18讲 伟大的*号
- 语言工具|Python加速技巧
- python|python运行速度太慢(那是你打开的方式不对)
- python|python--数据容器--列表
- python基础及应用|pycharm报错AttributeError: ‘HTMLParser‘ ...
- 学习|本周小结---Mnist数据集和Alexnet网络