[Python]Selenium 自動滾動網頁並抓取文章連結

更新於 發佈於 閱讀時間約 8 分鐘

使用 Selenium 自動滾動網頁並抓取文章連結

在網頁爬蟲開發中,我們經常遇到需要自動滾動頁面以加載新內容的場景,特別是在一些無限滾動的頁面中(例如新聞網站或社交媒體)。

本文將介紹如何使用 Python 的 Selenium 庫來實現這一需求,並抓取頁面中的VCC自己文章的連結。

raw-image



前置準備

在開始實作之前,確保你已完成以下準備:

  1. 安裝 Python 和 Selenium
    可以通過 pip 安裝 Selenium:
    pip install selenium
  2. 準備要爬取的網站
    本文以一個自己的文章列表頁面為例。
    網頁按右鍵,在按檢查就會顯示網頁的 HTML 結構
raw-image

在隨意複製其中一篇文章網址連結,按ctr鍵加F,搜尋複製的網址,試圖找出關聯性。

發現跟文章網址有關聯的標籤名稱為<a> ,有關鍵字article利用此特性來篩選出所有文章的內容

raw-image



實作步驟

以下是完整的程式碼,包含自動滾動網頁並提取文章連結的功能:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

def get_article_links_with_scroll(base_url):
try:
# 初始化瀏覽器
driver = webdriver.Chrome() # 確保安裝了對應的 WebDriver
driver.get(base_url)
time.sleep(2) # 等待頁面初始加載

# 模擬向下滾動
scroll_pause_time = 2 # 每次滾動後的等待時間
last_height = driver.execute_script("return document.body.scrollHeight") # 獲取滾動條初始高度
links = set() # 用於儲存文章鏈接

while True:
# 滾動到底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(scroll_pause_time) # 等待新內容加載

# 獲取新高度並檢查是否到達底部
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break # 如果滾動條高度未變化,說明已經到底部
last_height = new_height

# 提取文章鏈接
page_links = driver.find_elements(By.TAG_NAME, "a")
for link in page_links:
href = link.get_attribute("href")
if href and 'article' in href: # 篩選包含 'article' 的鏈接
links.add(href)

driver.quit() # 關閉瀏覽器
return links

except Exception as e:
print(f"錯誤: {e}")
return set()

# 測試網址
base_url = "https://vocus.cc/salon/crab/room/Crab_OpenCV" # 替換為你的網站首頁或文章列表頁面
article_links = get_article_links_with_scroll(base_url)

# 輸出所有文章鏈接
print("找到的文章鏈接:")
for link in article_links:
print(link)

程式碼詳解

1. 初始化 Selenium

driver = webdriver.Chrome()
driver.get(base_url)
time.sleep(2) # 等待頁面初始加載

這段程式碼用來啟動 Chrome 瀏覽器並訪問指定的 base_url


2. 滾動頁面

last_height = driver.execute_script("return document.body.scrollHeight")
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(scroll_pause_time)
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height

這段程式碼使用 JavaScript 指令 window.scrollTo 將頁面滾動到底部,並通過比較滾動高度來判斷是否已經到達頁面底部。


3. 提取文章連結

page_links = driver.find_elements(By.TAG_NAME, "a")
for link in page_links:
href = link.get_attribute("href")
if href and 'article' in href:
links.add(href)

這部分程式碼遍歷頁面中的所有 <a> 標籤,並篩選出包含 article 關鍵字的連結。


運行結果

執行程式後,所有符合條件的文章連結將會被輸出到終端,例如:

找到的文章鏈接:
https://vocus.cc/article/12345
https://vocus.cc/article/67890

注意事項

  1. 滾動等待時間
    設置合適的 scroll_pause_time,以確保新內容能夠完全加載。
  2. 鏈接篩選條件
    根據網站結構調整 if 'article' in href 的條件,避免抓取無關的連結。
  3. 動態內容網站
    如果頁面內容是通過 AJAX 加載的,滾動後可能需要更長的等待時間。

結語

透過 Selenium,我們能輕鬆模擬瀏覽器操作,自動滾動頁面並抓取需要的資料。在實際應用中,根據網站結構靈活調整爬取邏輯,能幫助我們高效地完成數據收集。

希望本文能幫助你解決相關需求!如果有任何問題,歡迎留言討論。 😊

