lora-ohanessian-440247-unsplash
 程式與統計資料處理

Text Mining & 網路爬蟲 web crawler | Google新聞與文章文字雲 | Python

本篇學習筆記將要示範如何使用 Python 來執行 網路爬蟲 web crawler 與 basic text mining ,並以爬取Google News 的「健康」類別新聞為例。筆記包含以下部分:(1) 爬取新聞標題 (2) 爬取新聞連結 (3) 新聞文章斷詞(jieba)與字詞頻率分析(文字雲) 。

網路爬蟲 web crawler

載入套件、指定目標URL、並解析HTML

1. 找出所有新聞的標題

先檢視新聞標題在HTML的規則。

可以發現:

  • 每個文章小卡都是包覆在class = ‘xrnccd’的div物件中
    • 整個文章小卡點擊區塊連結: class = “VDXfz”
  • 文章小卡中的標題則是包覆在class為’mEaVNd’的div物件中
    • 標題文字則是在<span></span>標籤中

螢幕快照 2019-03-03 上午9.33.06

找出所有文章小卡中class = ‘mEaVNd’的「標題區塊」的元素並儲存為一個list (named title)

list中每一個「標題區塊」元素是以逗號做區隔

螢幕快照 2019-03-03 上午9.26.02

再從「標題區塊」list中,找出每個元素的<span></span>標籤,並萃取出標題文字

2. 找出新聞標題所對應的資料來源links

新聞連結的取得是比較tricky的部分,因為google news網頁中html <a> </a>標籤中的連結是經過另外轉換的所以需要request.get()另外取得轉換後的真實文章URL

web-crawler-text-mining

取得新聞文章真實URL:

  1. 找出標題區塊<a></a>標籤並萃取出href的值
  2. 將href值中’.’取代為當下的domain,得到須經轉換的URL
  3. 須經轉換的URL丟入request.get()函式中,並使用.url取得文章真實的URL

3. 將標題與連結合併成data frame

這樣就能新聞標題和真實出處URL做一個簡易的資訊表格整理

web-crawler-text-mining

其他爬蟲結果輸出可以參考「網路爬蟲 Web Crawler | 資料不求人 基礎篇 | using Python BeautifulSoup」。

 

Text mining 簡易字頻分析 (文字雲 word cloud)

4. 使用jieba套件,進行文章中文斷詞分析

先使用某一篇文章內文為範例,我們使用剛剛新聞清單的第一個連結去得到文章內容。並以該文章內容進行字頻分析(文字雲)。

看一下文章段落在HTML的規則:

web-crawler-text-mining

擷取文章內容如下:

將所有<p></p>中的text取出並放進list。

將list中的text元素join合併成一個字串,並以特殊字元’\n’來間隔 (主要是印出好看用)

載入斷詞分析的套件

指定字典(使用預設字典)

移除標點符號 punctuation removal

避免過多的文字log訊息出現

分別使用不同斷詞模式

5.將字詞頻率以word cloud(文字雲)呈現

將字詞頻率以文字雲繪出
載入文字雲套件

設定停用字stopwords(排除常用詞、無法代表特殊意義的字詞),投入WordClour()函數中,其中參數stopwords形式可以是:

  • dictionary {key : value}的格式
  • set {‘a’, ‘b’, ‘c’, …}的格式

*stopwords中, \n 是前面因為避免印出一長串沒有換行符號的article而加入的,故這邊再另外挑除

產生文字雲(方法1): 使用generate_from_frequencies()

  • generate_from_frequencies()方法會忽略stopwords參數的部分故在產生hash dictionary字詞頻率的時候,須先自行處理挑除stopwords的部分

文章文字雲3

產生文字雲(方法2): 使用generate_from_text()

  • 由於generate_from_text()方法會採納stopwords參數,故事前不需要特別對text做stopwords的挑除

文章文字雲4

6. 將dictionary轉換成data frame(並以key當作row: orient = ‘index’)

將字詞頻率統計表依照「詞頻」由多至寡排列。

螢幕快照 2019-03-03 下午12.06.24


文章參考連結:

wordcloud.WordCloud


更多Python網路爬蟲學習筆記:

網路爬蟲 Web Crawler | 資料不求人 基礎篇 | using Python BeautifulSoup

網路爬蟲 web crawler | 奇摩電影 yahoo movies | using Python

Text Mining & 網路爬蟲 web crawler | Google新聞與文章文字雲 | Python

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *