這是簡易數據分析系列的第 8 篇文章。
我們在Web Scraper 翻頁——控制鏈接批量抓取數據一文中,介紹了控制網頁鏈接批量抓取數據的辦法。
但是你在預覽一些網站時,會發現隨着網頁的下拉,你需要點擊類似於「加載更多」的按鈕去獲取數據,而網頁鏈接一直沒有變化。
所以控制鏈接批量抓去數據的方案失效了,所以我們需要模擬點擊「加載更多」按鈕,去抓取更多的數據。
今天我們講的,就是利用 web scraper 里的 Element click 模擬點擊「加載更多」,去加載更多的數據。
這次的練習網站,我們拿少數派網站的熱門文章作為我們的練習對象,對應的網址鏈接是:
https://sspai.com/tag/%E7%83%AD%E9%97%A8%E6%96%87%E7%AB%A0#home
為了復習上一個小節的內容,這次我們模擬點擊翻頁的同時,還要抓取多條內容,包括作者、標題、點贊數和評論數。
下面開始我們的數據采集之路。
2019-12-22 補充:
少數派官網改版,和我當初寫教程的時抓取的網站有些許不同,主要改動有以下幾點:
- 「加載更多」按鈕改為「更多」按鈕,而且在網頁全屏的情況下改為下拉自動加載,網頁寬度半屏的情況下為點擊「更多」按鈕翻頁,建議大家在半屏的情況下練習
- 只能抓取作者、標題和點贊數這 3 個數據,無法抓取評論數
- 網頁 UI 樣式有些許改動,但邏輯都是相通的,不影響教程學習和數據抓取
1.創建 sitmap
老規矩,第一步我們先創建一個少數派的 sitmap,取名為 sspai_hot,起始鏈接為 https://sspai.com/tag/熱門文章#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,自動控制抓取的數目。
Sitemap 分享
下面是本節內容的 sitemap,需要的同學可以拿去測試:
{"_id":"sspai","startUrl":["https://sspai.com/tag/%E7%83%AD%E9%97%A8%E6%96%87%E7%AB%A0#home"],"selectors":[{"id":"container","type":"SelectorElementClick","parentSelectors":["_root"],"selector":".article > div.articleCard","multiple":true,"delay":"500","clickElementSelector":"div.loadingMore","clickType":"clickMore","discardInitialElements":"do-not-discard","clickElementUniquenessType":"uniqueText"},{"id":"name","type":"SelectorText","parentSelectors":["container"],"selector":"div.title","multiple":false,"regex":"","delay":0},{"id":"author","type":"SelectorText","parentSelectors":["container"],"selector":".pc_card span.text_ellipsis","multiple":false,"regex":"","delay":0},{"id":"like","type":"SelectorText","parentSelectors":["container"],"selector":".right span","multiple":false,"regex":"","delay":0}]}
推薦閱讀
簡易數據分析 04 | Web Scraper 初嘗--抓取豆瓣高分電影
簡易數據分析 06 | 如何導入別人已經寫好的 Web Scraper 爬蟲
簡易數據分析 07 | Web Scraper 抓取多條內容
聯系我
因為文章發在各大平台上,賬號較多不能及時回復評論和私信,有問題可關注公眾號 ——「鹵蛋實驗室」,(或 wx 搜索 egglabs)關注上車防失聯。