在討論開放資料(Open Data)應用、大數據分析(Big Data),通常需要更多元的資料來源時,就會考慮要針對特定網站的內容進行爬梳,將需要的資料數據取回 ...
2018年4月15日星期日
HTMLParsing(爬梳網頁、爬網頁、爬蟲程式)
清晨7:55
PostedbyEnvisioningU-CommerceLab
OpenData
在討論開放資料(OpenData)應用、大數據分析(BigData),通常需要更多元的資料來源時,就會考慮要針對特定網站的內容進行爬梳,將需要的資料數據取回做更進一步應用或分析。
以往,這就必須找懂得寫爬蟲程式(Parsing)的資訊工程師幫忙,但現在有一些工具平台可以讓完全不懂程式的人也能自己爬網頁囉,接下來就介紹幾個這方面的工具平台。
網頁爬蟲的概念就是要由人先從網頁中找到資料的規律,再利用工具或撰寫程式擷取那些規律的資料。
這方面其實也可以用Google試算表的一些函數做簡單的資料爬梳,就像如何將網頁內的資料導入到Google試算表這篇文章教我們可以用ImportHTML函數對於網頁上的表格內容進行擷取,但是該文章的範例也無法正常執行了,因為要擷取的網頁不再是以
語法來呈現表格內容了。
但是,如果以另外這篇文章中間提到以ImportHTML抓台灣證交所上櫃股票的資料就可以,因為其網頁確實就是以語法呈現的表格資料。
另外,[Google試算表]如何匯入網頁提供的CSV檔案資料這篇文章教我們可以用ImportDATA函數直接匯入網路上公開的CSV檔資料內容。
更進一步,【Google試算表】如何用ImportXML抓股價?上市上櫃興櫃可用這篇文章有介紹如何用ImportXML函數就能針對單一頁面單一項目進行資料擷取,但若是用了太多ImportXML函數會費時較久,使用數量可能需要控制好。
工具平台方面,首先介紹Listly自動抓取網頁轉成Excel表格是最簡單容易上手的,免費方案限制至多抓取10個網站,這對很多人來說應該夠用了,只是一次只能取得一頁資料,沒辦法繼續自動爬梳第2,3,4,5,...頁資料,是比較陽春的做法。
另外,使用import.io爬梳網頁資料也因為功能更強大而成為常被推薦的平台,只是沒有免費方案,只有7天試用期,所以就暫不考慮了。
需要功能更強大的免費工具平台,在此特別推薦ParseHub,在其官網註冊帳號後,還要下載搭配執行的使用者端軟體,免費方案限制至多抓取5個網站,且一次在40分鐘內只能自動爬梳200頁資料。
接下來,就用三立新聞謠言終結站(該站版面異動過,改用康健雜誌練習吧)進行下列操作示範。
不過,在練習之前先用Chrome的開發人員工具觀察Elements,找出要擷取的內容之對應原始碼,並且認識網路爬蟲的原理。
首先,執行ParseHub使用者端軟體並完成登入,然後開始進行新專案(NewProject)。
(ParseHub操作介面有改版過了,但操作程序邏輯相同,所以此文章就不重新截圖了。
)
輸入要爬梳的網址,在此以三立新聞謠言終結站進行示範。
右半邊可以看到三立新聞謠言終結站的網頁內容,首先以滑鼠點選第一則新聞標題。
點選後的標題出現綠色框框,這時判斷出後續第2,3,...則的標題則是以黃色框框標示。
就點選其中一個黃色框框標題吧...
於是就會看到所有標題都變成綠色框框了,在左方指令區出現(30)的數字代表在此頁面共計有30則標題可抓取,且右下方出現讀取到每一則的標題文字及連結網址兩個欄位資料了,確認無誤就再繼續進行下去。
然後自行對欄位進行命名,如下圖所示,在左方指令區把新聞標題改命名為News,而標題文字改命名為title,在右下方出現讀取到的標題文字及連結網址兩個欄位名稱也變成News_title及News_url了。
接下來要開始把其他資料再一一納入爬梳範圍,在左方指令區的News項目點選+號,並選擇"RelativeSelect"。
以滑鼠點選第一則新聞標題。
滑鼠往下移動,將畫面上出現的箭頭拉到第一則新聞標題下方的簡短敘述文字,點擊確認,代表這敘述文字是對應於該則新聞標題的。
於是可以看到每一則敘述文字及其對應的新聞標題都被標示出來了,且右下方出現讀取到每一則的敘述文字欄位資料了。
在左方指令區把新聞敘述文字改命名為description,在右下方出現讀取到的敘述文字欄位名稱也變成News_description了。
再繼續把其他資料納入爬梳範圍,在左方指令區的News項目點選+號,並選擇"RelativeSelect"。
以滑鼠點選第一則新聞標題。
滑鼠往左移動,將畫面上出現的箭頭拉到第一則新聞標題左方的縮圖,點擊確認,代表這縮圖是對應於該則新聞標題的。
於是可以看到每一則縮圖及其對應的新聞標題都被標示出來了,且右下方出現讀取到每一則的縮圖欄位資料了。
在左方指令區把縮圖改命名為image,在右下方出現讀取到的縮圖欄位名稱也變成News_image及News_image_url了。
前面的步驟已經將所有要爬梳的資料納入了,最後就要設定如何抓取第2,3,4,...頁的方式,在左方指令區的Selectpage項目點選+號,並選擇"Select"。
將網頁捲到最下方出現頁數的區域,點選"下一頁"這個按鈕。
點選後出現綠色框框。
在左方指令區將其命名為nextpage。
在左方指令區將nextpage項目點選+號,並選擇"Click"。
在對話框點選"Yes"確認其為跳頁按鈕,然後點選"Adcanced",在Maximumdepth指定要自動抓取的頁面數量(這裡設定10是因為先確認過目前最後一頁為第11頁而總共要跳10次)。
不過,可能因為網頁中的跳頁按鈕設計上的差異而導致一些問題,萬一遇到了,ParseHub官網有一些進階操作方式介紹。
在左方指令區可再次確認或變更剛剛的設定,確認無誤後就點選≡號,並選擇"Run"。
確認執行"SaveandRun"。
就開始爬梳該網站囉。
爬梳完成後,可將資料匯出成CSV或JSON格式的檔案。
下載回來的CSV檔,若打開來為亂碼,怎麼辦?可以參考這篇文章,就是先用記事本開啟該檔案並存檔一次,應該就可以變正常了。
不然,也可以直接用Google試算表開啟也會是正常的。
如果對其他網站爬梳出現了無法解決的問題,可進一步參考官網教學文章或官方Youtube頻道。
舉例來說,藍姆酒吐司這個網站的內容,若從第一頁開始就無法完成所有頁面的自動爬梳,必須從最後一頁開始逆著做才行。
還有,這是假消息這個網站的內容,若從第一個標題點選,沒辦法自動判斷出全部的標題,而是改成從第三個標題先選才行喔。
至於像康健雜誌的搜尋頁、食力的搜尋頁等網站的內容,必須輸入關鍵字做查詢後才能呈現資訊,這樣的網頁爬梳設定就會更複雜一些囉。
//////講古時間////////////////////////////////////////////////////////////////////////////////////////////////////////////
在2020年的1968之亂,我們也開發了另一個PK1968網站,相關過程可參閱EUCL部落格,在課堂上會跟大家分享這些過程及觀點。
包含法律面:
首先,仔細閱讀Google地圖/Google地球附加服務條款。
若無法依據API相關的規定直接利用GoogleMap,建議還是先徵詢Google公司的同意再行利用。
著作權法第52條規定,「為報導、評論、教學、研究或其他正當目的之必要,在合理範圍內,得引用已公開發表之著作。
」同法第65條第2項規定,「著作之利用是否合於第四十四條至第六十三條所定之合理範圍或其他合理使用之情形,應審酌一切情狀,尤應注意下列事項,以為判斷之基準:一、利用之目的及性質,包括係為商業目的或非營利教育目的。
二、著作之性質。
三、所利用之質量及其在整個著作所占之比例。
四、利用結果對著作潛在市場與現在價值之影響。
」原則上利用愈少,合理使用成立的可能性愈大。
但這也正是企業在利用他人著作時可能遇到的最大困難,合理使用的判斷永遠非常個案化。
至於像網路爬蟲抓取公開資料或非公開資料從事非商業用途是否侵權? 在不對外公開自製網站進行分析統計相關數據用途(網站會顯示文字、圖片與影片);研究網路文化趨勢,進一步進行非商業行為的學術分析等觀之,若符合著作權法合理使用之規定(非營利之分析、研究目的),可主張合理使用,而不構成侵害著作權。
以電子郵件傳送這篇文章BlogThis!分享至Twitter分享至Facebook
較新的文章
較舊的文章
首頁
PopularPosts
用GoogleSheet做出掃描QRcode報到系統
注意:有另一篇(第二版)用GoogleSheet搭配QRDroidAPP做出掃描QRcode報到系統,與此篇文章做法的差別是在最後掃描QRcode的做法。
利用此GoogleSheet建立副本,由於原來的GoogleSheet是已經有一個連動的Go...
以GoogleForms蒐集名單到GoogleSheet做隨機抽獎
這個單元的發想,是因為看到一篇文章談在Google試算表中實作抽獎功能,文章作者最後也提到自己是行銷人員,在沒有程式人員可支援開發抽獎系統的情況下而有了這個想法。
不過,這位非資訊人員的作者,第一次寫AppScript就能有這樣的作品,未免也太強了。
於是,我們打...
製作ER圖的4個簡單步驟
超IT綜合情報技術網「製作ER圖的4個簡單步驟」文章點出最重要的概念:1.掌握業務流程和規則2.從中抽出「實體」3.檢核抽出的「實體」是否有不足或多餘的4.最後設定實體的「關聯」Step1掌握業務流程和規則以網路購物流程...
以GoogleSheet題庫產生GoogleForms隨機測驗卷
利用GoogleSpreadsheet可撰寫AppScripts的特性,搞懂GoogleForms相關的method就可以撰寫程式來將Spreadsheet的資料自動轉為Forms的問題。
這個想法的落實,是參考了下列資訊:Howtocreatea...
(終極版)用GoogleSheet搭配APP做出掃描QRcode報到系統
這篇文章大部分介紹程式開發過程中循序漸進寫出來的九個版本,然後在課堂上逐一解說程式設計重點。
如果要直接使用,請參考合作夥伴品科技撰寫的使用教學.....part1、part2、part3、part4、part5、part6。
在開始介紹此程式開...
(第二版)用GoogleSheet搭配QRDroidAPP做出掃描QRcode報到系統
注意:有另一篇(終極版)用GoogleSheet搭配APP做出掃描QRcode報到系統,與此篇文章做法的差別是使用方式變得非常簡單了,使用者不需要管連動的GoogleForm參數、不需要進入Script程式編輯模式、不需要自己設定觸發條件、寄信動作也全部自動執行而...
初步認識AppSheet
2020年,Google收購了AppSheet,AppSheet團隊未來將加入GoogleCloud。
另一方面,Google也宣布原本自家的AppMaker將完全停用,這個新聞讓我對於AppSheet感到興趣。
首先,若我們考慮要使用這個平台來做點什麼,第...
在AppSheet也能做出關聯式資料庫
將這個「ReferenceActions」範例複製到自己的帳號下,就能開始做最簡單的關聯式資料庫練習。
不只是複製了這個範本的前端設計,同時也已經把相關資料複製到自己的Google雲端硬碟了,就在我的雲端硬碟>appsheet>d...
以GoogleForms進行會議時間調查
這份SOP很容易懂的,以後在調查開會時間可以這樣設計表單來做較有效率。
GoogleForms欄位設計 表單標題、說明文字先擬好,並在第一題問題設定為"簡答"格式要求填寫姓名(記得設定為"必填")。
...
HTMLParsing(爬梳網頁、爬網頁、爬蟲程式)
在討論開放資料(OpenData)應用、大數據分析(BigData),通常需要更多元的資料來源時,就會考慮要針對特定網站的內容進行爬梳,將需要的資料數據取回做更進一步應用或分析。
以往,這就必須找懂得寫爬蟲程式(Parsing)的資訊工程師幫忙,但現在有一些工具平台...