跟著IG潮流來爬蟲 -
如何爬取IG貼文讚數&留言數 (附Python程式碼)
歡迎回到 Selenium 動態網頁爬蟲系列文章,本篇文章要和大家分享如何進一步使用 Selenium 爬取 Instagram 貼文讚數&留言數~
更多IG爬蟲系列文章看這裡~
跟著IG潮流來爬蟲-用Selenium帶您自動登入 IG -(附Python程式碼)
跟著IG潮流來爬蟲 — 如何爬取IG貼文短連結 — (附Python程式碼)
為何要爬 Instagram 貼文的讚數與留言數呢?
Instagram 中有許多大大小小的粉絲專頁,在他們發佈的貼文中讚數與留言數一直是行銷人拿來衡量的指數,從中可以了解這些粉絲專頁的經營狀況以及成長趨勢。
接下來,我們就開始教各位如何獲取這些資料吧!!
網頁檢視器概念說明
以 bbcnews 的粉絲專頁為例,https://www.instagram.com/bbcnews/,我們打開網頁檢視器 (Windows 系統:請按 F12;MacOS 系統:option+command+c) ,可以看到以下視窗,如圖一。
之後點選彈出視窗上方的 Elements,檢視網頁,如圖二所示。
之後再點選旁邊的小鼠標,這時當我們任意的在網頁上滑動,旁邊的灰色網底區塊應該也會跟著移動,如圖三。
若將鼠標移到網站中的任意區塊做點擊,它就會自動幫我們找到鼠標對應區塊的網頁元素!
尋找
由於我們是要爬取 Instagram 的「貼文讚數」與「留言數」,若您很熟悉 Instagram 的介面,應該很輕易就能找到他們所在的位置,如圖四所示,只要將滑鼠移到貼文上方,目標很快地就出現在眼前了!
接下來,您就可以使用剛剛提到的小鼠標功能,將鼠標移至貼文上方點擊,就可以得到貼文區塊的元素,如圖五。
但是這時候會發現,想要的讚數跟貼文數的網頁元素怎麼都找不到呢?
動動您手上的滑鼠,就會發現只要將滑鼠移到貼文上方就會顯現出來了!如動畫一所示。
但,您可能心中會有個疑問 :
可是我沒有兩隻滑鼠可以用啊!
那我們應該如何才能找到它們的元素呢?
這時候就會使用 Selenium 裡面模擬滑鼠操作的功能 — ActionChains
我們使用 ActionChains 的技巧將「模擬的」滑鼠移到貼文的位置,就會發現一個包含class = "qn-0x"
的標籤顯現出來了!
這時要小心翼翼地控制自己的滑鼠,在不能滑到 Instagram 頁面的前提下,從剛才顯示出來的標籤,將旁邊的箭頭一一往下點,就可以在如圖六紅框中找出讚數及貼文數隱藏的位置囉!
找出想要的資訊之後,就可以進入程式操作的部分囉~
開始之前,我們先打開 Python3 編輯器和 Chromedriver
若想知道 Chromedriver 是如何運作的,請點以下連結~
- 動態網頁爬蟲第一道鎖 — Selenium教學:如何使用Webdriver、send_keys(附Python 程式碼)
- 動態網頁爬蟲第二道鎖 — Selenium教學:如何使用find_element(s)取得網頁元素(附Python 程式碼)
完成開啟 Chromedriver 並登入之後,就可以開始執行以下的程序了
開始爬取貼文讚數及留言數
首先我們將需要用到的套件import進來,如程式碼 1:
接下來我們進入到粉專的頁面,如程式碼 2:
以上程式碼解析
接下來為各位做以上程式碼的解析:
1. 前往特定貼文頁面,如下程式碼。
url = 'https://www.instagram.com/bbcnews/'
browser.get(url) # 前往該網址
url
指的就是您需要爬取資料的網頁連結,使用 browser.get(url)
可以使 webdriver 前往對應的網頁,之後爬取需要的資料。
2. 將鼠標移至想要爬取的貼文上,如下程式碼。
post_url = '/p/CEriQnOMwW9/'
# 找到對應的貼文,鼠標移入
post_elem = browser.find_element_by_xpath('//a[@href="'+str(post_url)+'"]')
action = ActionChains(browser) action.move_to_element(post_elem).perform()
這裡的 post_url
就是想要爬取的貼文短連結,這個部分可以自行做更改,(短連結形式請依照:‘ /p/貼文編號/ ’)
想要了解貼文短連結如何直接透過 Selenium 爬取的朋友們可以參考此文章
跟著IG潮流來爬蟲 — 如何爬取IG貼文短連結 — 系列2(附Python程式碼)
接下來我們找出該篇貼文的元素 (post_elem),這邊就要使用 Selenium 查找元素的方法:browser.find_element_by_xpath()
。
再透過 ActionChains 的鼠標控制將鼠標移動到貼文上方,讓讚數及留言數的元素能夠被抓出來。
3. 找出讚數及留言數的元素
# 找到需要的網頁元素
n_like_elem = browser.find_elements_by_class_name('-V_eO')
# 取得讚數、留言數
n_like = n_like_elem[0].text
n_comment = n_like_elem[1].text
這時我們再回到網頁元素的地方來觀察,要從哪裡來抓取讚數與貼文數的內容呢?
從圖七中可以發現它們的內容都一樣被包含在class = "-V_e0"
的標籤底下,那我們就可以輕鬆的一次把它們全部抓下來~
目前為止需要的東西已經到手了,但…還沒完!
如果現在 browser 的畫面中看不到欲爬取的那篇貼文,電腦也是找不到的喔~
Instagram 是一個動態加載的網頁,這就是為何我們必需使用 Selenium 來爬取的用意
那麼,我們應該怎麼解決呢?
find = False
# 不在目前的網頁元素裡,則往下滑,加載新貼文
while not find:
try:
----------------------
取得讚數及留言數的程式內容
----------------------
# 找到之後就可以回傳‘找到了’
find = True
except:
# 找不到就往下滑
scroll = 'window.scrollBy(0,250)'
browser.execute_script(scroll)
continue
這時,可以用一個「while迴圈」來重複嘗試抓取的動作,如果找不到貼文的所在位置的話,就將頁面往下滑。
而下滑的方式我們使用 Javascript 中的 window.scrollBy(),
每找一次都將頁面下滑 250 個像數。
直到找到了就回傳 find = True,電腦就知道「哦~您找到了!」
它就會停止再繼續做下滑的動作。
以上就是爬取 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程式碼)
作者:黃鈺淇(臺灣行銷研究特邀作者)、鍾皓軒(臺灣行銷研究有限公司創辦人)
更多實戰案例及情境好文推薦
動態網頁爬蟲第二道鎖 - Selenium教學:如何使用find_element(s)取得任何網頁上能看到的內容(附Python 程式碼)
動態網頁爬蟲第二道鎖 - Selenium教學:如何使用find_element(s)取得任何網頁上能看到的內容(附Python 程式碼)
消費者跟你想的都不一樣!解析品牌在消費者心中的真實定位!(Python程式碼)
消費者跟你想的都不一樣!解析品牌在消費者心中的真實定位!(Python程式碼) 企業每年都會訂定本年度的行銷策略與品牌定位。引導後續所有行銷