Power Query網抓韓劇資源

因為疫情宅在家裡,除了刷刷頭條,看看抖音,如果你是韓劇迷,有大把的時間可以來追劇。現在最火的是孫藝珍的《愛的迫降》,但是哪裡找資源是個問題。

Power Query網抓韓劇資源

電視上基本上是看不到韓劇的,只有在網絡上找資源了,網絡上韓飯的網站很容易找到,還有個問題就是,一個一個的去翻看網頁太麻煩,最好是自動找到鏈接地址。那就要用到Power Query的網絡抓取功能了。Power Query網絡抓取分四步:網站分析、試抓、自定義函數、抓取,我們還是按照這四個步驟進行。

網站分析

網址可以直接修改頁碼訪問,在檢查中也能正常預覽,地址欄的網址就是真實網址,這就好辦了。

Power Query網抓韓劇資源

進入到具體的劇集中,有下載地址,點擊後有彈窗,裡面顯示了具體的下載連接,我們通過檢查發現:

Power Query網抓韓劇資源

連接地址是可以找到的。

通過上面的分析,我們可以理清一個抓取的思路:

  • 首先要根據頁碼逐個找到每個韓劇的名稱和對應的網址
  • 然後根據韓劇地址找到下載地址

就這麼簡單,抓取過程中可能需要兩個函數,一個是根據頁碼抓網址的函數,一個是根據網址抓下載地址的函數。

試抓

試抓的過程會比較複雜,很多時候最初的試抓過程,並不能解決所有問題,甚至是大部分的問題,原因就是我們沒有找到一個最佳的共同特性。我們先來試抓網址:

Power Query網抓韓劇資源

每頁中的韓劇內容保存在一行裡,這個比較少見,多數時候是一個表單,好在這個網頁的格式非常固定,韓劇網址所在的行也是固定不變的,我們在第二步直接就保留一行就好了。這個方法在下載地址試抓中我也用了,後來發現那個下載地址網頁內容極不規範,最後用了篩選行。

有時候大家看到一堆的html源碼就慌了,其實html要想整齊的顯示出來,代碼必然也是有規律可循的,我們看頁面中一頁有12部韓劇,那麼我們只要分成12列就好了,關鍵在於分列的分隔符用什麼比較好?通過觀察我們發現一部韓劇被認為是一個article,結尾的位置都有我們就用它來分列就好了。

分列後逆透視,變成一列,然後提取網址和韓劇名稱,這個過程我也是試了好幾次,最後在整個抓取結束後,發現提取的還是有些問題,有些網址沒有提取出來,有些韓劇名稱沒有提取出來,有返回到這一步,再次嘗試,我用的是提取分隔符之間的文本,就是要找到網址前的"ref=",網址後的“.html”,以及韓劇名稱前的“title=”,韓劇名稱後面的“”。

Power Query網抓韓劇資源

韓劇網址的試抓基本完成了,當然我實際上是反覆修改了幾次才可以的。

下載地址試抓,不要想著一次就成,因為網站維護估計不是一個人完成的,不同的人寫代碼習慣不同,就是同一個人,還有手誤的時候,下載地址中提取碼,有時就是密碼,好在都有一個“碼”字。

Power Query網抓韓劇資源

這個過程與韓劇網址抓取過程差不多,就是第二步我們用了篩選,沒用保留行,再有就是提取分隔符之間的文本,用到的分隔符不同,基本步驟一致。

自定義函數

在試抓好的查詢上右鍵,選擇創建函數:

Power Query網抓韓劇資源

Power Query網抓韓劇資源

韓劇網址抓取函數,我們用p做為頁碼參數。

Power Query網抓韓劇資源

下載地址抓取函數,我們用url作為參數。

抓取

建一個空查詢,輸入一個55行的列表:

Power Query網抓韓劇資源

自定義列引用韓劇網址抓取函數,抓取韓劇名稱和網址:

Power Query網抓韓劇資源

展開:

Power Query網抓韓劇資源

在這一步就有可能發現問題,看看預覽中網址是不是都有,韓劇名稱有沒有空白,如果有,就找到對應的頁碼,回到試抓那一步,修改頁碼查看試抓步驟中,哪一步有問題,看看有沒有能夠統一的解決辦法。找到解決方法後,修改自定義函數,在來刷新就能看到修改後的效果了。

即使多次修改,仍然有部分網址空白,或者韓劇名稱空白,那麼就要篩選掉空白行,避免下載地址抓取時出錯。我這步有一行韓劇名稱空白,對應的網址是頁碼,所以就直接篩選掉了。

再自定義列引用下載地址抓取函數,並展開:

Power Query網抓韓劇資源

這一步可能出現的結果和上一步差不多,如果大面積的空白,就表示下載地址抓取函數定義的不成功,要返回試抓過程做修改,再來刷新,看結果。


(此處已添加圈子卡片,請到今日頭條客戶端查看)


分享到:


相關文章: