這是簡易數據分析系列的第 13 篇文章。html
在前面的課程裏,咱們抓取的數據都是在同一個層級下的內容,探討的問題主要是如何應對市面上的各類分頁類型,但對於詳情頁內容數據如何抓取,卻一直沒有介紹。web
好比說咱們想抓取 b 站的動畫區 TOP 排行榜的數據:json
https://www.bilibili.com/ranking/all/1/0/3瀏覽器
按以前的抓取邏輯,咱們是把這個榜單上和做品有關的數據抓取一遍,好比說下圖裏的排名、做品名字、播放量、彈幕數和做者名。ide
常常逛 B 站的小夥伴也知道,UP 主常常暗示觀看視頻小夥伴三連操做(點贊+投幣+收藏),因而可知,這 3 個數據對視頻的排名有必定的影響力,因此這些數據對咱們來講也有必定的參考價值。動畫
但遺憾的是,在這個排名列表裏,並無相關數據。這幾個數據在視頻詳情頁裏,須要咱們點擊連接進去才能看到:spa
今天的教程內容,就是教你如何利用 Web Scraper,在抓取一級頁面(列表頁)的同時,抓取二級頁面(詳情頁)的內容。code
##1.建立 SiteMap視頻
首先咱們找到要抓取的數據的位置,關鍵路徑我都在下圖的紅框裏標出來了,你們能夠對照一下:htm
而後建立一個相關的 SiteMap,這裏我取了個 bilibili_rank
的名字:
設置以前咱們先觀察一下,發現這個網頁的排行榜數據是 100 條數據一次性加載完的,沒有分頁的必要,因此這裏的 Type 類型選爲 Element 就行。
其餘的參數都比較簡單,就不細說了(不太懂的能夠看我以前的基礎教程)這裏截個圖你們能夠作個參考:
此次子選擇器要抓取的內容以下,也都比較簡單,截個圖你們能夠參考一下:
若是作到這一步,其實已經能夠抓到全部已知的列表數據了,但本文的重點是:如何抓取二級頁面(詳情頁)的三連數據?
跟着作了這麼多爬蟲,可能你已經發現了,Web Scraper 本質是模擬人類的操做以達到抓取數據的目的。
那麼咱們正常查看二級頁面(詳情頁)是怎麼操做的呢?其實就是點擊標題連接跳轉:
Web Scraper 爲咱們提供了點擊連接跳轉的功能,那就是 Type 爲 Link 的選擇器。
感受有些抽象?咱們對照例子來理解一下。
首先在這個案例裏,咱們獲取了標題的文字,這時的選擇器類型爲 Text:
當咱們要抓取連接時,就要再建立一個選擇器,選的元素是同樣的,可是 Type 類型爲 Link
:
建立成功後,咱們點擊這個 Link 類型的選擇器,進入他的內部,再建立相關的選擇器,下面我錄了個動圖,注意看我鼠標強調的導航路由部分,能夠很清晰的看出這幾個選擇器的層級關係:
當你點擊連接後就會發現,瀏覽器會在一個新的 Tab 頁打開詳情頁,可是 Web Scraper 的選擇窗口開在列表頁,沒法跨頁面選擇想要的數據。
處理這個問題也很簡單,你能夠複製詳情頁的連接,拷貝到列表頁所在的 Tab 頁裏,而後回車從新加載,這樣就能夠在當前頁面選擇了。
咱們在類型爲 Link 的選擇器內部多建立幾個選擇器,這裏我選擇了點贊數、硬幣數、收藏數和分享數 4 個數據,這個操做也很簡單,這裏我就不詳細說了。
全部選擇器的結構圖以下:
咱們能夠看到 video_detail_link 這個節點包含 4 個二級頁面(詳情頁)的數據,到此爲止,咱們的子選擇器已經所有創建好了。
終於到了激動人心的環節了,咱們要開始抓取數據了。可是抓取前咱們要把等待時間調整得大一些,默認時間是 2000 ms,我這裏改爲了 5000 ms。
爲何這麼作?看了下圖你就明白了:
首先,每次打開二級頁面,都是一個全新的頁面,這時候瀏覽器加載網頁須要花費時間;
其次,咱們能夠觀察一下要抓取的點贊量等數據,頁面剛剛加載的時候,它的值是 「--」,等待一下子後纔會變成數字。
因此,咱們直接等待 5000 ms,等頁面和數據加載完成後,再統一抓取。
配置好參數後,咱們就能夠正式抓取並下載了。下圖是我抓取數據的一部分,特此證實此方法有用:
此次的教程可能有些難度,我把個人 SiteMap 分享出來,製做的時候若是遇到難題,能夠參考一下個人配置,SiteMap 導入的功能我在第 6 篇教程裏詳細說明了,你們能夠配合食用:
{"_id":"bilibili_rank","startUrl":["https://www.bilibili.com/ranking/all/1/0/3"],"selectors":[{"id":"container","type":"SelectorElement","parentSelectors":["_root"],"selector":"li.rank-item","multiple":true,"delay":0},{"id":"title","type":"SelectorText","parentSelectors":["container"],"selector":"a.title","multiple":false,"regex":"","delay":0},{"id":"author","type":"SelectorText","parentSelectors":["container"],"selector":"a span","multiple":false,"regex":"","delay":0},{"id":"play_amount","type":"SelectorText","parentSelectors":["container"],"selector":".detail > span:nth-of-type(1)","multiple":false,"regex":"","delay":0},{"id":"danmu_amount","type":"SelectorText","parentSelectors":["container"],"selector":"span:nth-of-type(2)","multiple":false,"regex":"","delay":0},{"id":"video_detail_link","type":"SelectorLink","parentSelectors":["container"],"selector":"a.title","multiple":false,"delay":0},{"id":"coin","type":"SelectorText","parentSelectors":["video_detail_link"],"selector":"span.coin","multiple":false,"regex":"","delay":0},{"id":"collect","type":"SelectorText","parentSelectors":["video_detail_link"],"selector":"span.collect","multiple":false,"regex":"","delay":0},{"id":"share","type":"SelectorText","parentSelectors":["video_detail_link"],"selector":"span.share","multiple":false,"regex":"[0-9]+","delay":0},{"id":"num","type":"SelectorText","parentSelectors":["container"],"selector":"div.num","multiple":false,"regex":"","delay":0},{"id":"like","type":"SelectorText","parentSelectors":["video_detail_link"],"selector":".ops span.like","multiple":false,"regex":"","delay":0}]}
當你掌握了二級頁面的抓取方式後,三級頁面、四級頁面也不在話下。由於套路都是同樣的:都是在 Link 選擇器指向的下一個頁面抓取數據,由於原理是同樣的,我就不演示了。
簡易數據分析 06 | 如何導入別人已經寫好的 Web Scraper 爬蟲
簡易數據分析 05 | Web Scraper 翻頁——控制連接批量抓取數據
簡易數據分析 08 | Web Scraper 翻頁——點擊「更多按鈕」翻頁
簡易數據分析 10 | Web Scraper 翻頁——抓取「滾動加載」類型網頁
簡易數據分析 12 | Web Scraper 翻頁——抓取分頁器翻頁的網頁
由於文章發在各大平臺上,帳號較多不能及時回覆評論和私信,有問題可關注公衆號 ——「鹵代烴實驗室」,關注上車防失聯。
原文出處:https://www.cnblogs.com/web-scraper/p/web_scraper_detail_page.html