利用 Selenium,BeautifulSoup 對 IG,FB 爬取。
紀錄筆記
IG 搜尋關鍵字抓取圖片
敘述
自動化來抓取IG上關鍵字標籤圖片下載!=>ig 官方
Code
安裝
示範於 作業系統:windows 瀏覽器:Chrome
需先安裝:
第三方套件
wget
- 使
pip install wget
- 使
selenium
- 使
pip install selenium
- 使
webdriver
- 需先查看瀏覽器版本
step1: 打開 Chrome 找到自訂及管理
step2: 找到說明點擊
step3: 找到關於Google Chrome點擊
step4: 查看版本
step4: 下載對應版本 ChromeDriver
載入套件
1 | from selenium import webdriver |
程式透過呼叫 WebDriver 來直接對瀏覽器進行操作。
WebDriver 只是一個 API 介面,實作則決定於所選用的瀏覽器 driver(本篇是以 Google Chrome)該 selenium.webdriver 模塊提供了所有的 webdriver 實現。當前支持的 WebDriver 實現有 Firefox、Chrome、IE 和
Remote。該鍵在鍵盤像 RETURN,F1,ALT 等類提供鍵。
作用可以來模擬鍵盤操作。=> 參考 2.2 節 官方文件
Waits 作用於當網頁載入時需 時間等待,若直接進行爬取動作但網頁上未生成時會出現錯誤。
=> 參考 5.1 節 官方文件
os 最後要將圖片存入電腦,需要用到
os來建立檔案夾放置檔案。=> 用法參考 文件
wget 網路上進行下載的簡單而強大的自由軟體。
定義
1 | path = ("you chromedriver.exe path") |
提示 : 如是在檔案總管複製路徑需將\換成 /否者會出錯。
把 chromedriver 檔案路徑傳入,由於執行瀏覽器需chromedriver.exe執行檔。
driver.get()表示指定要去的網址。
登入
1 | username = WebDriverWait(driver, 10).until( |
step1: 打開 網站首頁,點擊滑鼠右鍵。連結 =>ig 官方
step2: 找到檢查點擊
點選左上藍色箭頭

拉藍色箭頭點到所要的按鈕

需等待到頁面挑轉好使用
wait,查看到輸入框帳號的框框,當中有個定義為name="username"取得這項類別,(By.NAME, 'username')由於找到
name類別,就用by.NAME。這樣就能確定輸入帳號框框以生成完成,再進行輸入帳號動作。密碼地方同理就不做示範。
login 按下登入的地方,抓取此區塊定義
find_element_by_xpath(),這邊抓的是xpath
取得xpath,點選 上圖藍色選取線點選右鍵=> 找到copy點擊 => 找到copyXPath點擊。send_keys()送出。
複製 xpath 範例格式:
1 | '//*[@id="loginForm"]/div/div[3]/button/div' |
driver.find_element_by_xpath()取得 html 上 xpath 位置
最後再進行
click動作完成登入。提示 :
username.clear()是怕輸入欄位上有提醒文字,所以保險先清空!
輸入查找關鍵字
1 | waitsearch = WebDriverWait(driver, 10).until( |
waitsearch一樣需等待搜尋框框出現。keyword自行修改為搜尋標籤。這邊用到
time模組,由於ig 搜尋需要按兩次enter,但是不能執行過快,而加入停留一秒後執行。
載入圖片
1 | WebDriverWait(driver, 10).until( |
WebDriverWait一樣需等待圖片出現後執行。(By.CLASS_NAME, 'FFVAD')定位用class_NAME- 點選左上藍色箭頭到圖片上查看,找到
class=FFVAD,就是圖片上class類別。
- 點選左上藍色箭頭到圖片上查看,找到
下圖 :
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)
是script為了載入更多照片,把視窗向下拉,document.body.scrollHeight拉到視窗高度最底。PS:須給它時間載入,要停留幾秒加載。
下載圖片
1 | imgpath = os.path.join(keyword) |
啟用
os.path.join- Python 中的方法會智能地連接一個或多個路徑組件。此方法將各個路徑組成部分與每個非空部分之後的
最後一個路徑組成部分恰好用一個目錄分隔符(/)串聯在一起。如果要連接的最後一個路徑組件為空,則將目錄分隔符(‘/‘)放在末尾。
- Python 中的方法會智能地連接一個或多個路徑組件。此方法將各個路徑組成部分與每個非空部分之後的
os.mkdir建立資料夾,以keyword名稱建立檔名。save_as以keyword加上數字來存檔名。wget.download使套件進行下載,下載需要圖片 來源,get_attribute("src"),
在 Html標籤上的找到src就有網址,得到後就能進行下載。
FB 抓取連結網址&連結標題
敘述
自動化來抓取FB連結網址&連結標題!=>[FB] 官方](https://www.facebook.com/)
Code~
安裝~
示範於 作業系統:windows 瀏覽器:Chrome
需先安裝:
第三方套件
beautifulsoup4
- 使
pip install beautifulsoup4
- 使
載入套件~
1 | from selenium import webdriver |
Beautiful Soup是一個 Python 的函式庫模組,可以讓開發者僅須撰寫非常少量的程式碼,
就可以快速解析網頁 HTML 碼,從中翠取出使用者有興趣的資料、去蕪存菁,降低網路爬蟲程式的開發門檻、加快程式撰寫速度。=> 參考 官方文件
Options options 物件,主要用途為取消網頁中的彈出視窗,避免妨礙網路爬蟲的執行,
也可以不讓瀏覽器執行在前景,而是在背景執行(不讓我們肉眼看得見)。
定義~
1 | options = Options() |
options 物件,主要用途為取消網頁中的彈出視窗,避免妨礙網路爬蟲的執行。。
options.add_argument("--disable-notifications")登入fb跳出通知,自動按下自動按允許。driver.get(url)得到去網址。
登入~
1 | email = driver.find_element_by_id("email") |
step1: 打開 網站首頁,點擊滑鼠右鍵。連結 =>fb 官方
step2: 找到檢查點擊
點選左上藍色箭頭

拉藍色箭頭點到所要的按鈕

查看到輸入框
帳號的框框,當中有個定義為id="email"
取得這項類別,driver.find_element_by_id("email")找到
id類別,就用by_id。這樣就能確定輸入帳號框框。密碼地方同理就不做示範。
.submit()提交送出資訊。登入完成後
driver.get(url)再進到要去的網址。
拉動視窗&取得原始碼&定義抓取資料
1 | for x in range(5): |
PS :
for迴圈可以要取得較多資料而修改。script()把視窗向下拉,上方有較詳細說明 。BeautifulSoup來抓取原始碼html.parser為解析器。示範抓title&href

titles使find_all(標籤),在 Html標籤上的找到titles所指定的,得到後就能抓下。href也同理。
印出資料
1 | for title in titles: |
.getText()抓出文字。
結語
- ig 有些BUG,當我測試更多照片下載,挑整
for迴圈後,照片落在 50 張左右就不會再增加。 - fb 抓取連結的部分,抓取定義部分,會抓到其他網頁中連結進來,目前尚有有 bug。
ig 修正 coding
這邊可以達成下載多筆照片下來,但不是最好辦法。
這邊
bug在於會重複下載相同照片固定幾張。step :下載圖片 => 刪除相同照片 => 批量修改檔名
1 | from selenium import webdriver |
- 把相同照片刪除 coding
1 | import os |
- 批量修改檔名可參考這篇
Python os 模組 -資料處理
參考教學
如果您喜歡我的文章,請幫我按五下 ,感謝大家。