avatar-img
128會員
215內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
有時候總是會需要將兩個PDF檔或多個來做合併。 在 Python 中,您可以使用 PyPDF2 或 PyPDF4 等庫來合併多個 PDF 文件。 以下是使用 PyPDF2 的範例步驟: 我利用word另存兩個pdf來做示範: 完成合併 1. 安裝 PyPDF2 如果還未安裝,您可以
最近來越南出差,遇到要將自己學習心得轉換成越南文給越南同事看。就研究了一下如何用Python來翻譯整個Word的文件,具越南同事說他有比對中文跟越南文意思差不多。 本文將教您如何使用 Python 的 python-docx 與 googletrans 套件,快速完成 Word 文件的自動翻譯。
在一個典型的程式專案中,UI、Controller 和 Main 的分工通常遵循 MVC 模型(Model-View-Controller) 的架構,這是一種常見的設計模式,能夠將應用程式的邏輯和界面進行分離。 大部分典型的程式專案設計: UI (View):專注於用戶界面,展示數據,並將用
subprocess.run() 是 Python 3.5 之後引入的一個簡單且強大的函數,用來執行系統命令並等待命令完成。它是 subprocess 模組的高階 API,封裝了低階的 Popen(),提供了更簡便的方式來執行命令、捕獲輸出、處理錯誤等操作。
OpenCV 支援讀取和保存 TIFF(Tagged Image File Format)檔案,但對於合併多張圖片成為多頁的 TIFF 檔案,OpenCV 沒有的這功能。 可以使用 Pillow 庫(Python Imaging Library, PIL 的分支)來實現。
生成器本身是一種只能輸出數據的結構,它不像列表或其他容器可以存儲數據並操作。它是一種(lazy evaluation)輸出數據的結構,生成器僅在需要時生成數據。因此,它對於處理大數據集或無限序列時非常高效。 然而,生成器與列表或其他容器不同的一個特點是,生成器通常只能輸出數據,但在某些情況下,我們
有時候總是會需要將兩個PDF檔或多個來做合併。 在 Python 中,您可以使用 PyPDF2 或 PyPDF4 等庫來合併多個 PDF 文件。 以下是使用 PyPDF2 的範例步驟: 我利用word另存兩個pdf來做示範: 完成合併 1. 安裝 PyPDF2 如果還未安裝,您可以
最近來越南出差,遇到要將自己學習心得轉換成越南文給越南同事看。就研究了一下如何用Python來翻譯整個Word的文件,具越南同事說他有比對中文跟越南文意思差不多。 本文將教您如何使用 Python 的 python-docx 與 googletrans 套件,快速完成 Word 文件的自動翻譯。
在一個典型的程式專案中,UI、Controller 和 Main 的分工通常遵循 MVC 模型(Model-View-Controller) 的架構,這是一種常見的設計模式,能夠將應用程式的邏輯和界面進行分離。 大部分典型的程式專案設計: UI (View):專注於用戶界面,展示數據,並將用
subprocess.run() 是 Python 3.5 之後引入的一個簡單且強大的函數,用來執行系統命令並等待命令完成。它是 subprocess 模組的高階 API,封裝了低階的 Popen(),提供了更簡便的方式來執行命令、捕獲輸出、處理錯誤等操作。
OpenCV 支援讀取和保存 TIFF(Tagged Image File Format)檔案,但對於合併多張圖片成為多頁的 TIFF 檔案,OpenCV 沒有的這功能。 可以使用 Pillow 庫(Python Imaging Library, PIL 的分支)來實現。
生成器本身是一種只能輸出數據的結構,它不像列表或其他容器可以存儲數據並操作。它是一種(lazy evaluation)輸出數據的結構,生成器僅在需要時生成數據。因此,它對於處理大數據集或無限序列時非常高效。 然而,生成器與列表或其他容器不同的一個特點是,生成器通常只能輸出數據,但在某些情況下,我們
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
#maxask #惡意軟體 #瀏覽器被惡意或廣告工具綁架 URL轉址(重定向、重新導向):當使用者瀏覽A網址時,自動跳轉到B網址。 - 發生情境: 使用edge瀏覽器,使用Google搜尋引擎, 搜尋XXX關鍵字,網頁自動跳轉到maxask的搜尋介面。
Thumbnail
近期 Google 搜尋引擎API機密文件的外流事件,絕對是近期震撼數位行銷世界的一大頭條,其內容揭示了一些有關 Google 搜尋結果生成原理的重要細節。今天本男爵就來跟各位聊聊這其中獲得的寶貴洞察,或許會對您在設計網站內容時有一些不同的想法!
Thumbnail
在今天的數字時代,網路不僅僅是資訊的來源,更是企業發展和個人品牌建立的關鍵所在。然而,無論你是管理自己的網站還是在數位行銷領域工作,若未能掌握搜索引擎優化(SEO)的精髓,你將面臨被淹沒在網路浪潮中的風險。 SEO不僅是提升網站排名的技術,更是通往持久流量和高質量訪客的大門。每一次的搜尋,背後都有
Thumbnail
免費SEO優化電子書, 省下5000元, 一萬七千多字完全免費送! SEO優化電子書目錄 【SEO基礎知識】 什麼是SEO? SEO搜尋引擎的運作原理 【關鍵字研究】 SEO關鍵字研究的方法有哪些? SEO關鍵字分析工具 在進行關鍵字研究時,使用一些專門的關鍵字分析工具可以幫
Thumbnail
在這篇教學文章中,我們將展示如何使用 Python 和 pytrends 套件來取得 Google 趨勢(Google Trends)的熱門關鍵詞。我們會詳細說明如何安裝和設定 pytrends,並提供範例程式碼來幫助你輕鬆獲取台灣地區的熱門搜尋趨勢。
中文網站介面 測試:安著手機、蘋果電腦。 瀏覽器:皆是Google瀏覽器。 結果:過多人使用時即使登入系統也無法查看訂單和購物車,但過一陣子會自動更新變回正常。
Thumbnail
最近新發現的一個書籤功能,可以幫助工作上需要大量搜尋資料、整理資料的上班族朋友。這個功能可以讓你輕鬆地找到特定時間範圍內的新聞,並將其整理成表格。詳細步驟包括使用Bing引擎搜尋新聞,存成safari書籤標籤頁群組,使用Chatgpt做成表格。很適合新聞媒體業者、公關公司或者寫論文寫報告的學生。
下載: https://chromedriver.com/download#stable 選擇對應版本下載 如果不能執行就檢查一下權限,賦予執行的權力 例如: chmod +x /usr/local/bin/chromedriver (位置請自行變更)
Thumbnail
在當今數位時代,搜尋引擎排名對於各大企業、各式品牌,以及創作者的重要性已經不言而喻。然而,許多人在追求「高排名」時卻陷入了一些「誤區」,例如:砸大錢買不知所謂的社群廣告、常自......
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
#maxask #惡意軟體 #瀏覽器被惡意或廣告工具綁架 URL轉址(重定向、重新導向):當使用者瀏覽A網址時,自動跳轉到B網址。 - 發生情境: 使用edge瀏覽器,使用Google搜尋引擎, 搜尋XXX關鍵字,網頁自動跳轉到maxask的搜尋介面。
Thumbnail
近期 Google 搜尋引擎API機密文件的外流事件,絕對是近期震撼數位行銷世界的一大頭條,其內容揭示了一些有關 Google 搜尋結果生成原理的重要細節。今天本男爵就來跟各位聊聊這其中獲得的寶貴洞察,或許會對您在設計網站內容時有一些不同的想法!
Thumbnail
在今天的數字時代,網路不僅僅是資訊的來源,更是企業發展和個人品牌建立的關鍵所在。然而,無論你是管理自己的網站還是在數位行銷領域工作,若未能掌握搜索引擎優化(SEO)的精髓,你將面臨被淹沒在網路浪潮中的風險。 SEO不僅是提升網站排名的技術,更是通往持久流量和高質量訪客的大門。每一次的搜尋,背後都有
Thumbnail
免費SEO優化電子書, 省下5000元, 一萬七千多字完全免費送! SEO優化電子書目錄 【SEO基礎知識】 什麼是SEO? SEO搜尋引擎的運作原理 【關鍵字研究】 SEO關鍵字研究的方法有哪些? SEO關鍵字分析工具 在進行關鍵字研究時,使用一些專門的關鍵字分析工具可以幫
Thumbnail
在這篇教學文章中,我們將展示如何使用 Python 和 pytrends 套件來取得 Google 趨勢(Google Trends)的熱門關鍵詞。我們會詳細說明如何安裝和設定 pytrends,並提供範例程式碼來幫助你輕鬆獲取台灣地區的熱門搜尋趨勢。
中文網站介面 測試:安著手機、蘋果電腦。 瀏覽器:皆是Google瀏覽器。 結果:過多人使用時即使登入系統也無法查看訂單和購物車,但過一陣子會自動更新變回正常。
Thumbnail
最近新發現的一個書籤功能,可以幫助工作上需要大量搜尋資料、整理資料的上班族朋友。這個功能可以讓你輕鬆地找到特定時間範圍內的新聞,並將其整理成表格。詳細步驟包括使用Bing引擎搜尋新聞,存成safari書籤標籤頁群組,使用Chatgpt做成表格。很適合新聞媒體業者、公關公司或者寫論文寫報告的學生。
下載: https://chromedriver.com/download#stable 選擇對應版本下載 如果不能執行就檢查一下權限,賦予執行的權力 例如: chmod +x /usr/local/bin/chromedriver (位置請自行變更)
Thumbnail
在當今數位時代,搜尋引擎排名對於各大企業、各式品牌,以及創作者的重要性已經不言而喻。然而,許多人在追求「高排名」時卻陷入了一些「誤區」,例如:砸大錢買不知所謂的社群廣告、常自......