這是簡易數(shù)據(jù)分析系列的第 8 篇文章睦优。
原文首發(fā)于博客園:簡易數(shù)據(jù)分析 08。
我們在Web Scraper 翻頁——控制鏈接批量抓取數(shù)據(jù)一文中呆盖,介紹了控制網(wǎng)頁鏈接批量抓取數(shù)據(jù)的辦法育八。
但是你在預(yù)覽一些網(wǎng)站時,會發(fā)現(xiàn)隨著網(wǎng)頁的下拉改执,你需要點擊類似于「加載更多」的按鈕去獲取數(shù)據(jù)啸蜜,而網(wǎng)頁鏈接一直沒有變化。
所以控制鏈接批量抓去數(shù)據(jù)的方案失效了辈挂,所以我們需要模擬點擊「加載更多」按鈕衬横,去抓取更多的數(shù)據(jù)。
今天我們講的终蒂,就是利用 web scraper 里的 Element click 模擬點擊「加載更多」蜂林,去加載更多的數(shù)據(jù)。
這次的練習(xí)網(wǎng)站拇泣,我們拿少數(shù)派網(wǎng)站的熱門文章作為我們的練習(xí)對象噪叙,對應(yīng)的網(wǎng)址鏈接是:
https://sspai.com/tag/%E7%83%AD%E9%97%A8%E6%96%87%E7%AB%A0#home
為了復(fù)習(xí)上一個小節(jié)的內(nèi)容,這次我們模擬點擊翻頁的同時霉翔,還要抓取多條內(nèi)容睁蕾,包括作者、標(biāo)題债朵、點贊數(shù)和評論數(shù)子眶。
下面開始我們的數(shù)據(jù)采集之路。
2019-12-22 補充:
少數(shù)派官網(wǎng)改版序芦,和我當(dāng)初寫教程的時抓取的網(wǎng)站有些許不同臭杰,主要改動有以下幾點:
- 「加載更多」按鈕改為「更多」按鈕,而且在網(wǎng)頁全屏的情況下改為下拉自動加載谚中,網(wǎng)頁
- 寬度半屏的情況下為點擊「更多」按鈕翻頁渴杆,建議大家在半屏的情況下練習(xí)
只能抓取作者、標(biāo)題和點贊數(shù)這 3 個數(shù)據(jù)宪塔,無法抓取評論數(shù)- 網(wǎng)頁 UI 樣式有些許改動磁奖,但邏輯都是相通的,不影響教程學(xué)習(xí)和數(shù)據(jù)抓取
1.創(chuàng)建 sitmap
老規(guī)矩蝌麸,第一步我們先創(chuàng)建一個少數(shù)派的 sitmap点寥,取名為 sspai_hot,起始鏈接為 https://sspai.com/tag/%E7%83%AD%E9%97%A8%E6%96%87%E7%AB%A0#home来吩。
2.創(chuàng)建容器的 selector
通過上一節(jié)的內(nèi)容敢辩,我們知道想在 web scraper 里想抓取多種類型的數(shù)據(jù)蔽莱,必須先創(chuàng)建一個容器(container),這個容器包含多種類型的數(shù)據(jù)戚长,所以我們第二步就是要創(chuàng)建容器的 selector盗冷。
要注意的是,這個 selector 的 Type 類型選為 Element click同廉,翻譯成中文就是模擬點擊元素仪糖,意如其名,我們可以利用這種類型模擬點擊「加載更多」按鈕迫肖。
這種類型的 selector锅劝,會多出幾個選項,第一個就是 Click selector蟆湖,這個就是選擇「加載更多」按鈕的故爵,具體操作可見下圖的動圖。
還有幾個多出來的選項隅津,我們一一解釋一下:
1.Click type
點擊類型诬垂,click more 表示點擊多次,因為我們要抓取批量數(shù)據(jù)伦仍,這里就選擇 click more结窘,還有一個 click once 選項,點擊一次
2.Click element uniqueness
這個選項是控制 Web Scraper 什么時候停止抓取數(shù)據(jù)的充蓝。比如說 Unique Text隧枫,表示文字改變時停止抓取數(shù)據(jù)。
我們都知道谓苟,一個網(wǎng)站的數(shù)據(jù)不可能是無窮無盡的悠垛,總有加載完的時候,這時候「加載更多」按鈕文字可能就變成「沒有更多」娜谊、「沒有更多數(shù)據(jù)」、「加載完了」等文字斤讥,當(dāng)文字變動時纱皆,Web scraper 就會知道沒有更多數(shù)據(jù)了,會自動停止抓取數(shù)據(jù)芭商。
3.Multiple
這個我們的老朋友了派草,表示是否多選,這里我們要抓取多條數(shù)據(jù)铛楣,當(dāng)然要打勾近迁。
4.Discard initial elements
是否丟棄初始元素,這個主要是去除一些網(wǎng)站的重復(fù)數(shù)據(jù)用的簸州,不是很重要鉴竭,我們這里也用不到歧譬,直接選擇 Never discard,從不丟棄數(shù)據(jù)搏存。
5.Delay
延遲時間瑰步,因為點擊加載更多后,數(shù)據(jù)加載需要一段時間璧眠,delay 就是等待數(shù)據(jù)加載的時間缩焦。一般我們設(shè)置要大于等于 2000,因為延遲 2s 是一個比較合理的數(shù)據(jù)责静,如果網(wǎng)絡(luò)不好袁滥,我們可以設(shè)置更大的數(shù)字。
3.創(chuàng)建子選擇器
接下來我們創(chuàng)建幾個子選擇器灾螃,分別抓取作者题翻、標(biāo)題、點贊數(shù)和評論數(shù)四種類型的數(shù)據(jù)睦焕,詳細(xì)操作我在上一篇教程中已經(jīng)說明了藐握,這里我就不詳細(xì)說明了。整個爬蟲的結(jié)構(gòu)如下垃喊,大家可以參考一下:
4.抓取數(shù)據(jù)
按照 Sitemap spay_hot
-> Scrape
的操作路徑就可以抓取數(shù)據(jù)了猾普。
今天我們學(xué)習(xí)了通過 Web Scraper 抓取點擊加載更多類型的網(wǎng)頁。實踐過程中本谜,你會發(fā)現(xiàn)這種類型的網(wǎng)頁無法控制爬取數(shù)目初家,不像豆瓣 TOP250,明明白白就是 250 條數(shù)據(jù)乌助,不多也不少溜在。下一篇我們就聊聊,如何利用 Web Scraper他托,自動控制抓取的數(shù)目掖肋。
推薦閱讀
簡易數(shù)據(jù)分析 04 | Web Scraper 初嘗--抓取豆瓣高分電影
簡易數(shù)據(jù)分析 06 | 如何導(dǎo)入別人已經(jīng)寫好的 Web Scraper 爬蟲
簡易數(shù)據(jù)分析 07 | Web Scraper 抓取多條內(nèi)容