淘寶榮耀7C評論爬蟲實戰

最近新換了臺手機,因此想用爬蟲看看淘寶上相關的評價。
Python爬取簡單頁面還是比較套路的,要么直接爬取HTML頁面,要么爬取對應的json頁面,當然這里不考慮驗證碼需要登錄等情況。淘寶的頁面數據是異步加載的,所以要到相應的json文件里找對應的數據,評論數據都是裝載在json里再經過JavaScript處理后顯示到HTML頁面里的。下面我們來實戰一下華為榮耀暢玩7C這款手機在天貓旗艦店的評價,在淘寶上搜索榮耀暢玩7C定位到官方頁面,之后按F12打開源碼,定位到Network,因為默認F12的開發者選項的頁面是對應Elements的,按F5刷新頁面后在Network里對應找到相關的json文件,實際爬過一些小項目的人應該很熟悉上面的操作了。如下圖:

找到json數據位置

點擊Headers可以看到對應的URL和請求方式(是get還是post)
Headers頁面.png

可以看到URL很長,里面封裝了大量的參數,用這個url可以爬取評論的單個頁面,但是要連續爬取各個頁面的評論挺困難的,我研究了很久試了很多次callback參數的改變,效果不是很好,后來查網上的資料發現可以簡化參數,將后面的參數削減掉,只保留幾個必要的參數,變成:https://rate.taobao.com/feedRateList.htm?auctionNumId=商品id&currentPageNum=1,改變currentPageNum就好,于是開始完善代碼,用requests獲得數據后,用json將str類型的數據變成json數據,然后解析json數據,提取評論中自己關注的數據寫入csv文件中,這里懶得用csv庫了,直接當做文本文件進行讀寫。代碼如下:

import requests
import json
import re

def getOneUrl(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return -1  # 頁面沒正常下下來

首先是比較套路的獲取單個頁面數據,就是調用了 requests.get(url)

def getOverViewComment():#評論概覽

    oc_url = "https://rate.tmall.com/listTagClouds.htm?" \
             "itemId=565264660443&isAll=true&isInner=true" 
    ovtxt=getOneUrl(oc_url)
    print(ovtxt)
    #jsonp921({"tags":{"dimenSum":8,…… loudList":""}})
    if ovtxt==-1:
        return
    #ov2=re.compile('\{.+\}').search(ovtxt)  #json的部分

    ovc = json.loads('{'+ovtxt+'}')
    print(ovc["tags"]["rateSum"])
    for tc in ovc['tags']['tagClouds']:
        print(tc['tag'],tc)

函數getOverViewComment()是獲取榮耀暢玩7C的評論概覽數據,對應HTML里的效果如下:


HTML里的整體評論

getOverViewComment()運行的輸出如下


暢玩7C評論概覽

下面的代碼功能是獲取和解析每個頁面的評論數據,具體代碼不難理解的。
def parseCommentJson(url, savep):  # 解析每個頁面的json數據
    text = getOneUrl(url)
    if text == -1:
        print('頁面沒正常獲取', url)
        return -1
    hc = json.loads(text.strip().strip('()'))  # 除掉空格和首尾括號
    if (hc['total'] == 0 or hc['comments'] == None):
        return 0

    print(hc['total'])

    with open(savep, 'a+', encoding='utf-8') as wf:
        for each_c in hc['comments']: #循環每條評論
            wstr = '{name},{date},{ct},{sku}'.format(name=each_c['user']['nick'],
                                                     date=each_c['date'], ct=each_c['content'],
                                                     sku=each_c['auction']['sku'])

            aplst = each_c['appendList']
            addstr = ''
            if aplst != []:  # 有追評
                for adict in aplst:
                    astr = ',{dac},{act}'.format(dac=str(adict['dayAfterConfirm']), act=adict['content'])
                    addstr = addstr+astr

            wf.write(wstr+addstr+'\n')



def honorComment():
    for i in range(1,101):#結束頁面可以自由改,如果要全量爬就設大一些,每個頁面大概有20條 30115/20
        url='https://rate.taobao.com/feedRateList.htm?auctionNumId={cid}&' \
            'currentPageNum={page}'.format(cid='565264660443',page=str(i))
        savep='D:/FFOutput/honor7cComment_{page}.csv'.format(page=str(i)) #直接page=i 也是可以的
        #page不迭代時,是寫到同一個文件里,省得去合并了
        if (parseCommentJson(url,savep)==0):
            break #后面沒有評論了


honorComment() #調用



代碼也可以進行拓展,例如獲取評論里的其他屬性,我這里主要爬了用戶名稱、評價時間、評價內容、購買類型以及追評的數據。需要其他數據可以自己改一下代碼,并不難。
最后的數據效果如下,我只爬了前100頁的數據。

評論數據輸出.csv

有這樣的幾千條數據可以進行一些有趣的分析,例如每天的評價數:評價數隨時間變化的折線圖、結合促銷手段、其他手機的發布時間等數據去理解評價數隨時間的變化,分析榮耀10發布是否對榮耀暢玩7C的銷量有影響;各種類型售出的比例:大家是更喜歡3G內存版本還是4G內存版本,大家更喜歡哪種顏色;對于核心的評論文本,可以結合自然語言處理進行深入分析,例如情感分析,對有追評數據的分析前后的情感變化,做詞云圖進行可視化等等。之后也許會把分析過程也用Python實現然后寫成文章。

上面的分析過程和爬蟲代碼是一個框架,想要分析其他產品的淘寶評論也可以按照這個思路。如果有其他有趣的分析視角,歡迎留言。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,763評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,238評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,823評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,604評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,339評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,713評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,712評論 3 445
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,893評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,448評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,201評論 3 357
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,397評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,944評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,631評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,033評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,321評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,128評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,347評論 2 377

推薦閱讀更多精彩內容