Python爬取任意城市肯德基门店信息(json数据反序列化、提取数据、写入CSV)
本案关键内容点:json数据反序列化、提取数据、写入CSV
创建csv,写入表头数据,脚本同目录下会创建名称为book的csv文件,且第一行插入表头内容
import csv
f = open('book.csv',mode='a',encoding='utf-8',newline='') #表头 csv_writer = csv.DictWriter(f,fieldnames=['餐厅名称','餐厅地址','详情']) csv_writer.writeheader() #表单数据
返回结果序列化,将对象转化为可以传输、储存的数据。下图为请求后返回的数据,需要反序列化后才可以提取具体参数值
response = requests.post(url=url, params=params, headers=headers, data=data) json_data = response.json() #将结果进行反序列化 将对象转化为可以传输、储存的数据
分离、提取数据
for i in json_data['Table1']: name = i['storeName'] address = i['addressDetail'] services = i['pro'] print(name,address,services)
将提取的数据,逐行写入到CSV中
dict = { '餐厅名称':name+'餐厅', '餐厅地址':address, '详情':services } csv_writer.writerow(dict)
全部脚本及执行后表单内容
import requests import csv url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'} f = open('book.csv',mode='a',encoding='utf-8',newline='') #表头 csv_writer = csv.DictWriter(f,fieldnames=['餐厅名称','餐厅地址','详情']) csv_writer.writeheader() #表单数据 for i in range(1,11): data = { 'cname': '', 'pid': '', 'keyword': '长沙',#这里输入城市信息 'pageIndex': f'{i}', 'pageSize': '10', } #请求字符串 params = {'op':'keyword'} response = requests.post(url=url, params=params, headers=headers, data=data) json_data = response.json() #将结果进行反序列化 将对象转化为可以传输、储存的数据 for i in json_data['Table1']: name = i['storeName'] address = i['addressDetail'] services = i['pro'] print(name,address,services) dict = { '餐厅名称':name+'餐厅', '餐厅地址':address, '详情':services } csv_writer.writerow(dict)