Python豆瓣影評爬蟲及詞云生成

沒錯又來水博客

和圖書爬蟲思路一致,加了點花里胡哨的東西

直接上代碼
  • 寫入數(shù)據(jù)部分
# 作者:Lino
# 參考于作者:Charles

import re
import os
import requests
from bs4 import BeautifulSoup
import bs4
import xlwt
import time
import pickle


# 簡化版豆瓣影評獲取器
# 生成詞云
# 影評及作者.xls保存于當前目錄
# 暫不擁有模擬登錄功能


def get_page(url):
    headers = {
        'Uesr-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
                      '(KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
    }
    try:
        res = requests.get(url, headers=headers)
        res.raise_for_status()
        return res.text
    except:
        return ""


def fillCommentsDatas(data, html):
    soup = BeautifulSoup(html, 'lxml')
    divs = soup.find_all('div', attrs={'class': 'comment-item'})
    for div in divs:
        if isinstance(div, bs4.element.Tag):
            nickname = div.find('a', attrs={'title': True}).get('title')
            StarandDate = div.find_all('span', attrs={'title': True})
            if len(StarandDate) == 2:
                star = float(re.findall('allstar(\d\d).*?', str(StarandDate[0]))[0]) / 10
                date = StarandDate[1].get('title')
            else:
                star = "無"
                date = StarandDate[0].get('title')
            comment = div.find('span', attrs={'class': 'short'}).string.strip()
            data[nickname] = [date, star, comment]


def save_to_pkl(savepath, data):
    f = open(os.path.join(savepath, "影評.pkl"), 'wb')
    pickle.dump(data, f)
    f.close()


def write_to_excel(data):
    workbook = xlwt.Workbook(encoding='ascii')
    worksheet = workbook.add_sheet('BookSheet')
    worksheet.col(0).width = 4000
    worksheet.col(1).width = 3000
    worksheet.col(2).width = 8000
    worksheet.col(3).width = 30000
    style = xlwt.XFStyle()
    font = xlwt.Font()
    font.name = "宋體"
    font.height = 11 * 20
    alignment = xlwt.Alignment()
    alignment.horz = xlwt.Alignment.HORZ_CENTER
    alignment.vert = xlwt.Alignment.VERT_CENTER
    alignment.wrap = 1
    style.font = font
    style.alignment = alignment
    worksheet.write(0, 0, "昵稱", style)
    worksheet.write(0, 1, "評分", style)
    worksheet.write(0, 2, "日期", style)
    worksheet.write(0, 3, "評論", style)
    tmp = 1
    for key, value in data.items():
        worksheet.write(tmp, 0, key, style)
        worksheet.write(tmp, 1, value[1], style)
        worksheet.write(tmp, 2, value[0], style)
        worksheet.write(tmp, 3, value[2], style)
        tmp += 1

    workbook.save('影評.xls')


if __name__ == '__main__':
    data = {}
    mid = input("輸入電影的代號:")
    for i in range(20):
        url = "https://movie.douban.com/subject/" + str(mid) + "/comments?start=" + str(i*20) + "&limit=20&sort=new_score&status=P"
        html = get_page(url)
        fillCommentsDatas(data, html)
        save_to_pkl(os.getcwd(), data)
        write_to_excel(data)
        time.sleep(1)
  • 生成詞云部分
from wordcloud import WordCloud
import pickle
import os
import jieba

def generateWordCloud(words, savepath):
    wc = WordCloud(font_path='simkai.ttf', background_color='white', max_words=2000, width=1920, height=1080, margin=5)
    wc.generate_from_frequencies(words)
    wc.to_file(os.path.join(savepath, 'commentscloud.jpg'))


def frequencies(texts, stopwords):
    words_dict = {}
    for text in texts:
        temp = jieba.cut(text)
        for t in temp:
            if t in stopwords:
                continue
            if t in words_dict.keys():
                words_dict[t] += 1
            else:
                words_dict[t] = 1
    return words_dict


if __name__ == '__main__':
    f = open('影評.pkl', 'rb')
    data = pickle.load(f)
    f.close()
    texts = [d[1][2] for d in data.items()]
    stopwords = open('stopwords.txt', 'r', encoding='utf-8').read().split('\n')[:-1]
    words_dict = frequencies(texts, stopwords)
    generateWordCloud(words_dict, os.getcwd())

效果

Excel
詞云
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抗俄,一起剝皮案震驚了整個濱河市脆丁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌动雹,老刑警劉巖槽卫,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異胰蝠,居然都是意外死亡歼培,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門茸塞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來躲庄,“玉大人,你說我怎么就攤上這事钾虐≡刖剑” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵效扫,是天一觀的道長倔监。 經(jīng)常有香客問我,道長菌仁,這世上最難降的妖魔是什么浩习? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮掘托,結(jié)果婚禮上瘦锹,老公的妹妹穿的比我還像新娘。我一直安慰自己闪盔,他們只是感情好弯院,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泪掀,像睡著了一般听绳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上异赫,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天椅挣,我揣著相機與錄音头岔,去河邊找鬼。 笑死鼠证,一個胖子當著我的面吹牛峡竣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播量九,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼适掰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了荠列?” 一聲冷哼從身側(cè)響起类浪,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肌似,沒想到半個月后费就,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡川队,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年力细,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呼寸。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡艳汽,死狀恐怖猴贰,靈堂內(nèi)的尸體忽然破棺而出对雪,到底是詐尸還是另有隱情,我是刑警寧澤米绕,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布瑟捣,位于F島的核電站,受9級特大地震影響栅干,放射性物質(zhì)發(fā)生泄漏迈套。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一碱鳞、第九天 我趴在偏房一處隱蔽的房頂上張望桑李。 院中可真熱鬧,春花似錦窿给、人聲如沸贵白。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽禁荒。三九已至,卻和暖如春角撞,著一層夾襖步出監(jiān)牢的瞬間呛伴,已是汗流浹背勃痴。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留热康,地道東北人沛申。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像姐军,于是被迫代替她去往敵國和親污它。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容