大家好,我們是 AI . FREE Team - 人工智慧自由團隊,這一次的鐵人賽,自由團隊將從0到1 手把手教各位讀者學會 (1)Python基礎語法 (2)Python Web 網頁開發框架 – Django (3)Python網頁爬蟲 – 周易解夢網 (4)Tensorflow AI語言模型基礎與訓練 – LSTM (5)實際部屬AI解夢模型到Web框架上。
自由團隊的成立宗旨為開發AI/新科技的學習資源,提供各領域的學習者能夠跨域學習資料科學,並透過自主學習發展協槓職涯,結合智能應用到各式領域,無論是文、法、商、管、醫領域的朋友,都可以自由的學習AI技術。
AI . FREE Team 讀者專屬福利 → Python Basics 免費學習資源
準備AI解夢資料,爬取解夢網站資料!
你最近有沒有做甚麼奇怪的夢?夢裡是不是跑出甚麼動物?像是蛇、牛或是老鼠,或者是夢到甚麼奇特的事情?像是正在往下掉或是被搶劫,當我做了這種奇怪的夢時,我就會想這個夢是不是有甚麼特殊的意思呢?這時,我就會到一些解夢的網站看看,了解一下夢到這些事情,通常代表甚麼含意,滿足自己的好奇心。
最近在研究GPT2時,突然想到語言模型已經廣泛運用在各種聊天機器人上,我們是不是也可以嘗試讓AI 幫助我們解夢呢?接下來,跟著我一起來做AI 解夢吧!
我們可以蒐集解夢網站的內文,來作為訓練AI 的資料,所以第一步我們要從網路爬蟲下手,後續在我們爬完整理完資料後,我們會透過GPT2模型來訓練這個模型。
我們用這個解夢網站做示範: https://www.golla.tw/
使用 requests 可以從我們要的網頁中爬取資料。
使用Beautiful Soup 則可以去方便我們將request抓取的網頁資料,更容易呈現出網頁中的標題或是內文。
我們載入上面這些套件後,就可以來準備網頁爬蟲了!
import requests
from bs4 import BeautifulSoup
利用 def 來定義我們的網頁爬蟲( web_crawl ) 功能。
利用for loop 來重複執行爬取不同解夢頁面的資料。
首先,我們要定義我們網路爬蟲的功能,我們需要一個header,因為爬蟲時,伺服器會憑藉headers來辨認你這位使用者,我們會用自己的User-Agent作為headers,讓伺服器認為我正在瀏覽網頁,實際上則是程式幫我爬取。另外,我們選擇UTF-8 作為我們的編碼方式,因為我們的資料類型是中文字,接下來用上Beautiful Soup 就可以從html格式中,抓取網頁的標題和內文了!
#定義我們網路爬蟲的功能
def web_crawl(weblink):
headers = {
'user-agent': '你的user agent'
}
res = requests.get(weblink, headers=headers)
res.encoding = 'UTF-8'
soup = BeautifulSoup(res.text, 'html.parser')
return soup
接下來,我們要讓程式知道我們爬蟲時要擷取的資料是我們的標題和內文,我們要幫助程式找到標題和內文的位置,並且我們在解夢網站上不只是爬一篇解夢文,而是需要大量的解夢文來訓練我們的AI ,因此,我們需要使用到我們的for loop功能,最後,我們需要將爬取下來的大量文章做一些前處理,並且儲存到txt文件,幫助我們後續進行AI 訓練時做使用。
我們要讓程式知道我們爬蟲時要擷取的資料是我們的標題和內文,我們要幫助程式找到標題和內文的位置,我們使用某解夢網站嘗試我們的爬蟲,我們可以在這個網站頁面中選擇我們夢到的關鍵字(例如:蛇)。
首先,我們按下F12可以檢視網頁的原始碼,我們就可以看到網頁的內容,當我們點擊最左邊的檢查器/inspect(長得像滑鼠的圖案),在回到網頁上點任一關鍵字,我們就可以知道這些關鍵字存放在原始碼中的甚麼位置,我們會發現它存放在bd 這個類別(class)下的超連結(a)中,我們用select和for loop功能選到這些關鍵字的位置。
soup_2 = web_crawl('https://www.golla.tw/')
a = soup_2.select('.bd a')
a
for i in a:
print(str(i).split('"')[1])
我們回想我們自己在搜尋的步驟,我們會選擇與我們做的夢相關的關鍵字,接著進入那個關鍵字的頁面,然後讀取內文,了解夢到這些事情,通常代表甚麼含意,因為需要大量的解夢文來訓練我們的AI,因此,我們需要使用到我們的for loop功能,爬取所有的解夢文。
link_2 = []
sub_link_2 = []
for i in a:
if 'html' in str(i).split('"')[1]:
link_html = 'https://www.golla.tw' + str(i).split('"')[1]
if link_html in link_2:
pass
else:
link_2.append(link_html)
else:
sub_html = 'https://www.golla.tw' + str(i).split('"')[1]
if sub_html in sub_link_2:
pass
else:
sub_link_2.append(sub_html)
最後,我們將爬取下來的大量文章儲存到txt文件,幫助我們後續進行AI 訓練時做使用。
#寫入txt中
with open("dream1_link_2.txt", "w") as f:
for content in link_2:
f.write(str(content) +"\n")
接下來,我們要進入後續的GPT2訓練囉!那我們明天見~
自由團隊 官方網站:https://aifreeblog.herokuapp.com/
自由團隊 Github:https://github.com/AI-FREE-Team/
自由團隊 粉絲專頁:https://www.facebook.com/AI.Free.Team/
自由團隊 IG:https://www.instagram.com/aifreeteam/
自由團隊 Youtube:https://www.youtube.com/channel/UCjw6Kuw3kwM_il39NTBJVTg/
文章同步發布於:自由團隊部落格
(想看更多文章?學習更多AI知識?敬請鎖定自由團隊的頻道!)