菜比肉貴?用 Python 采集蔬菜與肉類商品歷史價格,帶你了解了解~
大家好,我是才哥。
前段時間,菜市場出現了一個奇特的現場:菜比肉貴!
以北京為例,像豬肉的價格基本上從年初的25塊/斤逐步下降到現在的10塊/斤。
豬肉價格走勢
而一些蔬菜比如油麥菜從年初的2.5元/斤到現在的4.5元/斤,高的時候能有8元/斤;再比如菠菜從年初的1.7元/斤到現在的4元/斤,高的時候也能到7-8元/斤。
油麥菜價格走勢
廣大網友直呼:以前沒錢吃肉,現在沒錢吃菜!
我們知道前年 50塊一斤豬肉(也是離譜),現在可以買5斤,于是就有了下面這張對比圖:
以前沒錢吃肉,現在沒錢吃菜
那么,蔬菜價格目前到底是什么情況呢?全年一般又是什么樣的走勢呢?
今天,我們就用Python采集一下北京新發地菜市場的價格行情來一起了解下!
1. 網頁分析
目標網站:北京新發地
網址信息:http://www.xinfadi.com.cn/priceDetail.html
我們通過翻頁(下一頁)查看后續數據,但是發現地址欄url沒變,所以是動態加載的,那么老規矩:F12開發者模式—>Network—>XHR,然后翻頁可以找到數據請求信息如下:
最終,我們確認請求接口地址及請求方式與信息如下:
請求類型:post
- url = r'http://www.xinfadi.com.cn/getPriceData.html'
- # 請求參數如下,其中page為頁碼
- FormData={
- 'limit': 20,
- 'current': page,
- 'pubDateStartTime': '2021/01/01',
- 'pubDateEndTime': '2021/10/30',
- 'prodPcatid':'',
- 'prodCatid':'',
- 'prodName':'',
- }
確定以上信息后,我們就可以簡單的寫代碼進行數據采集了!
2. 數據采集
由于請求到的數據是json格式,比較好處理,我們直接上代碼(完整代碼)。
如果對代碼不是很了解,可以加筆者好友或者加咱們交流群討論!
- import requests
- import pandas as pd
- from tqdm import tqdm
- headers = {
- "Accept-Encoding": "Gzip",
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
- }
- dfList = []
- url = r'http://www.xinfadi.com.cn/getPriceData.html'
- for page in tqdm(range(1,5373)):
- FormData={
- 'limit': 20,
- 'current': page,
- 'pubDateStartTime': '2021/01/01',
- 'pubDateEndTime': '2021/10/30',
- 'prodPcatid':'',
- 'prodCatid':'',
- 'prodName':'',
- }
- r = requests.post(url, data=FormData, headers=headers)
- data = r.json()
- dataList = data['list']
- df = pd.DataFrame(dataList)
- dfList.append(df)
- df = pd.concat(dfList)
- df.to_excel(r'菜品歷史價格行情.xlsx',index=None)
采集進度
可以看到,其實該網站并沒有反爬,但是我們用最簡單的這種采集方式花了2小時23分鐘,屬實有點久。
那么怎么可以加速呢?進程、線程與攜程等方式可以加速,關于這方面的知識與應用我們會在后續進行專題介紹哈,這里先預告一下。
最終,我們采集到10萬多條數據如下:
數據預覽
以上就是本次全部內容,由于菜品類型較多,這里不做展開處理,大家可以自行下載研究哈。