你今天爬蟲了嗎? 如何使用selenium爬取Instagram貼文時間?(附Python程式碼)

Clarissa RJ Tai
Marketingdatascience
Mar 16, 2021

本篇文章會從頭複習一下,如何檢視網頁及找到所需的資訊,若是您只需要程式碼的話,那也可以直接往下滑到最後唷~

動態網頁爬蟲一切的開始都是從網頁檢視器,觀察觀察再觀察!

Photo by: Christina @ wocintechchat.com

本篇文章,將會帶領大家抓取Instagram貼文的發文時間!

發文時間為什麼很重要呢?因為「時間」在後續分析內會起到相當大的作用!

若您是粉專帳號擁有者:

一定會想知道自己付錢打的廣告有沒有生效?何時生效?

按讚數、留言數是否跟發文時間有關?

早上發文還是晚上發文效果比較好呢?

若您是分析人員,更是應該了解時間是分析上的重大指標,因為:

有了發文時間就能更有效率更有意義的排序貼文並視覺化更多資料了

例如:粉專一個月內成長趨勢圖、貼文發布後一個月的按讚數、留言數成長曲線!帳號未來的成長潛力也會因此而一目瞭然!

話不多說,我們趕快開始介紹吧!

檢視網頁

第一步,我們先打開網頁檢視器(Windows系統:請按f12、macOS系統:請按option+command+c)可以看到以下視窗(圖一)。

圖一、網頁檢視器畫面 (資料畫面來源:https://www.instagram.com/p/CEYqVrtp1HA/)

之後點選彈出視窗上方的Elements,檢視網頁(圖二)

圖二、點選彈出視窗上方的Elements

點選旁邊的小鼠標(圖三)。這時當我們任意的在網頁上滑動,旁邊的藍色網底區塊應該也會跟著移動(圖四)

圖三、點擊彈出視窗左上角的小鼠標
圖四、顯示網頁元素對應到的區域 (資料畫面來源:https://www.instagram.com/p/CEYqVrtp1HA/)

這時聰明的各位應該已經有概念了,沒錯!它會自動幫我們找到鼠標對應區塊的網頁元素!

複習完了,趕快往下走,要如何爬取 PO文時間呢?

找到需要的網頁資訊

我們這次要爬取的是instagram的po文時間,所以趕快把鼠標移到時間上吧!(圖五)

圖五、點擊欲瀏覽的區域 (資料畫面來源:https://www.instagram.com/p/CEYqVrtp1HA/)

點擊網頁元素後,旁邊的網頁檢視器也會出現對應的網頁原始碼(圖六)

圖六、出現對應的網頁元素碼 (資料畫面來源:https://www.instagram.com/p/CEYqVrtp1HA/)

放大來看看,非常幸運的,雖然網頁上只有顯示概略時間,但是,原始碼上竟然有datetime啊(圖七)!(但其他動態網頁可能就沒這麼幸運了~)

圖七、網頁元素碼

觀察完網頁的部分,接下來要進入程式寫作、使用Selenium跟Beautiful Soup的階段了!

想知道 Chromedriver的強大請見此
如何透過 Selenium登入 Instagram請見此

撰寫程式

開始之前,我們先打開Python3編輯器和chromedriver

以下是我們本次需要的套件,先import進來。

下方就是爬出單篇文章的貼文時間所有需要的程式碼啦!

就這樣搞定啦~~~是不是很簡單呢!

接下來,我會將程式碼分為三部分來解釋各行程式碼的用處及原理。

1. 前往特定貼文頁面

url = ‘https://www.instagram.com/p/CEYqVrtp1HA/'
browser.get(url)

url就是你需要爬取資料的網頁連結,使用browser.get(url)可以使webdriver前往對應的網頁,之後爬取資料。

如果對前面seleunium文章有閱讀的印象,應該知道 如何browser的重要性及開啟方法,還不知道的請見動態網頁爬蟲第一道鎖 — Selenium教學:如何使用Webdriver、send_keys(附Python 程式碼)

2. 抓取目前網頁原始碼

執行完上方的程式碼後,webdriver的chrome介面應該已前往對應貼文了,此時需要抓取網頁原始碼,並解密。

這時就需要Beautiful Soup的強大功能啦~簡簡單單的一行就出來了,真的是非常方便,如下程式碼!

soup = Soup(browser.page_source,”lxml”) # 抓取網頁原始碼

3. 獲得需要的內容:貼文時間

網頁架構是一層一層的包起來的,所以為了找到我們需要的資訊需要一層一層的往下找,這時使用Beautiful Soup的find()就非常的方便。

# find article標籤內容
arti = soup.article
# 抓取特定classname裡的datetime標籤
post_time = arti.find(class_ = “_1o9PC Nzb55”).get(‘datetime’)

回到底下這張圖(圖八),我們可以觀察到藍底的部分標籤為time、class為_1o9PC Nzb55,通常情況下類似的網頁元素會有相同的classname而且會是獨一無二的,所以透過這個特殊的classname我們可以把這格的資訊找出來!

圖八、網頁元素碼

time裡面有黃色字的class、datetime、title,使用get(“datetime”)就可以抓到datetime後面的內容了。

以上就是初步的網頁爬蟲了,但是切記每個網頁都會定期維護,今天可以爬成功,明天就不一定了(這是程式分析人員的痛苦心聲…)。

因此爬蟲程式碼也是需要定期偵錯的,

大家加油!

以上就是本文關於爬取instagram發文時間的內容了。

本文完整程式碼在此

如果你喜歡我的文章,請給我一點掌聲。

更多Selenium相關文章連結:

  1. FB 爬蟲可以更簡單-用Selenium自動登入FB-系列1(附Python程式碼)
  2. 好奇自己FB的互動性指標嗎?!用Selenium爬蟲-搞定貼文按讚數、留言數、分享數-系列2(附Python程式碼)
  3. 用Selenium爬蟲-抓取FB文章內容、時間-系列3(附Python程式碼)
  4. 跟著IG潮流來爬蟲-用Selenium帶您自動登入 IG -系列1(附Python程式碼)
  5. 跟著IG潮流來爬蟲-如何爬取IG貼文短連結-系列2(附Python程式碼)

作者:戴若竹(臺灣行銷研究特邀作者)、鍾皓軒(臺灣行銷研究有限公司創辦人)

— — — — — — — — — — — — — — — —

往後的文章都會持續在行銷資料科學粉絲專頁上發表喔,喜歡我們就趕緊追蹤吧!

同時再請大家多多follow我們的FB粉絲專頁,我們會在粉專上即時公布最新資訊,讓您重要消息不漏接!

FB粉絲專頁:行銷資料科學

官網:臺灣行銷研究

歡迎加入我們的Telegram獲取即時訊息!https://t.me/marketingdatascience
歡迎加入我們的Line@獲取即時訊息!https://line.me/R/ti/p/%40cde8265r

--

--

Clarissa RJ Tai
Marketingdatascience

"Step by step approaching my dream. Welcome to the world of DATA."