1. 程式人生 > >python爬取資料熱點詞生成詞雲

python爬取資料熱點詞生成詞雲

這是當時在中國mooc學 用python玩轉資料 時,寫的一個小demo.

程式實現步驟

1.從某一網站爬取資料,比如我是在豆瓣爬取的書評

利用Requests庫的get()爬取網頁

使用BeatifulSoup庫對爬取網頁進行解析。

寫入檔案

2.對所爬取字串分詞

利用分詞器 jieba ,逐行用jieba分詞,單行程式碼如:

word_list=pseg.cut(subject)

3.去除停用詞

很多如 “的”、“我們”這樣的詞以及一些符號對主題熱點詞分析並沒有用,所以要刪去過濾這些詞。程式碼如:

stop_words =set(line.strip() for line in open('stopwords.txt',encodeing='utf-8')) 

4.選擇名詞

jieba中的詞性標籤使用了傳統方式,例如’n’是名詞,’a’是形容詞,’v’是動詞。資料中的名詞更能代表熱點,可以單獨選擇名詞進行後續處理,選擇所有的名詞放到一個列表中的程式碼如下:

        for word, flag in word_list:
            if not word in stop_words and flag == 'n':
                commentlist.append(word)

5.根據詞頻畫出詞雲

將所有名詞直接作為WordCloud()函式的引數,預設WordCloud內部通過統計詞頻對詞進行排序,font_path傳入字型檔案,mask表示詞雲的影象形狀,引數傳入為一個影象

    content = ' '.join(commentlist)
    wordcloud = WordCloud(font_path='simhei.ttf', background_color="grey",  mask=mask_image, max_words=40).generate(content)

完整程式碼

import jieba.posseg as pseg
import matplotlib.pyplot as plt
from os import path
import requests
from scipy.misc import imread
from wordcloud import WordCloud
from bs4 import BeautifulSoup
#本程式對豆瓣圖書評論進行抓取,並得出其關鍵詞
def fetch_douban_comments():#對豆瓣評論進行抓取,並寫入subject檔案
    r = requests.get('https://book.douban.com/subject/1109968/comments/')
    soup = BeautifulSoup(r.text, 'lxml')
    pattern = soup.find_all('p', 'comment-content')
    with open('subjects.txt', 'w', encoding='utf-8') as f:
        for s in pattern:
            f.write(s.string)
def extract_words():
    with open('subjects.txt','r',encoding='utf-8') as f:
        comment_subjects = f.readlines()
    #載入stopword
    stop_words = set(line.strip() for line in open('stopwords.txt', encoding='utf-8'))
    commentlist = []
    for subject in comment_subjects:
        if subject.isspace():continue
        # segment words line by line
        word_list = pseg.cut(subject)#分詞
        for word, flag in word_list:
            if not word in stop_words and flag == 'n':
                commentlist.append(word)
    d = path.dirname(__file__)
    mask_image = imread(path.join(d, "mickey.png"))
    content = ' '.join(commentlist)
    wordcloud = WordCloud(font_path='simhei.ttf', background_color="grey",  mask=mask_image, max_words=40).generate(content)
    # Display the generated image:
    plt.imshow(wordcloud)
    plt.axis("off")
    wordcloud.to_file('wordcloud.jpg')
    plt.show()
if __name__ == "__main__":
    fetch_douban_comments()
    extract_words()

結果:

由於所選mask影象是個米老鼠,所以最後詞雲的形狀是這個樣子

詞雲