爬取點(diǎn)評(píng)成都數(shù)據(jù),只為告訴你哪家火鍋好吃
冬天到了,天氣越來越冷,小編起床越來越困難了,每一天都想吃辣辣的火鍋。成都到處都是火鍋店,有名的店,稍微去晚一點(diǎn),排隊(duì)都要排好久,沒聽說的店,又怕味道不好。那么如何選擇火鍋店呢?最簡單的肯定是在美團(tuán)、大眾點(diǎn)評(píng)上找一找啊。所以,本文就從大眾點(diǎn)評(píng)上爬取了成都的火鍋數(shù)據(jù),來進(jìn)行了分析。
1、爬蟲
首先小編定位為成都,美食類型選的“火鍋”,火鍋具體類型選的不限,區(qū)域選的不限,排序選的智能,如圖:
你也可以選擇別的選項(xiàng),只是注意URL的變化。本文都是按照上述選項(xiàng)爬取的數(shù)據(jù)。接下來翻頁觀察一下URL的變化:
第二頁:
第三頁:
很容易觀察出翻頁變化的知識(shí)p后面的數(shù)字,倒推回***頁,發(fā)現(xiàn)一樣的顯示內(nèi)容,因此,寫一個(gè)循環(huán),便可以爬取全部頁面。但是大眾點(diǎn)評(píng)只提供了前50頁的數(shù)據(jù),所以,我們也只能爬取前50頁。
這一次,小編用的pyquery來分析網(wǎng)頁的,所以我們需要定位到我們所爬取的數(shù)據(jù)的位置,如圖:
在具體分析的網(wǎng)頁的時(shí)候,我震驚了,大眾點(diǎn)評(píng)的反爬做的太過分了,它的數(shù)字,一些文字居然都不是明文顯示,而是代碼,你還不知道怎么分析它。如圖:
很煩的,一些文字又可以顯示,一些又用代碼表示。一些數(shù)字也是,不過好一點(diǎn)的是數(shù)字只有9個(gè),只要稍微觀察一下,就能發(fā)現(xiàn)數(shù)字的代碼是什么了。這里小編列出來了。 {'hs-OEEp': 0, 'hs-4Enz': 2, 'hs-GOYR': 3, 'hs-61V1': 4, 'hs-SzzZ': 5, 'hs-VYVW': 6, 'hs-tQlR': 7, 'hs-LNui': 8, 'hs-42CK': 9}。值得注意的是,數(shù)字1,是用明文表示的。
那么,如何用pyquery來定位呢,很簡單,你找到你要獲取的數(shù)據(jù),然后右鍵→copy→cut selector,你復(fù)制到代碼里面就OK了。pyquery的具體用法百度既有。
***,我們獲取了火鍋50個(gè)頁面的數(shù)據(jù),每頁15個(gè)數(shù)據(jù),一共750家餐廳的數(shù)據(jù)。
2、分析
大眾點(diǎn)評(píng)已經(jīng)給出了***評(píng)價(jià),可以看看大致趨勢。
準(zhǔn)五星商戶最多,可能因?yàn)榇蟛糠质晨投剂?xí)慣給好評(píng),只有實(shí)在不滿時(shí)才會(huì)打出低評(píng)有關(guān),造成了評(píng)級(jí)一般不低,但近滿分還是蠻少的。
在本文,我們假設(shè)評(píng)論數(shù)目為飯店的熱度,也就是它越火,評(píng)論數(shù)目越多。
評(píng)論數(shù)目大多在1000以內(nèi),但是高于2000,甚至高于4000也還存在一些,這些飯店應(yīng)該是一些網(wǎng)紅店。以5000為約束,篩選出飯店均為小龍坎、蜀大俠都非常知名的火鍋店。那么評(píng)論數(shù)量和***有關(guān)系嗎?看下圖:
這里取其評(píng)論數(shù)平均值,發(fā)現(xiàn)對(duì)于四星以上商戶來說,評(píng)論數(shù)和***并不關(guān)系,但均比低于四星的飯店銷量更好。這說明在四星以上之后,人們選擇差別不大,但一般不愿意接受評(píng)論太差的飯店。
對(duì)于小編這樣的學(xué)生黨來說,影響較大還有人均消費(fèi)情況。
成都的火鍋店人均消費(fèi)大部分都在50-100的區(qū)間內(nèi),高于150的也有一些。對(duì)于小編來講,吃一頓火鍋,人均在50-100是可以接受的,高于100,小編就要低頭看看錢包了。那擴(kuò)展看,人均消費(fèi)和***、評(píng)論數(shù)量有關(guān)系嗎?
上圖是人均消費(fèi)和***的關(guān)系,看起來并無任何關(guān)系,那說明一些口碑好的火鍋店,其實(shí)人均也不貴。下面看看人均和評(píng)論數(shù)目的關(guān)系吧。
通過比較,發(fā)現(xiàn)評(píng)論數(shù)目低于500,人均在50-100區(qū)間是最多的。當(dāng)然這肯定和評(píng)論數(shù)量、人均消費(fèi)本身集中于這一階段有關(guān)。
吃火鍋,一家店的生意好壞,肯定還和它的特色菜有關(guān),小編通過jieba分詞,將爬取到的推薦菜做了一個(gè)詞云圖,如下。
小編***的牛肉是特色菜之最啊,尤其是麻辣牛肉,只要去吃火鍋,都要來上一份,其次是毛肚、蝦滑、鵝腸等等。
接下來是大家都關(guān)心的,口味、環(huán)境和服務(wù)的情況。
三者得分大多都是集中在8.0-9.2這一階段,小編認(rèn)為,低于7.5分的飯店還是不要去嘗試了。同時(shí),***評(píng)價(jià)應(yīng)該也是由這三者得分產(chǎn)生的。
果然如預(yù)想的一向,***評(píng)價(jià)越好,它在口味、環(huán)境和服務(wù)的得分越高。那么口味,環(huán)境,服務(wù)得分與評(píng)論數(shù)量,平均價(jià)格有關(guān)系嗎?
如圖所看,并無什么直接關(guān)系,但是我們發(fā)現(xiàn)口味、環(huán)境和服務(wù)三者之間存在著非常好的線性關(guān)系,于是單獨(dú)拿出來畫了一個(gè)較大的圖。
我們并且擬合了線性關(guān)系,由于三星商戶只有一家,它的情況較為特殊之外,其他***在口味、環(huán)境和服務(wù)的關(guān)系擬合中保持的相當(dāng)一致,這也證明我們的猜想,這些變量之間存在線性關(guān)系。鑒于小編本文***的目的是做推薦,于是,我們進(jìn)行了K-means聚類,這里小編取K為3,并且把***轉(zhuǎn)換為數(shù)字,五星對(duì)應(yīng)5分,準(zhǔn)五星對(duì)應(yīng)4.5分,以此類推。最終得到了三類,通過作圖,看看聚類情況如何吧。
和我們想要的結(jié)果一致,在口味、環(huán)境、服務(wù)和***上得分越高,我們就越推薦。然而推薦的店鋪還是好多,能不能在集中一些呢?于是小編通過限制評(píng)論數(shù)量、人均消費(fèi)和特色菜來進(jìn)行推薦。由于小編喜歡人少,便宜還有牛肉的店鋪,這里得到了如下的結(jié)果:
小編接下來要做的就是,吃遍它們,哈哈哈哈,想想都開心。
就醬~~~
代碼在:https://github.com/summerheday/dazhongdianping-chengdu-hotpot