這是簡易數據分析系列的第 14 篇文章。html
今天咱們還來聊聊 Web Scraper 翻頁的技巧。web
此次的更新是受一位讀者啓發的,他當時想用 Web scraper 爬取一個分頁器分頁的網頁,卻發現我以前介紹的分頁器翻頁方法無論用。我研究了一下才發現我漏講了一種很常見的翻頁場景。編程
在 web scraper 翻頁——分頁器翻頁的文章裏,咱們講了如何利用 Element Click
選擇器模擬鼠標點擊分頁器進行翻頁,可是把一樣的方法放在豆瓣 TOP 250 上,翻頁到第二頁時抓取窗口就會自動退出,一條數據都抓不到。json
其實主要緣由是我沒有講清楚這種方法的適用邊界。動畫
經過 Element Click
點擊分頁器翻頁,只適用於網頁沒有刷新的狀況,我在分頁器那篇文章裏舉了蔡徐坤微博評論的例子,翻頁時網頁是沒有刷新的:網站
仔細看下圖,連接發生了變化,可是刷新按鈕並無變化,說明網頁並無刷新,只是內容變了spa
而在 豆瓣 TOP 250
的網頁裏,每次翻頁都會從新加載網頁:code
仔細看下圖,連接發生變化的同時網頁刷新了,有很明顯的 loading 轉圈動畫htm
其實這個原理從技術規範上很好解釋:當一個 URL 連接是 #
字符後數據變化時,網頁不會刷新;當連接其餘部分變化時,網頁會刷新。固然這個只是隨口提一下,感興趣的同窗能夠去這個連接研究一下,不感興趣能夠直接跳過。blog
本篇文章就來說解一下,如何利用 Web Scraper 抓取翻頁時會刷新網頁的分頁器網站。
此次的網頁咱們選用最開始練手 Web Scraper 的網站——豆瓣電影 TOP250,換個姿式練習 Web Scraper 翻頁技巧。
像這種類型的網站,咱們要藉助 Link 選擇器來輔助咱們翻頁。Link 標籤咱們在上一節介紹過了,咱們能夠利用這個標籤跳轉網頁,抓取另外一個網頁的數據。這裏咱們利用 Link 標籤跳轉到分頁網站的下一頁。
首先咱們用 Link 選擇器選擇下一頁按鈕,具體的配置能夠見下圖:
這裏有一個比較特殊的地方:Parent Selectors
——父選擇器。
以前咱們都沒有碰過這個選擇框的內容,next_page 此次要有兩個父節點——_root 和 next_page,鍵盤按 shift 再鼠標點選就能夠多選了,先按我說的作,後面我會解釋這樣作的理由。
保存 next_page 選擇器後,在它的同級下再建立 container 節點,用來抓取電影數據:
這裏要注意:翻頁選擇器節點 next_page 和數據選擇器節點 container 是同一級,兩個節點的父節點都是兩個:_root 和 next_page:
由於重點是 web scraper 翻頁技巧,抓取的數據上我只簡單的抓取標題和排名:
而後咱們點擊 Selector graph
查看咱們編寫的爬蟲結構:
能夠很清晰的看到這個爬蟲的結構,能夠無限的嵌套下去:
點擊 Scrape
,爬取一下試試,你會發現全部的數據都爬取下來了:
按照上面的流程下來,你可能還會比較困擾,數據是抓下來了,可是爲何這樣操做就能夠呢,爲何 next_page 和 container 要同級,爲何他們要同時選擇兩個父節點:_root 和 next_page?
產生困擾的緣由是由於咱們是倒敘的講法,從結果倒推步驟;下面咱們從正向的思惟分步講解。
首先咱們要知道,咱們抓取的數據是一個樹狀結構,_root 表示根節點,就是咱們的抓取的第一個網頁,咱們在這個網頁要選擇什麼東西呢?
1.一個是下一頁的節點,在這個例子裏就是用 Link 選擇器選擇的 next_page
2.一個是數據節點,在這個例子裏就是用 Element 選擇器選擇的 container
由於 next_page 節點是會跳轉的,會跳到第二頁。第二頁除了數據不同,結構和第一頁仍是同樣的,爲了持續跳轉,咱們還要選擇下一頁,爲了抓取數據,還得選擇數據節點:
若是咱們把箭頭反轉一下,就會發現真相就在眼前,next_page 的父節點,不正好就是 _root 和 next_page 嗎?container 的父節點,也是 _root 和 next_page!
到這裏基本就真相大白了,不理解的同窗能夠再多看幾遍。像 next_page 這種我調用我本身的形式,在編程裏有個術語——遞歸,在計算機領域裏也算一種比較抽象的概念,感興趣的同窗能夠自行搜索瞭解一下。
下面是此次實戰的 Sitemap
,同窗們能夠導入到本身的 web scraper 中進行研究:
{"_id":"douban_movie_top_250","startUrl":["https://movie.douban.com/top250?start=0&filter="],"selectors":[{"id":"next_page","type":"SelectorLink","parentSelectors":["_root","next_page"],"selector":".next a","multiple":true,"delay":0},{"id":"container","type":"SelectorElement","parentSelectors":["_root","next_page"],"selector":".grid_view li","multiple":true,"delay":0}]}
簡易數據分析 05 | Web Scraper 翻頁——控制連接批量抓取數據
簡易數據分析 08 | Web Scraper 翻頁——點擊「更多按鈕」翻頁
簡易數據分析 10 | Web Scraper 翻頁——抓取「滾動加載」類型網頁
簡易數據分析 12 | Web Scraper 翻頁——抓取分頁器翻頁的網頁
簡易數據分析 13 | Web Scraper 高級用法——抓取二級頁面
由於文章發在各大平臺上,帳號較多不能及時回覆評論和私信,有問題可關注公衆號 ——「鹵代烴實驗室」,關注上車防失聯。
原文出處:https://www.cnblogs.com/web-scraper/p/web-scraper-fanye-link.html