菜比肉貴?用 Python 采集蔬菜與肉類商品歷史價格,帶你了解了解~
大家好,我是才哥。
前段時間,菜市場出現(xiàn)了一個奇特的現(xiàn)場:菜比肉貴!
以北京為例,像豬肉的價格基本上從年初的25塊/斤逐步下降到現(xiàn)在的10塊/斤。
豬肉價格走勢
而一些蔬菜比如油麥菜從年初的2.5元/斤到現(xiàn)在的4.5元/斤,高的時候能有8元/斤;再比如菠菜從年初的1.7元/斤到現(xiàn)在的4元/斤,高的時候也能到7-8元/斤。
油麥菜價格走勢
廣大網(wǎng)友直呼:以前沒錢吃肉,現(xiàn)在沒錢吃菜!
我們知道前年 50塊一斤豬肉(也是離譜),現(xiàn)在可以買5斤,于是就有了下面這張對比圖:
以前沒錢吃肉,現(xiàn)在沒錢吃菜
那么,蔬菜價格目前到底是什么情況呢?全年一般又是什么樣的走勢呢?
今天,我們就用Python采集一下北京新發(fā)地菜市場的價格行情來一起了解下!
1. 網(wǎng)頁分析
目標(biāo)網(wǎng)站:北京新發(fā)地
網(wǎng)址信息:http://www.xinfadi.com.cn/priceDetail.html
我們通過翻頁(下一頁)查看后續(xù)數(shù)據(jù),但是發(fā)現(xiàn)地址欄url沒變,所以是動態(tài)加載的,那么老規(guī)矩:F12開發(fā)者模式—>Network—>XHR,然后翻頁可以找到數(shù)據(jù)請求信息如下:
最終,我們確認請求接口地址及請求方式與信息如下:
請求類型:post
- url = r'http://www.xinfadi.com.cn/getPriceData.html'
- # 請求參數(shù)如下,其中page為頁碼
- FormData={
- 'limit': 20,
- 'current': page,
- 'pubDateStartTime': '2021/01/01',
- 'pubDateEndTime': '2021/10/30',
- 'prodPcatid':'',
- 'prodCatid':'',
- 'prodName':'',
- }
確定以上信息后,我們就可以簡單的寫代碼進行數(shù)據(jù)采集了!
2. 數(shù)據(jù)采集
由于請求到的數(shù)據(jù)是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)
采集進度
可以看到,其實該網(wǎng)站并沒有反爬,但是我們用最簡單的這種采集方式花了2小時23分鐘,屬實有點久。
那么怎么可以加速呢?進程、線程與攜程等方式可以加速,關(guān)于這方面的知識與應(yīng)用我們會在后續(xù)進行專題介紹哈,這里先預(yù)告一下。
最終,我們采集到10萬多條數(shù)據(jù)如下:
數(shù)據(jù)預(yù)覽
以上就是本次全部內(nèi)容,由于菜品類型較多,這里不做展開處理,大家可以自行下載研究哈。