菜比肉貴?Python采集蔬菜與肉類商品歷史價(jià)格
最近一段時(shí)間,菜市場(chǎng)出現(xiàn)了一個(gè)奇特的現(xiàn)場(chǎng):菜比肉貴!
以北京為例,像豬肉的價(jià)格基本上從年初的25塊/斤逐步下降到現(xiàn)在的10塊/斤。

而一些蔬菜比如油麥菜從年初的2.5元/斤到現(xiàn)在的4.5元/斤,高的時(shí)候能有8元/斤;再比如菠菜從年初的1.7元/斤到現(xiàn)在的4元/斤,高的時(shí)候也能到7-8元/斤。

廣大網(wǎng)友直呼:以前沒錢吃肉,現(xiàn)在沒錢吃菜!
我們知道前年 50塊一斤豬肉(也是離譜),現(xiàn)在可以買5斤,于是就有了下面這張對(duì)比圖:

那么,蔬菜價(jià)格目前到底是什么情況呢?全年一般又是什么樣的走勢(shì)呢?
今天,我們就用Python采集一下北京新發(fā)地菜市場(chǎng)的價(jià)格行情來(lái)一起了解下!

1. 網(wǎng)頁(yè)分析
目標(biāo)網(wǎng)站:北京新發(fā)地
網(wǎng)址信息:http://www.xinfadi.com.cn/priceDetail.html

我們通過(guò)翻頁(yè)(下一頁(yè))查看后續(xù)數(shù)據(jù),但是發(fā)現(xiàn)地址欄url沒變,所以是動(dòng)態(tài)加載的,那么老規(guī)矩:F12開發(fā)者模式—>Network—>XHR,然后翻頁(yè)可以找到數(shù)據(jù)請(qǐng)求信息如下:

最終,我們確認(rèn)請(qǐng)求接口地址及請(qǐng)求方式與信息如下:
請(qǐng)求類型:
posturl?=?r'http://www.xinfadi.com.cn/getPriceData.html'
#?請(qǐng)求參數(shù)如下,其中page為頁(yè)碼
FormData={
????????'limit':?20,
????????'current':?page,
????????'pubDateStartTime':?'2021/01/01',
????????'pubDateEndTime':?'2021/10/30',
????????'prodPcatid':'',
????????'prodCatid':'',
????????'prodName':'',
????????}

確定以上信息后,我們就可以簡(jiǎn)單的寫代碼進(jìn)行數(shù)據(jù)采集了!

2. 數(shù)據(jù)采集
由于請(qǐng)求到的數(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'菜品歷史價(jià)格行情.xlsx',index=None)

可以看到,其實(shí)該網(wǎng)站并沒有反爬,但是我們用最簡(jiǎn)單的這種采集方式花了2小時(shí)23分鐘,屬實(shí)有點(diǎn)久。
如果需要反復(fù)采集,可以考慮通過(guò)并行的方式,如進(jìn)程、線程與協(xié)程等,對(duì)代碼進(jìn)行優(yōu)化,提高抓取效率。不過(guò)通常網(wǎng)站也會(huì)有限制,不建議抓取頻率過(guò)高。
最終,我們采集到10萬(wàn)多條數(shù)據(jù)如下:

以上,我們就完成了對(duì)菜品歷史價(jià)格的抓取。菜品類型很多,本文不一一分析,感興趣的同學(xué)可以自行比較,以及進(jìn)一步二次開發(fā)和分析。后續(xù)我們?cè)賮?lái)專門講解可視化的一些方法。
完整代碼已經(jīng)全部在文中。需要采集到的數(shù)據(jù),請(qǐng)?jiān)诠娞?hào)后臺(tái)回復(fù)關(guān)鍵字?菜價(jià)(見“菜比肉貴”文件夾)
如果文章對(duì)你有幫助,歡迎轉(zhuǎn)發(fā)/點(diǎn)贊/收藏~
作者:道才
_往期文章推薦_
