python-2:爬取某個網頁(虎撲)帖子的標題做詞雲圖


關鍵詞:requests,BeautifulSoup,jieba,wordcloud

 

 

整體思路:通過requests請求獲得html,然后BeautifulSoup解析html獲得一些關鍵數據,之后通過jieba分詞對數據進行切分,去停,最后通過wordcloud畫詞雲圖

1、請求虎撲Acg區

Acg區首頁的url為:https://bbs.hupu.com/acg

Acg區第二頁的url為:https://bbs.hupu.com/acg-2

從這里可以得知,如果我們要請求多個網頁,只需要以首頁作為基礎url,后面的每一頁在首頁的url基礎上進行添加即可。引入requests庫進行請求

base_url = r'https://bbs.hupu.com/acg'
add_url = ''
content_str = ''
# 嘗試請求15個網頁
for i in range(1, 15):
    if i != 1:
        add_url = r'-{}'.format(i)
    else:
        add_url = ''
    url = base_url + add_url
    response = requests.get(url)

2、BeautifulSoup解析

打開瀏覽器的控制台,觀察網頁源碼,尋找需要獲得的數據的標簽。我們需要獲取一個帖子的標題,通過瀏覽網頁源碼可以發現帖子的標題在一個<a></a>標簽中,且class=“truetit”,通過這兩個信息我們就可以通過BeautifulSoup獲取一個帖子的標題了。

base_url = r'https://bbs.hupu.com/acg'
add_url = ''
content_str = ''
for i in range(1, 15):
    if i != 1:
        add_url = r'-{}'.format(i)
    else:
        add_url = ''
    url = base_url + add_url
    response = requests.get(url)
    # 引入BeautifulSoup
    soup = BeautifulSoup(response.text, "lxml")
    # 找<a></a>標簽,class = ‘truetit’
    all_title = soup.find_all("a", class_="truetit")
    for title in all_title:
        content_str += title.text

需要注意的是,

all_title = soup.find_all("a", class_="truetit")

會把當前網頁的所有標題都讀出來,且格式是一個以<a></a>標簽為元素的list,通過for遍歷這個list,對每一個<a></a>,調用title.text即可以獲得帖子的標題。

print一下,查看是不是獲得了想要的結果:

可以看到我們已經獲得了我們想要的標題,下一步就是數據處理了(jieba分詞+去停)

3、jieba分詞+去停用詞

先寫一個生成停用詞表的函數

# 引入停用詞表
def stopwordslist(filepath):
    stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()]
    return stopwords

再進行jieba分詞,去停使用的是哈工大停用詞表

# 用lcut使得分詞后為一個list
s_list = jieba.lcut(content_str)
out_list = []
# 引入停用詞表
stopwords = stopwordslist(r'E:\stopwords-master\哈工大停用詞表.txt')
for word in s_list:
    if word not in stopwords:
        if word != '\t':
            out_list.append(word)
out_str = " ".join(out_list)

 到這一步,就可以獲得分詞后的關鍵詞了。下一步就是畫詞雲圖了。

 4、畫詞雲圖

引入wordcloud,font_path是字體的路徑,不導入的話可能只會顯示一些框框,具體文字下載可以去網上找。mask是背景圖片。generate()里的是string類型的數據。

alice_mask = plt.imread(r'D:\壁紙\huge.jpg')
# generate的是string類型的
word_cloud = WordCloud(font_path='msyh.ttc',mask=alice_mask,background_color='white', max_words=400, max_font_size=80).generate(out_str)
plt.figure(figsize=(15,9))
plt.imshow(word_cloud, interpolation="bilinear")
plt.axis('off')
plt.show()

5、結果展示

不引入mask參數:

引入mask參數:

今天是8月8號,最近正好是巨人最新一話發布的時候,所以巨人的討論度很高。同時一直支撐着虎撲acg區熱度的海賊王討論度也很高,其次的關鍵詞還有 動畫,動漫,龍珠,艾倫,漫畫,情報等等。

6、需要改進的地方

(1)無關緊要的詞太多了,需要自寫停用詞表進行去停。如最后結果中的“是不是”,“覺得”等,這些詞都應該去掉

(2)引入mask的情況下,很多背景圖使用了最后卻沒有展示出來。有的背景圖可以,有的卻不可以。

最后,感謝觀看這篇博客。其中借鑒了許多網上的內容,感謝一些原作者的努力。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM