本案關鍵內容點: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)