又到了吃車?yán)遄拥募竟?jié)呻顽。
冬季搪搏,中國市面上的車?yán)遄又饕獊碜阅习肭虻闹抢?凇⑿挛魈m和澳大利亞等地稿黄,其中中國更是智利最大的車?yán)遄映隹趪翘埃鰢急冗_(dá)百分之90以上醉拓。秆乳。
遠(yuǎn)隔重洋董习、長途跋涉而來的車?yán)遄拥南M價格里包括了運輸費用畦粮、冷藏費用等額外費用,自然冬季車?yán)遄訉τ谙募镜能嚴(yán)遄觾r格上要高出不少乖阵。另外宣赔,貨以稀為貴,中國冬季水果相對于夏季稀缺瞪浸,惹眾人垂涎的車?yán)遄觾r格自然水漲船高儒将。
但是這些因素絲毫不能影響中國吃貨對車?yán)遄拥溺姁邸?021車?yán)遄愉N量暴漲32倍,中國吃貨憑實力養(yǎng)活50萬智利人
今天我們那就來某東網(wǎng)看看銷量第一10w+的車?yán)遄拥降子卸嗍軞g迎?
1 需求分析
我們本次獲取的目標(biāo)有用戶昵稱对蒲、產(chǎn)品評分钩蚊、產(chǎn)品類型、評論時間蹈矮、評論點贊數(shù)和回復(fù)數(shù)還有具體評論內(nèi)容等七項內(nèi)容
2 網(wǎng)頁分析
從圖中我們要獲取的內(nèi)容都在當(dāng)前頁面中砰逻,我們使用瀏覽器打開格式如下:
這是一個json格式的數(shù)據(jù)集。
3 發(fā)送請求
分析完了我們上代碼,使用requests發(fā)送請求獲取網(wǎng)頁響應(yīng)
url?=f'https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=20180186520&score=0&sortType=5&page={page}&pageSize=10&isShadowSku=0&rid=0&fold=1'
headers?=?{
'Cookie':?xxxxxx',
'
Referer':?'https://item.jd.com/',
'
User-Agent':?'xxxxxx'
}
#?獲取響應(yīng)
resp?=?requests.get(url,?headers=headers)
結(jié)果如下泛鸟,我們可以看到打印出來的結(jié)果不是一個標(biāo)準(zhǔn)的json格式數(shù)據(jù)集
所以我們先要構(gòu)造標(biāo)準(zhǔn)的json格式
便于我們后續(xù)對數(shù)據(jù)內(nèi)容進(jìn)行提取蝠咆。
構(gòu)造方法如下:
json_data?=?json.loads(resp.text[20:-2])
然后我們獲取我們所要的內(nèi)容,成功打印如下:
forcmtsinjson_data['comments']:
#?昵稱
nickname?=?cmts['nickname']
#?評分
score?=?cmts['score']
#?評論
comments?=?cmts['content']
#?產(chǎn)品類型
product?=?cmts['productColor']
#?評論時間
time?=?cmts['referenceTime']
#?評論點贊數(shù)
starVote?=?cmts['usefulVoteCount']
#?評論回復(fù)數(shù)
cmtsReply?=?cmts['replyCount']
print(nickname,?score,?comments,?product,?time,?starVote,?cmtsReply)
'''
濱***啡 5 非常新鮮,過年菜市場車?yán)遄觾r格太高,直奔8-90一斤刚操,用京東省了不少錢闸翅!? 2019-01-23 23:08:02 1 1
****j 5 收到貨真是大吃一驚,個個頂呱呱……物流特別給力隔天就收到了赡茸。和我在實體店買的98一斤的不分上下缎脾。口感特別美味占卧,肉肉特別多水分也很充足……總之非常非常滿意遗菠。下次需要還會繼續(xù)回購!愿賣家生意紅紅火火……………? 2019-02-23 15:28:54 1 1
d***l 5 質(zhì)量很不錯华蜒,好吃辙纬!棒棒的!0认病贺拣!? 2019-01-31 17:21:45 1 1
G***j 5 發(fā)貨快,非常甜捂蕴,簡直是驚喜呀譬涡!太喜歡了?? 2019-01-31 11:13:34 1 1
小***5?5?味道很甜,水分很足啥辨,超級棒涡匀,值得購買,推薦推薦溉知,順豐兩天就收到了陨瘩,真是好吃,還要買???2019-01-23?22:39:34?1?1
****j 5 收到了車?yán)遄蛹墩В浅P迈r舌劳,我所以不厭其煩地拍了那么多照片,就是讓大家知道玫荣,這箱車?yán)遄影b的非常好甚淡。檢查了一下,沒有壞果捅厂,和我期待的是一樣的材诽。從物流蹤跡來看,恒傻,順豐快遞一環(huán)一環(huán)銜接的很緊密脸侥,我很滿意。這一款車?yán)遄淤I的很值:價格實惠盈厘,送貨速度快睁枕,水果質(zhì)量好,這一切讓我對這一家印象深刻。? 2019-01-23 09:05:14 1 1
****h?5?果實肥碩外遇,甜美注簿,包裝保護到位,很好吃跳仿,怎么感覺沒吃幾顆沒有了诡渴,沒有了,傷心??2019-01-05?21:05:33?1?1
****d 5 包裝很到位菲语,貼心妄辩。果子也非常均勻,口感新鮮山上,酸酸甜甜眼耀,挺好!? 2018-07-20 16:44:19 1 1
u***v 5 很喜歡已經(jīng)推薦給單位的同事啦佩憾,同事也品嘗了很爽口哮伟。感謝有誠意的店,給我們提供這么好的農(nóng)戶產(chǎn)品妄帘,讓夏天過的也十分的清甜楞黄,等這次吃完了,我們就集體團購抡驼。一定五星好評鬼廓,也非常謝謝客服熱情的服務(wù)也謝謝售后的工作人員。非常的誠懇婶恼,有壞果果,都是按照等價兌換的柏副。? 2018-07-05 21:51:37 1 1
****4?5?是隔了一天收到的?從煙臺過來算快的了?煙臺又大又甜?沒有壞的?3斤對的?非常滿意??2018-06-01?20:27:03?1?2
'''
4 多頁爬取
我們有多頁爬取的需求就要觀察多頁來鏈接的規(guī)律從而構(gòu)造出多頁請求的
真實鏈接勾邦。
https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=20180186520&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&rid=0&fold=1
https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=20180186520&score=0&sortType=5&page=1&pageSize=10&isShadowSku=0&rid=0&fold=1
https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=20180186520&score=0&sortType=5&page=2&pageSize=10&isShadowSku=0&rid=0&fold=1
https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=20180186520&score=0&sortType=5&page=3&pageSize=10&isShadowSku=0&rid=0&fold=1
從以上連接我們可以觀察得出控制翻頁的就是page參數(shù)。
所以我們據(jù)此構(gòu)造出以下鏈接從而獲取多頁數(shù)據(jù)割择。
url?=f'https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=20180186520&score=0&sortType=5&page={page}&pageSize=10&isShadowSku=0&rid=0&fold=1'
我們先來獲取前100頁數(shù)據(jù)作為測試如下:
5 數(shù)據(jù)存儲
存儲數(shù)據(jù)我們使用openpyxl將其存于Excel眷篇,便于我們后續(xù)的數(shù)據(jù)清洗、處理和可視化
具體可以參考以下教程:
我是如何把python爬蟲獲取到的數(shù)據(jù)寫入Excel的荔泳?
ws?=?op.Workbook()
wb?=?ws.create_sheet(index=0)
wb.cell(row=1,?column=1,?value='昵稱')
wb.cell(row=1,?column=2,?value='評分')
wb.cell(row=1,?column=3,?value='產(chǎn)品類型')
wb.cell(row=1,?column=4,?value='評論時間')
wb.cell(row=1,?column=5,?value='評論點贊數(shù)')
wb.cell(row=1,?column=6,?value='評論回復(fù)數(shù)')
wb.cell(row=1,?column=7,?value='評論內(nèi)容')
wb.cell(row=count,?column=1,?value=nickname)
wb.cell(row=count,?column=2,?value=score)
wb.cell(row=count,?column=3,?value=product)
wb.cell(row=count,?column=4,?value=time)
wb.cell(row=count,?column=5,?value=starVote)
wb.cell(row=count,?column=6,?value=cmtsReply)
wb.cell(row=count,?column=7,?value=comments)
ws.save('車?yán)遄?xlsx')
結(jié)果如下:
6 數(shù)據(jù)清洗
我們在此使用pandas對數(shù)據(jù)進(jìn)行讀取然后去重復(fù)和去除空值處理蕉饼。
隨機抽取五條數(shù)據(jù)展示如下:
#?讀取文件
rcv_data?=?pd.read_excel('./車?yán)遄?xlsx')
#?刪除重復(fù)記錄和缺失值
rcv_data?=?rcv_data.drop_duplicates()
rcv_data?=?rcv_data.dropna()
#?抽樣展示
print(rcv_data.sample(5))
'''
昵稱??評分??產(chǎn)品類型?????????????????評論時間??評論點贊數(shù)??評論回復(fù)數(shù)???????????????????????????????????????????????評論內(nèi)容
535??小***太???5???NaN??2021-01-20?11:21:13??????0??????0???????????????????????????????????發(fā)貨速度還挺快,味道很棒玛歌,很新鮮
10???y***0???5???NaN??2021-03-18?21:18:48??????1??????1?????????????????????????????????寶貝已經(jīng)收到非常喜歡這款真的是好舒服
529??w***4???5???NaN??2021-01-20?14:30:50??????0??????1??送貨快包裝完好無損昧港,貨到時冰冰涼涼非常新鮮,櫻桃個大均勻支子,飽滿多汁创肥,甜中微微帶點兒酸,非常好...
278? u***s ? 5 ? NaN? 2021-07-03 12:40:27 ?????0??????0?????????????????????????????????送貨很快,包裝完好叹侄,新鮮巩搏。酸甜可口。
82???小***_???5???NaN??2020-05-13?12:39:49??????2??????0???????????品質(zhì)特好趾代,味道不錯贯底,很好的東西,快遞也很給力撒强,東西包裝很好禽捆,賣家也給力,值得購買5?21:51:37?1?1
****4?5?是隔了一天收到的?從煙臺過來算快的了?煙臺又大又甜?沒有壞的?3斤對的?非常滿意??2018-06-01?20:27:03?1?2
'''
7 詞頻展示
數(shù)據(jù)可視化之前我們先要對數(shù)據(jù)進(jìn)行預(yù)處理尿褪,這里我們使用的是熊貓來處理數(shù)據(jù)睦擂,具體可以參考:
讓人無法拒絕的pandas技巧,簡單卻好用到爆杖玲!
我們獲取前十個高頻詞匯以及出現(xiàn)頻率動圖如下:
#?詞頻設(shè)置
all_words?=?[wordforwordinresult.split('?')iflen(word)?>1andwordnotinstop_words]
wordcount?=?Counter(all_words).most_common(100)
x1_data,?y1_data?=?list(zip(*wordcount))
print(x1_data)
print(y1_data)
7 詞云展示
我們使用stylecloud來繪圖顿仇,部分代碼如下:
有興趣的笑傲伙伴可以參考:
如何使用python實現(xiàn)一個優(yōu)雅的詞云?(超詳細(xì))
defvisual_ciyun():
mask?=?imread('1.jpg')
wordcloud?=?WordCloud(font_path='msyh.ttc',?mask?=?mask,?stopwords=stop_words,?background_color='white').generate(result)
wordcloud.to_file('pic.jpg')
print('詞云圖繪制成功摆马!')
評論點贊最多
我們使用pandas找出點贊最多的一條評論
max_stars?=?rcv_data[rcv_data['評論點贊數(shù)']?==?rcv_data['評論點贊數(shù)'].max()]
'''
昵稱??評分??產(chǎn)品類型?????????????????評論時間??評論點贊數(shù)??評論回復(fù)數(shù)???????????????????????????????????????????????評論內(nèi)容
z***1 ? 5 ? NaN? 2021-12-13 18:27 ?? 169 ??? 21 ?非常新鮮臼闻,非常大。價格便宜了很多囤采,性價比超高述呐,真的特別劃算,包裝也很高端大氣上檔次蕉毯,值得購買乓搬。京東發(fā)貨速度挺快的,贊一個代虾,會再來光顧噠~
'''
評論內(nèi)容如下:
情感分析
如果有人問进肯,有沒有比較快速簡單的方法,快速進(jìn)行情感分析棉磨,那么 SnowNLP 庫就是答案江掩。
SnowNLP 主要可以進(jìn)行中文分詞、詞性標(biāo)注乘瓤、情感分析环形、文本分類、轉(zhuǎn)換拼音衙傀、繁體轉(zhuǎn)簡體抬吟、提取文本關(guān)鍵詞、提取摘要统抬、分割句子拗军、文本相似等任洞。
需要注意的是,用 SnowNLP 進(jìn)行情感分析发侵,官網(wǎng)指出電商評論的準(zhǔn)確率較高交掏,其實是因為它的語料庫主要是電商評論數(shù)據(jù),但是可以自己構(gòu)建相關(guān)領(lǐng)域語料庫刃鳄,替換單一的電商評論語料盅弛,準(zhǔn)確率也挺不錯的。
安裝
pip?install?snownlp
使用
fromsnownlpimportSnowNLP
情感分析
我們通過用戶的評論數(shù)據(jù)來對車?yán)遄幼鲆恍┖唵蔚姆治龊驼急?/p>
#?情感分析
defanay_data():
all_words?=?[wordforwordinresult.split('?')iflen(word)?>1andwordnotinstop_words]
positibe?=?negtive?=?middle?=0
foriinall_words:
pingfen?=?SnowNLP(i)
ifpingfen.sentiments?>0.7:
positibe?+=1
elifpingfen.sentiments?<0.3:
negtive?+=1
else:
middle?+=1
print(positibe,?negtive,?middle)
'''
6125?500?2567
'''
SnowNLP 對情感的測試值為 0 到 1叔锐,值越大挪鹏,說明情感傾向越積極。
得到的情感值很高愉烙,說明買家對商品比較認(rèn)可