這是簡易數據分析系列的第 8 篇文章。
原文首發於博客園:簡易數據分析 08。
我們在Web Scraper 翻頁——控制鏈接批量抓取數據一文中,介紹了控制網頁鏈接批量抓取數據的辦法。
但是你在預覽一些網站時,會發現隨著網頁的下拉,你需要點擊類似於「加載更多」的按鈕去獲取數據,而網頁鏈接一直沒有變化。
所以控制鏈接批量抓去數據的方案失效了,所以我們需要模擬點擊「加載更多」按鈕,去抓取更多的數據。
今天我們講的,就是利用 web scraper 裡的 Element click 模擬點擊「加載更多」,去加載更多的數據。
這次的練習網站,我們拿少數派網站的熱門文章作為我們的練習對象,對應的網址鏈接是:
https://sspai.com/tag/%E7%83%AD%E9%97%A8%E6%96%87%E7%AB%A0#home
為了複習上一個小節的內容,這次我們模擬點擊翻頁的同時,還要抓取多條內容,包括作者、標題、點贊數和評論數。
下面開始我們的數據採集之路。
1.創建 sitmap
老規矩,第一步我們先創建一個少數派的 sitmap,取名為 sspai_hot,起始鏈接為 https://sspai.com/tag/%E7%83%AD%E9%97%A8%E6%96%87%E7%AB%A0#home。
2.創建容器的 selector
通過上一節的內容,我們知道想在 web scraper 裡想抓取多種類型的數據,必須先創建一個容器(container),這個容器包含多種類型的數據,所以我們第二步就是要創建容器的 selector。
要注意的是,這個 selector 的 Type 類型選為 Element click,翻譯成中文就是模擬點擊元素,意如其名,我們可以利用這種類型模擬點擊「加載更多」按鈕。
這種類型的 selector,會多出幾個選項,第一個就是 Click selector,這個就是選擇「加載更多」按鈕的,具體操作可見下圖的動圖。
還有幾個多出來的選項,我們一一解釋一下:
1.Click type
點擊類型,click more 表示點擊多次,因為我們要抓取批量數據,這裡就選擇 click more,還有一個 click once 選項,點擊一次
2.Click element uniqueness
這個選項是控制 Web Scraper 什麼時候停止抓取數據的。比如說 Unique Text,表示文字改變時停止抓取數據。
我們都知道,一個網站的數據不可能是無窮無盡的,總有加載完的時候,這時候「加載更多」按鈕文字可能就變成「沒有更多」、「沒有更多數據」、「加載完了」等文字,當文字變動時,Web scraper 就會知道沒有更多數據了,會自動停止抓取數據。
3.Multiple
這個我們的老朋友了,表示是否多選,這裡我們要抓取多條數據,當然要打勾。
4.Discard initial elements
是否丟棄初始元素,這個主要是去除一些網站的重複數據用的,不是很重要,我們這裡也用不到,直接選擇 Never discard,從不丟棄數據。
5.Delay
延遲時間,因為點擊加載更多後,數據加載需要一段時間,delay 就是等待數據加載的時間。一般我們設置要大於等於 2000,因為延遲 2s 是一個比較合理的數據,如果網絡不好,我們可以設置更大的數字。
3.創建子選擇器
接下來我們創建幾個子選擇器,分別抓取作者、標題、點贊數和評論數四種類型的數據,詳細操作我在上一篇教程中已經說明了,這裡我就不詳細說明了。整個爬蟲的結構如下,大家可以參考一下:
4.抓取數據
按照 Sitemap spay_hot -> Scrape 的操作路徑就可以抓取數據了。
今天我們學習了通過 Web Scraper 抓取點擊加載更多類型的網頁。實踐過程中,你會發現這種類型的網頁無法控制爬取數目,不像豆瓣 TOP250,明明白白就是 250 條數據,不多也不少。下一篇我們就聊聊,如何利用 Web Scraper,自動控制抓取的數目。
簡易數據分析 04 | Web Scraper 初嘗--抓取豆瓣高分電影
簡易數據分析 06 | 如何導入別人已經寫好的 Web Scraper 爬蟲
簡易數據分析 07 | Web Scraper 抓取多條內容
閱讀更多 圖表進化論 的文章