主題

【手把手帶你學會爬蟲】#1 介紹爬蟲(或叫序章?)

魔化鬼鬼 | 2021-11-06 18:05:47 | 巴幣 4 | 人氣 198

前言


        其實這個系列我在去年就想寫寫看了,不過那時候也沒上過計算機網路和寫過網頁,所以一些知識不是很確定是不是對的,就一直拖到現在了。爬蟲這東西仔細想一下,好像沒辦法一篇講完,所以這應該會變一個系列。另外我提到的東西可能有錯誤,因為我也還在學習,所以各位加減看,我只是分享我學到現在所知道的知識而已。如果有錯誤的或想補充的,可以留言告訴我。

爬蟲



        爬蟲 (Crawler),就是從網路上抓資料的程式,你可以抓任何你想要的東西,像是巴哈姆特場外休憩區的文章、抓 Google 的即時新聞,甚至是抓某些呃...不好說的網站的資料。為什麼要寫爬蟲?爬到的資料可以拿來做分析、可以拿來用在別的程式、train model 之類的,或者是做些不為人知的學術研究。

程式語言


        一般來說,我寫爬蟲通常都是用 Python 寫的,不過寫爬蟲沒有一個絕對的語言,只要能夠處理 HTTP request 的語言都可以用來爬蟲,C++, Java, Golang ... 等。之所以選 Python 是因為方便性,不論是語法方面,或是字串處理等,相比其他語言都是比較簡單的。再來是社群大套件多,當你想做某些複雜的東西,但你又不會的時候,就可以找看看有沒有相關的套件可以用,大幅節省造輪子的時間。


初學爬蟲要克服的問題


        首先,爬蟲這個東西,我們大部分都是從網路上抓資料,意味著你需要看懂一點網頁的程式碼,像是 HTML 、CSS、Javascript,你不需要會寫 (因為我也不會),但是要看懂,尤其是 HTML,因為網頁表現的主體就是 HTML。

        如果你完全沒有一點概念的話也不用害怕,因為我當初學的時候也是什麼都不會 (當初只學了一點 C,因興趣就來學 Python 爬蟲了)。

        另外一個要克服的東西就是了解背後的傳輸原理,Http 整體的傳輸過程是怎樣,server client 的關係在網頁上又是什麼,這些理解了其實爬蟲也就是學習語法然後拿來用而已。

需要的套件


        一般我爬蟲大概會用到 3 個套件:
  • requests用來對網頁發送請求,與網頁互動並取得資料。
  • Beautiful Soup:用來抓取並分析 HTML 的套件。
  • Selenium:當 requests 抓不到時的備用方案。
        比較進階的可能會用到:
  • threading:單程式多線程
  • multiprocessing:多程式..嗎?(其實我也不是很清楚 thread 和 process 的差別,可以留個言告訴我)
  • concurrent.futures:同上,我也還沒學到相關知識
        其中 Selenium 是我萬不得已才會用的,因為它的運作方式就是開一個瀏覽器,然後直接抓資料,相比 Requests 實在是太慢了。

        當然,如果經驗足夠的話也可以用 Scrapy,Scrapy 算是一個爬蟲框架了,意味著很多東西當已經幫你處理好了,不用慢慢造輪子,一些優化的問題也比自己手刻來得好。不過我還沒寫過什麼很大型的爬蟲,所以 Scrapy 我還沒有用過。

        如果是初學這些套件的話,可能會有點陣痛期,這部分可能需要時常的查閱資料 (Stack Overflow),或是翻套件本身的使用說明 (Documentation)。

最後提醒


        在爬蟲的時候,記得要設身處地為伺服器架設者思考,通常都不會希望一堆的機器人來拜訪你的網頁,所以記得不要短時間請求太多次,你可能會把伺服器操到大當機,或者你 IP 會被 ban 掉。

創作回應

更多創作