如何用Web Scraper 爬蟲抓取多個分頁的資料

Web Scraper
Web Scraper
Published in
7 min readAug 2, 2018

在先前的教學中,我們抓取的都是「同一頁」的資料。

但是當我們要爬取的資料散落在不同頁時我們該怎麼辦呢?

教學重點:抓取多個分頁的資料

抓取多個分頁資料的做法跟抓取單頁的做法差不多,唯一的差異僅在於「Start Url」的部分。

觀察網頁網址結構

讓我們先到我們的網站,這次我們選定的是關鍵評論網的專題報導頁https://www.thenewslens.com/features)作為範例。

進入網站後讓我們點擊不同的分頁來觀察網址的變化。

可以跟著gif檔或是以下的文字操作一遍,這樣我們會對分頁網址的規則更有印象。

進入頁面後將畫面往下拉,你會看到我們現在位於分頁的第一頁。接下來讓我們點擊第二頁時,現在網頁的網址會變成 https://www.thenewslens.com/features?page=2

而點擊第五頁時,網頁會變成 https://www.thenewslens.com/features?page=5

所以我們可以推論,當我們更改page=後方的數字時,我們就能夠跳到相對應的頁數。
現在讓我們把數字改成10,https://www.thenewslens.com/features?page=10我們就可以看到我們來到了第10頁。

看到這裡你可能會好奇,為什麼所有的頁數都是根據page=後方的數字變化,但是第一頁卻有所不同呢?

讓我們試試看更改數字為1。在我們更改完數字並點擊enter後,你會發現我們來到了第1頁。

分頁規律

在這裡我們可以歸納出兩件事

  1. 只要根據修改”page=”後方的數字,我們就可以跳到任一個分頁
  2. 對於第一頁的內容來說,我們輸入https://www.thenewslens.com/features跟輸入https://www.thenewslens.com/features?page=1所達成的效果是一致的

設定抓取分頁範圍

以剛剛「關鍵評論網」的網頁為例,假使我們要抓取從第一頁到第三頁的內容,我們分別需要抓取以下三頁的內容。

在Web Scraper中,如果要爬取這三頁的內容,我們必須把我們的Start URL設定成
https://www.thenewslens.com/features?page=[1-3]

同理可證,如果是第四到第十頁,那就會變成
https://www.thenewslens.com/features?page=[4-10]

特殊的分頁網址格式

另外要注意的是,並不是所有的網頁的分頁設計都是以下的形式。
https://www.example.com/abc?page=2

有的網頁的1到3頁可能長得像是,

這個時候web scraper上的url設計就會變成
https://www.example.com/article?page=[001-003]

又或者有些網站的1–3頁是

每個頁面的數字間距是10,所以我們如果要抓取1到3頁,web scraper上的url設計就會變成
https://www.example.com/article?page=[0-20:10]

因此在一開始我們要抓取多個分頁的資料時,我們應該先研究分頁的網址如何變化,然後再開始設計我們的start url。

實作Web Scraper爬蟲

接下來,就讓我們來實做看看。

我們要做的是抓取1到3頁中的「文章標題」和「文章敘述」。

首先先設定要抓取的頁數範圍https://www.thenewslens.com/features?page=[1-3]

為了避免資料遺失,在我們抓取不同類型的多筆資料時,記得用Element選擇器當作父層。選取多筆資料後,再於父層選擇器之下設定子選擇器實際抓取資料。

要進到父層選擇器之下設定的話,點擊該選擇器便會自動進入

建立選擇器選取文章標題

建立選擇器選取文章描述

建立後開始爬取數據

成功爬取並匯出資料。

小結

  • 爬取多個分頁要將Start URL設定成https://www.example.com/article?page=[1-3]
  • 如果分頁間數字間距是10,當我們如果要抓取1到3頁的分頁,Start URL會變成
    https://www.example.com/article?page=[0-20:10]
  • 另外,如果你想抓奇數頁面,你可以將Sart URL設計成https://www.example.com/article?page=[1-10:2]

範例Sitemap檔

{"_id":"thenewslens","startUrl":["https://www.thenewslens.com/features?page=[1-3]"],"selectors":[{"id":"element","type":"SelectorElement","selector":"div.project-container:nth-of-type(n+2)","parentSelectors":["_root"],"multiple":true,"delay":"2000"},{"id":"title","type":"SelectorText","selector":"h3","parentSelectors":["element"],"multiple":false,"regex":"","delay":0},{"id":"description","type":"SelectorText","selector":"div.project-description-box","parentSelectors":["element"],"multiple":false,"regex":"","delay":0}]}

--

--

Web Scraper
Web Scraper

This blog is not an official foundation, but a platform for sharing the Chinese tutorials how to use web scraper to scrape data.