
這是簡易數據分析系列的第 12 篇文章。
前面幾篇文章我們介紹了 Web Scraper 應對各種翻頁的解決方法,比如說修改網頁鏈接加載數據、點擊“更多按鈕“加載數據和下拉自動加載數據。今天我們說說一種更常見的翻頁類型——分頁器。
本來想解釋一下啥叫分頁器,翻了一堆定義覺得很繁瑣,大家也不是第一年上網了,看張圖就知道了。我找了個功能最全的例子,支持數字頁碼調整,上一頁下一頁和指定頁數跳轉。

今天我們就學學,Web Scraper 怎么對付這種類型的網頁翻頁。
其實我們在本教程的第一個例子,抓取豆瓣電影 TOP 排行榜中,豆瓣的這個電影榜單就是用分頁器分割數據的:

但當時我們是找網頁鏈接規律抓取的,沒有利用分頁器去抓取。因為當一個網頁的鏈接變化規律時,控制鏈接參數抓取是實現成本最低的;如果這個網頁進可以翻頁,但是鏈接的變化不是規律的,就得去會一會這個分頁器了。
說這些理論有些枯燥,我們舉個翻頁鏈接不規律的例子。
8 月 2 日是蔡徐坤的生日,為了表達慶祝,在微博上粉絲們給坤坤刷了 300W 的轉發量,微博的轉發數據正好是用分頁器分割的,我們就分析一下微博的轉發信息頁面,看看這類數據怎么用 Web Scraper 抓取。

這條微博的直達鏈接是:
https://weibo.com/1776448504/I0gyT8aeQ?type=repost
看了他那么多的視頻,為了表達感激,我們可以點進去出為坤坤加一份閱讀量。
首先我們看看第 1 頁轉發的鏈接,長這個樣子:
第 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)關注上車防失聯。

