讓聊天機器人開啟爬蟲技能!
Chatbot學習筆記-Day5
--
聊天機器人最重視的就是互動性了,如果它能直接幫忙爬蟲,那我一定會愛不釋手。
Web Crawler
要想讓我們的Line Chatbot開啟爬蟲技能,得先對網路爬蟲(Web Crawler)有一定的認識,那爬蟲究竟是什麼意思呢?
網路爬蟲是一種用來自動瀏覽網頁的網路機器人。其目的一般為編纂網路索引、網路搜尋引擎等站點。網路爬蟲可以將自己所存取的頁面儲存下,以便搜尋引擎事後生成索引供使用者搜尋(擷自維基百科)。
寫的有點複雜對吧?
簡而言之,網路爬蟲可以想成我們對一個網站發出請求(Request)後,取得相關資訊的過程。
那如果要利用Python寫出爬蟲程式,該使用哪些套件呢?
上方應該可說是與爬蟲應用最相關的兩個套件了,其中"requests"主要負責對網站發出請求、而"BeautifulSoup"則處理HTML原始碼的解析。
關於這兩個套件,大家可以點擊超連結查看官方的Documentation。
An Example
對爬蟲有基礎的理解後,就可以開始試著寫一隻爬蟲程式了,整個爬蟲的過程大概可以分成以下幾個步驟:
- 尋找目標網站
- 檢視網頁原始碼
- 確認要爬梳的資料標籤
- 撰寫爬蟲程式並進行資料清洗
1. Finding Target
假設我們今天要爬取一個產出財經新聞的網站,必需先確認我們的程式碼是否能夠順利地抓取網頁原始碼。
也就是說,網站是否接受了我們的請求(Status Code[200])。
- Line 5 : 利用"get"對目標網站發出請求
- Line 7-10 : 確認HTTP狀態碼,"200"表示良好
那一切順利的話,輸出應該會像下圖這樣:
2. HTML parser
確保Status Code正常後,就讓BeautifulSoup來發揮它強大的功用吧!我們要開始來煮一碗湯,至於配方?可以看看下面這張:
我們在Line 1給予"BeautifulSoup"兩個參數讓它煮湯,"re.text"是我們剛剛發出請求後所收回的東西、"lxml"則是解析器(parser)。
除了"lxml"外,還有"html.parser"這個選擇,但目標都是將我們取回的資料解析成可讀的網頁原始碼。
因此,執行完這兩行可以輕鬆得出以下output:
看著就像某種天書般不易親近呢,但如果我們在目標網站按下右鍵,
選擇"檢視網頁原始碼"就可以看到一致的內容囉。
3. Searching the tree
接著來確認一下我們要的資料到底在哪裡。
進入目標網站,假設我們要爬取的是新聞的文章標題,可以在標題的位置按下"檢查",就會知道它在HTML的位置囉。
可以發現,每一列標題都被包在名為"div"的標籤當中,而且還非常整齊,有著一致的"style"。
接著我們再往下層點開,多了解它一點吧!
哦!原來每個"div"裡還藏著"a"標籤,內容不但有標題,還附帶每篇文章的超連結(href, Hyperlink Reference),真是太好了。
看來只要知道怎麼抓出這裡的內容,就差不多完事了對嗎?
沒錯,我們來看一下該如何篩選出這些標題與超連結們。
- Line 3 : 利用"find_all"函式找出全部"class"等於"_1Zdp"的"a"標籤
- Line 4-5 : 依序提出篩選後HTML的文字(.text)內容
- Line 6 : 提出超連結並在前方加上目標網站的根網址(方便直接連結)
這樣就能提出我們要的標題與其連結囉:
4. Work on Chatbot
一切順利,最後只要改寫入我們的Chatbot程式就可以了,唯需注意的是,若希望使用"文字"訊息回覆使用者,"list"的寫法就不太管用。
因此,放在Line Chatbot上的程式碼要小修一下:
- Line 10 : 宣告一個存放回覆內容的字串
- Line 15 : 用"enumerate"逐個提出爬取的內容
- Line 16 : 避免版面太雜,限定回覆8則即時新聞即可
- Line 19 : 每次迭代都加上本次取出的標題以及超連結
最後再設定一個啟動的關鍵字給我們Chatbot,它就可以快速爬取最即時的新聞囉,我這次是設定為"新聞"。
來測試一下:
成效看來還不錯,完整程式碼的部分則可以在這兒找到!
那今天就先到這邊,感謝大家的觀看。
系列文章
- 【Day1】 打造你的第一隻聊天機器人
- 【Day2】 搜圖助理 — 聊天機器人
- 【Day3】 為聊天機器人連結資料庫
- 【Day4】 利用聊天機器人對資料庫下指令吧!
- 【Day6】 聊天機器人的Quick replies
- 【Day7】 用Flex Messages呈現爬蟲
- 【Day8】 為聊天機器人加上圖文選單