Web Scraper 翻頁——抓取分頁器翻頁的網頁(Web Scraper 高級用法)| 簡易數據分析 12


這是簡易數據分析系列的第 12 篇文章。

前面幾篇文章我們介紹了 Web Scraper 應對各種翻頁的解決方法,比如說修改網頁鏈接加載數據點擊“更多按鈕“加載數據下拉自動加載數據。今天我們說說一種更常見的翻頁類型——分頁器

本來想解釋一下啥叫分頁器,翻了一堆定義覺得很繁瑣,大家也不是第一年上網了,看張圖就知道了。我找了個功能最全的例子,支持數字頁碼調整,上一頁下一頁和指定頁數跳轉。

今天我們就學學,Web Scraper 怎么對付這種類型的網頁翻頁。

其實我們在本教程的第一個例子,抓取豆瓣電影 TOP 排行榜中,豆瓣的這個電影榜單就是用分頁器分割數據的:

但當時我們是找網頁鏈接規律抓取的,沒有利用分頁器去抓取。因為當一個網頁的鏈接變化規律時,控制鏈接參數抓取是實現成本最低的;如果這個網頁進可以翻頁,但是鏈接的變化不是規律的,就得去會一會這個分頁器了。

說這些理論有些枯燥,我們舉個翻頁鏈接不規律的例子。

8 月 2 日是蔡徐坤的生日,為了表達慶祝,在微博上粉絲們給坤坤刷了 300W 的轉發量,微博的轉發數據正好是用分頁器分割的,我們就分析一下微博的轉發信息頁面,看看這類數據怎么用 Web Scraper 抓取。

這條微博的直達鏈接是:

https://weibo.com/1776448504/I0gyT8aeQ?type=repost

看了他那么多的視頻,為了表達感激,我們可以點進去出為坤坤加一份閱讀量。

首先我們看看第 1 頁轉發的鏈接,長這個樣子:

https://weibo.com/1776448504/I0gyT8aeQ?type=repost

第 2 頁長這個樣子,注意到多了個 #_rnd1568563840036 參數:

https://weibo.com/1776448504/I0gyT8aeQ?type=repost#_rnd1568563840036

第 3 頁參數為 #_rnd1568563861839

https://weibo.com/1776448504/I0gyT8aeQ?type=repost#_rnd1568563861839

第 4 頁參數為 #_rnd1568563882276

https://weibo.com/1776448504/I0gyT8aeQ?type=repost#_rnd1568563882276

多看幾個鏈接你就可以發現,這個轉發網頁的網址毫無規律可言,所以只能通過分頁器去翻頁加載數據。下面就開始我們的實戰教學環節。

1.創建 SiteMap

我們首先創建一個 SiteMap,這次取名為 cxk,起始鏈接為 https://weibo.com/1776448504/I0gyT8aeQ?type=repost。

2.創建容器的 selector

因為我們要點擊分頁器,外面的容器的類型我們選為 Element Click,具體的參數解釋可以看下圖,我們之前在簡易數據分析 08詳細解釋過一次,這里就不多言了。

container 的預覽是下圖的樣子:

分頁器選擇的過程可以參看下圖:

3.創建子選擇器

這幾個子選擇器都比較簡單,類型都是文字選擇器,我們選擇了評論用戶名,評論內容和評論時間三種類型的內容。

4.抓取數據

按照 Sitemap cxk -> Scrape 的操作路徑就可以抓取數據了。

5.一些問題

如果你看了我上面的教程立馬去爬數據,可能遇到的第一個問題就是,300w 的數據,難道我全部爬下來嗎?

聽上去也不太現實,畢竟 Web Scraper 針對的數據量都是相對比較小的,幾萬數據都算多的了,數據再大你就得考慮爬取時間是否太長,數據如何存儲,如何應對網址的反爬蟲系統(比如說冷不丁的跳出一個驗證碼,這個 Web Scraper 是無能為力的)。

考慮到這個問題,前面的自動控制抓取數量的教程你又看過的話,可能想着用 :nth-of-type(-n+N) 控制抓取 N 條數據。如果你嘗試了,就會發現這個方法根本沒用。

失效的原因其實涉及到一點點網頁的知識了,感興趣的話可以看看下面的解釋,不感興趣可以直接看最后的結論。

像我前面介紹的點擊更多加載型網頁下拉加載型網頁,他們新加載的數據,是在當前頁面追加的,你一直下拉,數據一直加載,同時網頁的滾動條會越來越短,這意味着所有的數據都在同一個頁面

當我們用 :nth-of-type(-n+N) 控制加載數量時,其實相當於在這個網頁設立一個計數器,當數據一直累加到我們想要的數量時,就會停止抓取。

但是對於使用翻頁器的網頁,每次的翻頁相當於刷新當前網頁,這樣每次都會設立一個計數器。

比如說你想抓取 1000 條數據,但是第 1 頁網頁只有 20 條數據,抓到最后一條了,還差 980 條;然后一翻頁,又設立一個新的計數器,抓完第 2 頁的最后一條數據,還差 980,一翻頁計數器就重置,又變成 1000 了......所以這個控制數量的方法就失效了。

所以結論就是,如果翻頁器類型的網頁想提前結束抓取,只有斷網的這種方法。當然,如果你有更好的方案,可以在評論里回復我,我們可以互相討論一下。

6.總結

分頁器是一種很常見的網頁分頁方法,我們可以通過 Web Scraper 中的 Element click 處理這種類型的網頁,並通過斷網的方法結束抓取。

7.推薦閱讀

簡易數據分析 05 | Web Scraper 翻頁——控制鏈接批量抓取數據

簡易數據分析 08 | Web Scraper 翻頁——點擊「更多按鈕」翻頁

簡易數據分析 10 | Web Scraper 翻頁——抓取「滾動加載」類型網頁

簡易數據分析 09 | Web Scraper 自動控制抓取數量 & Web Scraper 父子選擇器

8.聯系我

因為文章發在各大平台上,賬號較多不能及時回復評論和私信,有問題可關注公眾號 ——「鹵蛋實驗室」,(或 wx 搜索 egglabs)關注上車防失聯。

img


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM