Python实现淘宝爬取——奶粉销售信息爬取及其数据可视化
簡(jiǎn)介
雙十一剛過(guò),TB的銷(xiāo)售額又創(chuàng)下了新高,我也為2000+億做出了貢獻(xiàn)
恰巧買(mǎi)了一袋德運(yùn)奶粉,味道還不錯(cuò)。我就在想,接觸爬蟲(chóng)也有兩個(gè)多月了,還沒(méi)有爬過(guò)TB這種經(jīng)典的網(wǎng)站,借著勁頭就爬取了一下TB上奶粉的銷(xiāo)售信息
爬蟲(chóng)
在淘寶框搜索奶粉,就會(huì)彈出各式各樣的奶粉
可以爬取的有用信息:價(jià)格、銷(xiāo)售量、商品名稱(chēng)、店鋪、地址
淘寶是一個(gè)典型用json格式存儲(chǔ)信息的網(wǎng)址,通俗講,json格式就是一層套一層的字典,像淘寶這樣一個(gè)網(wǎng)頁(yè)中有很多商品的網(wǎng)頁(yè),源碼看起來(lái)可能會(huì)很復(fù)雜,但都是有規(guī)律可循,需要仔細(xì)觀察
通過(guò)分析,可以看出所有的商品信息都存儲(chǔ)在開(kāi)頭為g_page_config = 結(jié)尾為shopcardOff":true}};的一個(gè)字典中,只需要獲取這個(gè)字典然后用python中的json庫(kù)進(jìn)行解析即可
這里列舉了兩種獲取方式,一是用find方法,二是用正則匹配,都能成功獲取網(wǎng)頁(yè)信息
解析網(wǎng)頁(yè)過(guò)后,就可以從獲取到的信息中提取有用信息,通過(guò)分析可得知有用信息都存儲(chǔ)在很多層嵌套的字典中,所以通過(guò)遍歷這個(gè)字典提取出信息
為了便于數(shù)據(jù)分析,所以在提取信息時(shí),將地區(qū)和銷(xiāo)售量做了處理,例浙江 杭州→浙江;500人收貨→500
數(shù)據(jù)處理
爬取數(shù)據(jù)結(jié)果如下
一共有2924條數(shù)據(jù),其實(shí)是遠(yuǎn)遠(yuǎn)少于100頁(yè)中商品數(shù)量
在進(jìn)行數(shù)據(jù)處理前,必須先要確定所有數(shù)據(jù)的字段是否完整
只有評(píng)價(jià)人數(shù)這個(gè)字段缺少一個(gè)數(shù)據(jù),填充數(shù)據(jù)或者刪去都不會(huì)對(duì)數(shù)據(jù)集整體產(chǎn)生很大影響
在觀察數(shù)據(jù)時(shí),可能在寫(xiě)入csv文件時(shí)語(yǔ)句不規(guī)范,出現(xiàn)了下圖問(wèn)題
列索引多次出現(xiàn)在數(shù)據(jù)集中,所以必須要?jiǎng)h去,只需要將數(shù)據(jù)集中不包含產(chǎn)品名稱(chēng)字樣的樣本保留即可
數(shù)據(jù)集中6個(gè)特征都為object類(lèi)型,所以為了進(jìn)行數(shù)據(jù)可視化,需要對(duì)數(shù)據(jù)進(jìn)行強(qiáng)制轉(zhuǎn)換
價(jià)格和評(píng)價(jià)人數(shù)數(shù)據(jù)比較規(guī)范,直接用astype進(jìn)行轉(zhuǎn)化即可
但是銷(xiāo)售量這一樣本中還有其他字符存在,可以編寫(xiě)一個(gè)函數(shù)處理數(shù)據(jù)
def price(e):if '萬(wàn)+' in e:num1 = re.findall('(.*?)萬(wàn)+',e)return float(num1[0])*10000elif '+' in e:return e.replace('+','')else:return float(e) data1['商品銷(xiāo)售量'] = data1['銷(xiāo)售量'].apply(price)同時(shí)可以通過(guò)數(shù)據(jù)字符串中特有的字符,將奶粉和店鋪進(jìn)行分類(lèi)
奶粉大致可分為:全脂奶粉、低脂奶粉、脫脂奶粉、嬰幼兒奶粉、高鈣奶粉、未知
店鋪大致可分為:天貓超市、旗艦店、專(zhuān)營(yíng)店、海外類(lèi)型店鋪、其他店鋪
已知商品價(jià)格和銷(xiāo)售量后,也可以算出該商品的銷(xiāo)售額
處理后的數(shù)據(jù)如下
在對(duì)處理后數(shù)據(jù)大致瀏覽時(shí),出現(xiàn)了評(píng)價(jià)人數(shù)為0的情況
評(píng)價(jià)人數(shù)為0并不能判斷這個(gè)數(shù)據(jù)是否對(duì)錯(cuò),但是銷(xiāo)售量8500的商品評(píng)價(jià)為0,就顯著不符合常理,為了確定判斷,找到了該商品,評(píng)價(jià)人數(shù)有33w+,顯然這些是錯(cuò)誤數(shù)據(jù)
用drop函數(shù)直接將這幾行數(shù)據(jù)刪去,下面進(jìn)行數(shù)據(jù)可視化
數(shù)據(jù)可視化
1.類(lèi)型
奶粉的類(lèi)型,相對(duì)來(lái)說(shuō)還是嬰兒奶粉比較多,由于對(duì)產(chǎn)品名稱(chēng)提取特征不夠細(xì)化,所以未知也比較多,達(dá)到了800+;店鋪類(lèi)型則是其他店鋪占比最多,普通奶粉可依據(jù)價(jià)格挑選,但是嬰兒奶粉一定要依據(jù)質(zhì)量挑選才可,盡可能在旗艦店這樣比較可靠的店鋪購(gòu)買(mǎi)
2.店鋪地址分布
店鋪地址仍然是江浙滬、廣東占據(jù)大比例,可能不止奶粉,許多其他商品的網(wǎng)店、配貨倉(cāng)庫(kù)都集中分布在這些地區(qū);眾所周知,澳大利亞的奶粉是及其出名的,所以也占一定比例
3.價(jià)格
嬰兒奶粉的價(jià)格品牌是非常多的,所以價(jià)格分布也較廣泛,有的甚至達(dá)到了2000+,看來(lái)養(yǎng)孩子真的是不容易;相比脫脂、低脂奶粉,全脂奶粉反而價(jià)格更高,有點(diǎn)出乎意料,多了工序價(jià)格卻還低了?當(dāng)然品牌造成的影響也不可否認(rèn);高鈣奶粉價(jià)格相對(duì)來(lái)說(shuō)中規(guī)中矩,貴一點(diǎn)的也不過(guò)500左右
4.銷(xiāo)售額前50分布
這份數(shù)據(jù)中奶粉銷(xiāo)售額最高的可以達(dá)到1100w+,所以在網(wǎng)店中,奶粉的市場(chǎng)還是不小的
銷(xiāo)售額TOP50份樣本,43.3%的店鋪都為天貓超市,旗艦店也占有22.8%,所以可見(jiàn)大部分人買(mǎi)奶粉還是會(huì)到比較可靠的網(wǎng)店購(gòu)買(mǎi)的;奶粉類(lèi)型還是未知占據(jù)最多,其次嬰幼兒奶粉占比28.8%,而低脂奶粉和脫脂奶粉總占比6.7%,這兩類(lèi)奶粉會(huì)對(duì)健身人士、老年人及消化不良的嬰兒的人有些益處,所以銷(xiāo)售額也會(huì)相對(duì)較低
總結(jié)
以上是生活随笔為你收集整理的Python实现淘宝爬取——奶粉销售信息爬取及其数据可视化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 黑白棋python代码框架_Python
- 下一篇: mysql测试题蔡铜_MySQL:测试题