在完成这个的时候,参考了另一个博主的博客,受到了启发,才完成了这个小案例。
总的来说就是在肯德基官网获取城市的门店信息,然后将数据保存到本地的一个小爬虫案例肯德基餐厅信息查询 (kfc.com.cn)http://www.kfc.com.cn/kfccda/storelist/index.aspx
废话不多说,直接上代码,但是因为我python是很早学的,然后也没学多少,所以好多东西都是需要用啥就搜啥,有什么不对的地方或者可以优化的地方可以评论区留言(*^▽^*),一起进步。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @FileName :05爬取肯德基餐厅查询.py
# @Time :2023/8/7 15:38
# @Author :Yuan
import requests
from itertools import count
if __name__ == "__main__":
# UA伪装 欺骗门户网址
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.188'
}
# 因为网页刷新是通过ajax实现的局部刷新,因此直接进行在页面抓包获取url
post_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx'
city = input('请输入城市:')
fileName = city + 'KFC门店.txt'
# 用来存储门店信息,因为用json确实麻烦,看了另一个博主的才恍然大悟,我们只需要保存我们需要的信息,其他的直接舍弃
list = []
# 直接在网上搜的无限循环
for i in count(1):
# 参数列表
params = {
'op': 'keyword',
'cname': '',
'pid': '',
'keyword': city,
'pageIndex': i,
'pageSize': '10',
}
# 发送post请求 获取数据
response = requests.post(url=post_url, params=params, headers=headers)
# 为了对获取的数据可以更好的操作,所以先把他转成json格式
data = response.json()
# 判断这一页是否还有门店 没有的话Table1对应的值就是个空的列表 那么直接退出
if len(data['Table1']) == 0:
break
else:
# 有门店的话就加到list中
for j in range(0, len(data['Table1'])):
list.append('店名:' + data['Table1'][j]['storeName'] + '\n')
list.append('\t地址:' + data['Table1'][j]['addressDetail'] + '\n')
# 将list中的数据存到文件中
with open(fileName, 'w', encoding='utf-8') as fp:
fp.write(''.join(list))
print("结束!")