
又到了吃車?yán)遄拥募竟?jié)。
冬季,中國市面上的車?yán)遄又饕獊碜阅习肭虻闹抢?、新西蘭和澳大利亞等地,其中中國更是智利最大的車?yán)遄映隹趪?,出國占比達(dá)百分之90以上。。
遠(yuǎn)隔重洋、長途跋涉而來的車?yán)遄拥南M(fèi)價(jià)格里包括了運(yùn)輸費(fèi)用、冷藏費(fèi)用等額外費(fèi)用,自然冬季車?yán)遄訉?duì)于夏季的車?yán)遄觾r(jià)格上要高出不少。另外,貨以稀為貴,中國冬季水果相對(duì)于夏季稀缺,惹眾人垂涎的車?yán)遄觾r(jià)格自然水漲船高。
但是這些因素絲毫不能影響中國吃貨對(duì)車?yán)遄拥溺姁邸?021車?yán)遄愉N量暴漲32倍,中國吃貨憑實(shí)力養(yǎng)活50萬智利人
今天我們那就來某東網(wǎng)看看銷量第一10w+的車?yán)遄拥降子卸嗍軞g迎?
1 需求分析
我們本次獲取的目標(biāo)有用戶昵稱、產(chǎn)品評(píng)分、產(chǎn)品類型、評(píng)論時(shí)間、評(píng)論點(diǎn)贊數(shù)和回復(fù)數(shù)還有具體評(píng)論內(nèi)容等七項(xiàng)內(nèi)容
2 網(wǎng)頁分析
從圖中我們要獲取的內(nèi)容都在當(dāng)前頁面中,我們使用瀏覽器打開格式如下:
這是一個(gè)json格式的數(shù)據(jù)集。
3 發(fā)送請(qǐng)求
分析完了我們上代碼,使用requests發(fā)送請(qǐng)求獲取網(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é)果不是一個(gè)標(biāo)準(zhǔn)的json格式數(shù)據(jù)集
所以我們先要構(gòu)造標(biāo)準(zhǔn)的json格式
便于我們后續(xù)對(duì)數(shù)據(jù)內(nèi)容進(jìn)行提取。
構(gòu)造方法如下:
json_data?=?json.loads(resp.text[20:-2])
然后我們獲取我們所要的內(nèi)容,成功打印如下:
forcmtsinjson_data['comments']:
#?昵稱
nickname?=?cmts['nickname']
#?評(píng)分
score?=?cmts['score']
#?評(píng)論
comments?=?cmts['content']
#?產(chǎn)品類型
product?=?cmts['productColor']
#?評(píng)論時(shí)間
time?=?cmts['referenceTime']
#?評(píng)論點(diǎn)贊數(shù)
starVote?=?cmts['usefulVoteCount']
#?評(píng)論回復(fù)數(shù)
cmtsReply?=?cmts['replyCount']
print(nickname,?score,?comments,?product,?time,?starVote,?cmtsReply)
'''
濱***啡 5 非常新鮮,過年菜市場車?yán)遄觾r(jià)格太高,直奔8-90一斤,用京東省了不少錢!? 2019-01-23 23:08:02 1 1
****j 5 收到貨真是大吃一驚,個(gè)個(gè)頂呱呱……物流特別給力隔天就收到了。和我在實(shí)體店買的98一斤的不分上下??诟刑貏e美味,肉肉特別多水分也很充足……總之非常非常滿意。下次需要還會(huì)繼續(xù)回購!愿賣家生意紅紅火火……………? 2019-02-23 15:28:54 1 1
d***l 5 質(zhì)量很不錯(cuò),好吃!棒棒的?。?!? 2019-01-31 17:21:45 1 1
G***j 5 發(fā)貨快,非常甜,簡直是驚喜呀!太喜歡了?? 2019-01-31 11:13:34 1 1
小***5?5?味道很甜,水分很足,超級(jí)棒,值得購買,推薦推薦,順豐兩天就收到了,真是好吃,還要買???2019-01-23?22:39:34?1?1
****j 5 收到了車?yán)遄?,非常新鮮,我所以不厭其煩地拍了那么多照片,就是讓大家知道,這箱車?yán)遄影b的非常好。檢查了一下,沒有壞果,和我期待的是一樣的。從物流蹤跡來看,,順豐快遞一環(huán)一環(huán)銜接的很緊密,我很滿意。這一款車?yán)遄淤I的很值:價(jià)格實(shí)惠,送貨速度快,水果質(zhì)量好,這一切讓我對(duì)這一家印象深刻。? 2019-01-23 09:05:14 1 1
****h?5?果實(shí)肥碩,甜美,包裝保護(hù)到位,很好吃,怎么感覺沒吃幾顆沒有了,沒有了,傷心??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)品,讓夏天過的也十分的清甜,等這次吃完了,我們就集體團(tuán)購。一定五星好評(píng),也非常謝謝客服熱情的服務(wù)也謝謝售后的工作人員。非常的誠懇,有壞果果,都是按照等價(jià)兌換的。? 2018-07-05 21:51:37 1 1
****4?5?是隔了一天收到的?從煙臺(tái)過來算快的了?煙臺(tái)又大又甜?沒有壞的?3斤對(duì)的?非常滿意??2018-06-01?20:27:03?1?2
'''
4 多頁爬取
我們有多頁爬取的需求就要觀察多頁來鏈接的規(guī)律從而構(gòu)造出多頁請(qǐng)求的
真實(shí)鏈接。
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ù)存儲(chǔ)
存儲(chǔ)數(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='評(píng)分')
wb.cell(row=1,?column=3,?value='產(chǎn)品類型')
wb.cell(row=1,?column=4,?value='評(píng)論時(shí)間')
wb.cell(row=1,?column=5,?value='評(píng)論點(diǎn)贊數(shù)')
wb.cell(row=1,?column=6,?value='評(píng)論回復(fù)數(shù)')
wb.cell(row=1,?column=7,?value='評(píng)論內(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ù)清洗
我們?cè)诖耸褂胮andas對(duì)數(shù)據(jù)進(jìn)行讀取然后去重復(fù)和去除空值處理。
隨機(jī)抽取五條數(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))
'''
昵稱??評(píng)分??產(chǎn)品類型?????????????????評(píng)論時(shí)間??評(píng)論點(diǎn)贊數(shù)??評(píng)論回復(fù)數(shù)???????????????????????????????????????????????評(píng)論內(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??送貨快包裝完好無損,貨到時(shí)冰冰涼涼非常新鮮,櫻桃個(gè)大均勻,飽滿多汁,甜中微微帶點(diǎn)兒酸,非常好...
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ì)特好,味道不錯(cuò),很好的東西,快遞也很給力,東西包裝很好,賣家也給力,值得購買5?21:51:37?1?1
****4?5?是隔了一天收到的?從煙臺(tái)過來算快的了?煙臺(tái)又大又甜?沒有壞的?3斤對(duì)的?非常滿意??2018-06-01?20:27:03?1?2
'''
7 詞頻展示
數(shù)據(jù)可視化之前我們先要對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,這里我們使用的是熊貓來處理數(shù)據(jù),具體可以參考:
讓人無法拒絕的pandas技巧,簡單卻好用到爆!
我們獲取前十個(gè)高頻詞匯以及出現(xiàn)頻率動(dòng)圖如下:
#?詞頻設(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實(shí)現(xiàn)一個(gè)優(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('詞云圖繪制成功!')
評(píng)論點(diǎn)贊最多
我們使用pandas找出點(diǎn)贊最多的一條評(píng)論
max_stars?=?rcv_data[rcv_data['評(píng)論點(diǎn)贊數(shù)']?==?rcv_data['評(píng)論點(diǎn)贊數(shù)'].max()]
'''
昵稱??評(píng)分??產(chǎn)品類型?????????????????評(píng)論時(shí)間??評(píng)論點(diǎn)贊數(shù)??評(píng)論回復(fù)數(shù)???????????????????????????????????????????????評(píng)論內(nèi)容
z***1 ? 5 ? NaN? 2021-12-13 18:27 ?? 169 ??? 21 ?非常新鮮,非常大。價(jià)格便宜了很多,性價(jià)比超高,真的特別劃算,包裝也很高端大氣上檔次,值得購買。京東發(fā)貨速度挺快的,贊一個(gè),會(huì)再來光顧噠~
'''
評(píng)論內(nèi)容如下:
情感分析
如果有人問,有沒有比較快速簡單的方法,快速進(jìn)行情感分析,那么 SnowNLP 庫就是答案。
SnowNLP 主要可以進(jìn)行中文分詞、詞性標(biāo)注、情感分析、文本分類、轉(zhuǎn)換拼音、繁體轉(zhuǎn)簡體、提取文本關(guān)鍵詞、提取摘要、分割句子、文本相似等。
需要注意的是,用 SnowNLP 進(jìn)行情感分析,官網(wǎng)指出電商評(píng)論的準(zhǔn)確率較高,其實(shí)是因?yàn)樗恼Z料庫主要是電商評(píng)論數(shù)據(jù),但是可以自己構(gòu)建相關(guān)領(lǐng)域語料庫,替換單一的電商評(píng)論語料,準(zhǔn)確率也挺不錯(cuò)的。
安裝
pip?install?snownlp
使用
fromsnownlpimportSnowNLP
情感分析
我們通過用戶的評(píng)論數(shù)據(jù)來對(duì)車?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 對(duì)情感的測試值為 0 到 1,值越大,說明情感傾向越積極。
得到的情感值很高,說明買家對(duì)商品比較認(rèn)可