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