小编今天在网上看到一个图片:
现在猪肉已经都这么贵了吗? 不知道花呗分期商家给不给我免手续费~~~
现在猪肉涨价这么快的嘛 ?让我用python去一探究竟!
猪价网址 http://zhujia.zhuwang.cc/
F12,Network查看异步请求XHR,成功找到价格接口。
新标签页打开,在线解析Json数据
爬虫代码
import pandas as pd
import requests
import time
'''
python学习交流群:1136201545更多学习资料可以加群获取
'''
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36'}
#生成出生当年所有日期
def dateRange(a,b):
fmt = '%Y-%m-%d'
bgn = int(time.mktime(time.strptime(a,fmt)))
end = int(time.mktime(time.strptime(b,fmt)))
list_date = [time.strftime(fmt,time.localtime(i)) for i in range(bgn,end+1,3600*24)]
return list_date
def get_json(url):
try:
response = requests.get(url,headers=headers)
if response.status_code == 200:
json_text=response.json()
return json_text
except Exception:
print('此页有问题!')
return None
def get_comments(url):
doc = get_json(url)
dic = {}
dic['pigprice'] = doc['pigprice']
dic['pig_in'] = doc['pig_in']
dic['pig_local'] = doc['pig_local']
dic['maizeprice'] = doc['maizeprice']
dic['bean'] = doc['bean']
a = '-'.join(doc['time'][3])
b = time.strftime('%Y-%m-%d',time.localtime(time.time()))
print(dateRange(a,b))
dic['time'] = dateRange(a,b)
return pd.DataFrame(dic)
data =get_comments('http://zhujia.zhuwang.cc/index/api/chartData?areaId=-1&aa=1571997555296')
#作图
from pylab import mpl
import matplotlib.pyplot as plt
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
mpl.rcParams['axes.unicode_minus']
plt.figure(figsize=(8,10), dpi=80)
plt.figure(1)
ax1 = plt.subplot(311)
plt.plot(data['time'],data['pigprice'], color="r",linestyle = "-")
plt.xticks([])
plt.annotate(data['pigprice'][365], xy=(data['time'][365], 40), xytext=(data['time'][270], 35), arrowprops=dict(facecolor='black', shrink=0.1, width=0.5))
plt.xlabel("生猪(外三元) 元/公斤")
ax2 = plt.subplot(312)
plt.plot(data['time'],data['maizeprice'],color="y",linestyle = "-")
plt.xticks([])
plt.xlabel("玉米(15%水分) 元/吨")
ax3 = plt.subplot(313)
plt.plot(data['time'],data['bean'],color="g",linestyle = "-")
plt.xlabel("豆粕(43%蛋白) 元/吨")
plt.xticks(data['time'][2::121], rotation=0)
运行结果:
成功获取最近一年的各种价格√
下面开始做折线图:生猪价格的话选第一个外三元就好了,使用 matplotlib 轻松可以做出折线图。
from pylab import mpl
import matplotlib.pyplot as plt
'''
python学习交流群:1136201545更多学习资料可以加群获取
'''
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
mpl.rcParams['axes.unicode_minus']
plt.figure(figsize=(8,4), dpi=80)
plt.plot(data['time'],data['pigprice'], color="r",linestyle = "-")
plt.xticks(data['time'][2::121], rotation=0)
plt.xlabel("生猪(外三元) 元/公斤")
感觉还差点东西,可以标注一下最新一天的价格
另外既然已经获取了玉米和豆粕的价格,就一起做了吧~
利用 plt.subplot 可以绘制多个子图
from pylab import mpl
import matplotlib.pyplot as plt
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
mpl.rcParams['axes.unicode_minus']
plt.figure(figsize=(8,10), dpi=80)
plt.figure(1)
ax1 = plt.subplot(311)
plt.plot(data['time'],data['pigprice'], color="r",linestyle = "-")
plt.xticks([])
plt.annotate(data['pigprice'][365], xy=(data['time'][365], 40), xytext=(data['time'][270], 35), arrowprops=dict(facecolor='black', shrink=0.1, width=0.5))
plt.xlabel("生猪(外三元) 元/公斤")
ax2 = plt.subplot(312)
plt.plot(data['time'],data['maizeprice'],color="y",linestyle = "-")
plt.xticks([])
plt.xlabel("玉米(15%水分) 元/吨")
ax3 = plt.subplot(313)
plt.plot(data['time'],data['bean'],color="g",linestyle = "-")
plt.xlabel("豆粕(43%蛋白) 元/吨")
plt.xticks(data['time'][2::121], rotation=0)
现在猪肉这么贵,买一斤猪肉要20多块钱,现在自助餐也有38一位的,还能吃到饱~~~买一斤猪肉还不如去吃一顿自助餐~