本案关键内容点: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)