網路爬蟲之-covid-19-熱門文章討論

文彥 | Nov 12, 2023

小論文pdf

程式碼:

# 匯入模組
import re
import requests
import jieba
import matplotlib.pyplot as plt
import json
import numpy as np
from wordcloud import WordCloud
from PIL import Image
from bs4 import BeautifulSoup
import os

# API路徑
url = 'https://www.dcard.tw/service/api/v2/forums/2019_ncov/posts?popular=true&limit=100'

# 檢查伺服器連線狀態,連線成功=200
r = requests.get(url)
print(r.status_code)
if (r.status_code == requests.codes.ok):
    print("連線成功!")
print()

# 網頁內容轉換json格式
posts = list(requests.get(url).json())
counter = 0

# json解析
def printing():
    
    os.remove(r'test.txt')  #文件夾
    global counter  

    for post in posts:
        counter +=1
        print("貼文熱門編號 :", counter)
        print("板類 :", post['forumName'])
        print("標題 :", post['title'])
        #print("內文 :", post['excerpt'])
        print("按讚 :", post['likeCount'])
        print("回應 :", post['commentCount'])
        print("日期時間 :", post['createdAt'])
        js = post['title'] 
        file = open('test.txt', 'a',encoding="utf-8")  
        file.write(js+'\n''\n') 
        #js2 = post['excerpt']
        #file.write(js2+'\n''\n')
        print()
        file.close()
printing()

# 讀取文字檔
# 如果檔案內有一些編碼錯誤,使用 errors='ignore' 來忽略錯誤
with open("test.txt", encoding="utf-8", errors='ignore') as f:
    text = f.read()

# 設定使用 big5 斷詞
jieba.set_dictionary('dict.txt.big')
wordlist = jieba.cut(text)
words = " ".join(wordlist)

# 格式設定
mask =  np.array(Image.open('300.png')) #文字雲形狀 # 遮罩
mask=(mask==0)*255 # 把舉證等於0的地方變成255 原本有數字的地方變0

myWordClode = WordCloud(background_color='white',#背景顏色預設黑色 改為白色
                        margin=6,# 文字間距
                        max_words=200, # 取多少文字在裡面
                        mask=mask, # 遮罩 有用的話則無視設定長寬
                        width=1980, height=1080, # 長寬解析度
                        relative_scaling=0.5, # 詞頻與詞大小關聯性
                        font_path='SourceHanSansTW-Regular.otf').generate(words) #使用指定字體




# 用PIL顯示文字雲
plt.imshow(myWordClode)
plt.axis("off")
plt.show()

# 儲存結果圖
myWordClode.to_file('word_cloud.png')

#printing()

內容:

主要是透過Python去設計運用,將Dcrad上的文章討論內容爬取下來分析詞的出現率,最後透過文字雲的方式將近期熱門討論的詞語顯示出來。

comments powered by Disqus