這是簡易數(shù)據(jù)分析系列的第 9 篇文章。
今天我們說說 Web Scraper 的一些小功能:自動控制 Web Scraper 抓取數(shù)量和 Web Scraper 的父子選擇器。
如何只抓取前 100 條數(shù)據(jù)?
如果跟著上篇教程一步一步做下來,你會發(fā)現(xiàn)這個爬蟲會一直運(yùn)作,根本停不下來。網(wǎng)頁有 1000 條數(shù)據(jù),他就會抓取 1000 條,有 10W 條,就會抓取 10W 條。如果我們的需求很小,只想抓取前 200 條怎么辦?
如果你手動關(guān)閉抓取數(shù)據(jù)的網(wǎng)頁,就會發(fā)現(xiàn)數(shù)據(jù)全部丟失,一條都沒有保存下來,所以說這種暴力的方式不可取。我們目前有兩種方式停止 Web Scraper 的抓取。
1.斷網(wǎng)大法
當(dāng)你覺得數(shù)據(jù)抓的差不多了,直接把電腦的網(wǎng)絡(luò)斷了。網(wǎng)絡(luò)一斷瀏覽器就加載不了數(shù)據(jù),Web Scraper 就會誤以為數(shù)據(jù)抓取完了,然后它會自動停止自動保存。
斷網(wǎng)大法簡單粗暴,雖不優(yōu)雅,但是有效。缺點(diǎn)就是你得在旁邊盯著,關(guān)鍵點(diǎn)手動操作,不是很智能。
2.通過數(shù)據(jù)編號控制條數(shù)
比如說上篇文章的少數(shù)派熱門文章爬蟲,container 的 Selector 為 dl.article-card
,他會抓取網(wǎng)頁里所有編號為 dl.article-card
的數(shù)據(jù)。
我們可以在這個 Selector 后加一個 :nth-of-type(-n+100)
,表示抓取前 100 條數(shù)據(jù),前 200 條就為 :nth-of-type(-n+200)
,1000 條為 :nth-of-type(-n+1000)
,以此類推。
這樣,我們就可以通過控制數(shù)據(jù)的編號來控制需要抓取的數(shù)據(jù)。
抓取鏈接數(shù)據(jù)時,頁面跳轉(zhuǎn)怎么辦?
在上文抓取數(shù)據(jù)時,可能會遇到一些問題,比如說抓取標(biāo)題時,標(biāo)題本身就是個超鏈接,點(diǎn)擊圈選內(nèi)容后打開了新的網(wǎng)頁,干擾我們確定圈選的內(nèi)容,體驗(yàn)不是很好。
其實(shí) Web scraper 提供了對應(yīng)的解決方案,那就是通過鍵盤來選擇元素,這樣就不會觸發(fā)點(diǎn)擊打開新的網(wǎng)頁的問題了。具體的操作面板如下所示,就是我們點(diǎn)擊 Done Selecting
的那個控制條。
我們把單選按鈕選擇后,會出現(xiàn) S ,P, C 三個字符,意思分別如下:
S:Select,按下鍵盤的 S 鍵,選擇選中的元素
P:Parent,按下鍵盤的 P 鍵,選擇選中元素的父節(jié)點(diǎn)
C:Child,按下鍵盤的 C 鍵,選擇選中元素的子節(jié)點(diǎn)
我們分別演示一下,首先是通過 S 鍵選擇標(biāo)題節(jié)點(diǎn):
我們對比上個動圖,會發(fā)現(xiàn)節(jié)點(diǎn)選中變紅的同時,并沒有打開新的網(wǎng)頁。
如何抓取選中元素的父節(jié)點(diǎn) or 子節(jié)點(diǎn)?
通過 P 鍵和 C 鍵選擇父節(jié)點(diǎn)和子節(jié)點(diǎn):
按壓 P 鍵后,我們可以明顯看到我們選擇的區(qū)域大了一圈,再按 C 鍵后,選擇區(qū)域又小了一圈,這個就是父子選擇器的功能。
這期介紹了 Web Scraper 的兩個使用小技巧,下期我們說說 Web Scraper 如何抓取無限滾動的網(wǎng)頁。