如何使用Power Query批量抓取韓劇下載地址
因為疫情宅在家裡,除了刷刷頭條,看看抖音,如果你是韓劇迷,有大把的時間可以來追劇。現在最火的是孫藝珍的《愛的迫降》,但是哪裡找資源是個問題。
電視上基本上是看不到韓劇的,只有在網路上找資源了,網路上韓飯的網站很容易找到,還有個問題就是,一個一個的去翻看網頁太麻煩,最好是自動找到連結地址。那就要用到Power Query的網路抓取功能了。Power Query網路抓取分四步:網站分析、試抓、自定義函式、抓取,我們還是按照這四個步驟進行。
網站分析
網址可以直接修改頁碼訪問,在檢查中也能正常預覽,位址列的網址就是真實網址,這就好辦了。
進入到具體的劇集中,有下載地址,點選後有彈窗,裡面顯示了具體的下載連線,我們通過檢查發現:
連線地址是可以找到的。
通過上面的分析,我們可以理清一個抓取的思路:
- 首先要根據頁碼逐個找到每個韓劇的名稱和對應的網址
- 然後根據韓劇地址找到下載地址
就這麼簡單,抓取過程中可能需要兩個函式,一個是根據頁碼抓網址的函式,一個是根據網址抓下載地址的函式。
試抓
試抓的過程會比較複雜,很多時候最初的試抓過程,並不能解決所有問題,甚至是大部分的問題,原因就是我們沒有找到一個最佳的共同特性。我們先來試抓網址:
每頁中的韓劇內容儲存在一行裡,這個比較少見,多數時候是一個表單,好在這個網頁的格式非常固定,韓劇網址所在的行也是固定不變的,我們在第二步直接就保留一行就好了。這個方法在下載地址試抓中我也用了,後來發現那個下載地址網頁內容極不規範,最後用了篩選行。
有時候大家看到一堆的html原始碼就慌了,其實html要想整齊的顯示出來,程式碼必然也是有規律可循的,我們看頁面中一頁有12部韓劇,那麼我們只要分成12列就好了,關鍵在於分列的分隔符用什麼比較好?通過觀察我們發現一部韓劇被認為是一個article,結尾的位置都有我們就用它來分列就好了。
分列後逆透視,變成一列,然後提取網址和韓劇名稱,這個過程我也是試了好幾次,最後在整個抓取結束後,發現提取的還是有些問題,有些網址沒有提取出來,有些韓劇名稱沒有提取出來,有返回到這一步,再次嘗試,我用的是提取分隔符之間的文字,就是要找到網址前的"ref=",網址後的“.html”,以及韓劇名稱前的“title=”,韓劇名稱後面的“”。
韓劇網址的試抓基本完成了,當然我實際上是反覆修改了幾次才可以的。
下載地址試抓,不要想著一次就成,因為網站維護估計不是一個人完成的,不同的人寫程式碼習慣不同,就是同一個人,還有手誤的時候,下載地址中提取碼,有時就是密碼,好在都有一個“碼”字。
這個過程與韓劇網址抓取過程差不多,就是第二步我們用了篩選,沒用保留行,再有就是提取分隔符之間的文字,用到的分隔符不同,基本步驟一致。
自定義函式
在試抓好的查詢上右鍵,選擇建立函式:
開啟高階編輯器,修改函式引數:
韓劇網址抓取函式,我們用p做為頁碼引數。
下載地址抓取函式,我們用url作為引數。
抓取
建一個空查詢,輸入一個55行的列表:
自定義列引用韓劇網址抓取函式,抓取韓劇名稱和網址:
展開:
在這一步就有可能發現問題,看看預覽中網址是不是都有,韓劇名稱有沒有空白,如果有,就找到對應的頁碼,回到試抓那一步,修改頁碼檢視試抓步驟中,哪一步有問題,看看有沒有能夠統一的解決辦法。找到解決方法後,修改自定義函式,在來重新整理就能看到修改後的效果了。
即使多次修改,仍然有部分網址空白,或者韓劇名稱空白,那麼就要篩選掉空白行,避免下載地址抓取時出錯。我這步有一行韓劇名稱空白,對應的網址是頁碼,所以就直接篩選掉了。
再自定義列引用下載地址抓取函式,並展開:
這一步可能出現的結果和上一步差不多,如果大面積的空白,就表示下載地址抓取函式定義的不成功,要返回試抓過程做修改,再來重新整理,看結果。