」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Python動態網頁抓取範例:selenium和webdriver的應用

Python動態網頁抓取範例:selenium和webdriver的應用

發佈於2024-09-02
瀏覽:705

Python dynamic web scraping example: application of selenium and webdriver

動態網頁抓取通常會使用一些Python庫,例如處理HTTP請求的requests、模擬瀏覽器行為的selenium、或pyppeteer。以下的文章將重點放在selenium的使用。

硒簡介

selenium 是用於測試 Web 應用程式的工具,但它也經常用於 Web 抓取,特別是當需要抓取由 JavaScript 動態產生的 Web 內容時。 selenium可以模擬瀏覽器中的使用者行為,例如點擊、輸入文字、取得網頁元素等。

Python 動態網頁抓取範例

首先,請確保您已經安裝了selenium。如果沒有,可以透過pip安裝:

pip install selenium

您還需要下載對應瀏覽器的WebDriver。 ‌假設我們使用Chrome瀏覽器,‌您需要下載ChromeDriver並確保其路徑已新增至系統環境變數中,‌或您可以直接在程式碼中指定其路徑。 ‌

這是一個獲取網頁標題的簡單範例:‌

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

# Setting up webdriver
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

# Open the webpage
driver.get('https://www.example.com')

# Get the webpage title
title = driver.title

print(title)

# Close the browser
driver.quit()

該腳本將開啟 example.com,取得其標題並將其列印出來。 ‌

請注意,‌webdriver_manager 是一個自動管理 WebDriver 版本的第三方函式庫。 ‌如果不想使用,也可以手動下載WebDriver並指定路徑。 ‌

動態網頁可能涉及 JavaScript 呈現的內容。 ‌selenium 可以等待這些元素載入後再進行操作,非常適合處理此類網頁。 ‌

在python中抓取動態網頁時設定代理

使用Python爬取動態網頁時,常會用到代理。使用代理一方面可以避免很多障礙,另一方面也可以加快工作效率。

上面我們已經介紹了selenium的安裝。另外,您還需要下載對應瀏覽器的WebDriver,並確保其路徑已新增至系統的環境變數中,也可以直接在程式碼中指定其路徑。
完成上述步驟後,我們就可以設定代理並抓取動態網頁了:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# Set Chrome options
chrome_options = Options()
chrome_options.add_argument('--proxy-server=http://your_proxy_ip:port')

# Specify the WebDriver path (if you have added the WebDriver path to the system environment variables, you can skip this step)
# driver_path = 'path/to/your/chromedriver'
# driver = webdriver.Chrome(executable_path=driver_path, options=chrome_options)

# If WebDriver path is not specified, the default path is used (make sure you have added WebDriver to your system environment variables)
driver = webdriver.Chrome(options=chrome_options)

# Open the webpage
driver.get('https://www.example.com')

# Get the webpage title
title = driver.title

print(title)

# Close the browser
driver.quit()

在此範例中,‌--proxy-server=http://your_proxy_ip:port 是設定代理的參數。 ‌‌ 您需要將 your_proxy_ip 和 port 替換為您實際使用的代理伺服器的 IP 位址和連接埠號碼使用

如果您的代理伺服器需要身份驗證,‌您可以使用以下格式:‌

chrome_options.add_argument('--proxy-server=http://username:password@your_proxy_ip:port')

其中使用者名稱和密碼是您的代理伺服器的使用者名稱和密碼。 ‌

運行上述程式碼後,‌selenium 將透過配置的代理伺服器造訪目標網頁‌並列印出網頁的標題。 ‌
如何指定ChromeDriver的路徑?
ChromeDriver 是 Selenium WebDriver 的一部分。它透過WebDriver API與Chrome瀏覽器交互,實現自動化測試、網路爬蟲等功能。 ‌
指定ChromeDriver的路徑主要涉及到環境變數的配置。 ‌具體步驟如下:‌
1.找出Chrome的安裝位置
您可以透過右鍵單擊桌面上的 Google Chrome 捷徑並選擇「開啟檔案位置」來找到它。 ‌
2.將Chrome的安裝路徑加入系統環境變數Path
這允許系統在任何位置識別 ChromeDriver。 ‌
3.下載解壓縮 ChromeDriver
確保下載與Chrome瀏覽器版本相符的ChromeDriver,並將其解壓縮為exe程式。 ‌
4.將ChromeDriver的exe檔複製到Chrome的安裝路徑
這樣,當你需要使用ChromeDriver時,系統可以自動辨識並呼叫它

以上就是selenium和webdriver在python動態網頁爬取中的應用,以及爬取網頁時如何避免。當然,你也可以透過上面的例子來練習實際操作。

版本聲明 本文轉載於:https://dev.to/lewis_kerr_2d0d4c5b886b02/python-dynamic-web-scraping-example-application-of-selenium-and-webdriver-3330?1如有侵犯,請聯絡[email protected]
最新教學 更多>
  • 如何從Google API中檢索最新的jQuery庫?
    如何從Google API中檢索最新的jQuery庫?
    從Google APIS 問題中提供的jQuery URL是版本1.2.6。對於檢索最新版本,以前有一種使用特定版本編號的替代方法,它是使用以下語法:獲取最新版本:未壓縮)While these legacy URLs still remain in use, it is recommended ...
    程式設計 發佈於2025-05-22
  • 如何解決由於Android的內容安全策略而拒絕加載腳本... \”錯誤?
    如何解決由於Android的內容安全策略而拒絕加載腳本... \”錯誤?
    Unveiling the Mystery: Content Security Policy Directive ErrorsEncountering the enigmatic error "Refused to load the script..." when deployi...
    程式設計 發佈於2025-05-22
  • 切換到MySQLi後CodeIgniter連接MySQL數據庫失敗原因
    切換到MySQLi後CodeIgniter連接MySQL數據庫失敗原因
    無法連接到mySQL數據庫:故障排除錯誤消息要調試問題,建議將以下代碼添加到文件的末尾.//config/database.php並查看輸出: ... ... 迴聲'... echo '<pre>'; print_r($db['default']); echo '</pr...
    程式設計 發佈於2025-05-22
  • 如何在無序集合中為元組實現通用哈希功能?
    如何在無序集合中為元組實現通用哈希功能?
    在未訂購的集合中的元素要糾正此問題,一種方法是手動為特定元組類型定義哈希函數,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    程式設計 發佈於2025-05-22
  • 如何避免Go語言切片時的內存洩漏?
    如何避免Go語言切片時的內存洩漏?
    ,a [j:] ...雖然通常有效,但如果使用指針,可能會導致內存洩漏。這是因為原始的備份陣列保持完整,這意味著新切片外部指針引用的任何對象仍然可能佔據內存。 copy(a [i:] 對於k,n:= len(a)-j i,len(a); k
    程式設計 發佈於2025-05-22
  • 如何在Java中正確顯示“ DD/MM/YYYY HH:MM:SS.SS”格式的當前日期和時間?
    如何在Java中正確顯示“ DD/MM/YYYY HH:MM:SS.SS”格式的當前日期和時間?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解決方案:的,請訪問量很大,並應為procectiquiestate的,並在整個代碼上正確格式不多: java.text.simpledateformat; 導入java.util.calendar; 導入java...
    程式設計 發佈於2025-05-22
  • Spark DataFrame添加常量列的妙招
    Spark DataFrame添加常量列的妙招
    在Spark Dataframe 中創建一個常數列,可以通過多種方式實現具有適用於所有行的任意值的Spark DataFrame。使用文字值(SPARK 1.3)在嘗試提供直接值時,用於此問題時,旨在為此目的的column方法可能會導致錯誤。 df.withcolumn('new_colu...
    程式設計 發佈於2025-05-22
  • 找到最大計數時,如何解決mySQL中的“組函數\”錯誤的“無效使用”?
    找到最大計數時,如何解決mySQL中的“組函數\”錯誤的“無效使用”?
    如何在mySQL中使用mySql 檢索最大計數,您可能會遇到一個問題,您可能會在嘗試使用以下命令:理解錯誤正確找到由名稱列分組的值的最大計數,請使用以下修改後的查詢: 計數(*)為c 來自EMP1 按名稱組 c desc訂購 限制1 查詢說明 select語句提取名稱列和每個名稱...
    程式設計 發佈於2025-05-22
  • C++成員函數指針正確傳遞方法
    C++成員函數指針正確傳遞方法
    如何將成員函數置於c [&& && && && && && && && && && &&&&&&&&&&&&&&&&&&&&&&&華儀的函數時,在接受成員函數指針的函數時,要在函數上既要提供指針又可以提供指針和指針到函數的函數。需要具有一定簽名的功能指針。要通過成員函數,您需要同時提供對象指針(此...
    程式設計 發佈於2025-05-22
  • 在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在C中的顯式刪除 在C中的動態內存分配時,開發人員通常會想知道是否有必要在heap-procal extrable exit exit上進行手動調用“ delete”操作員,但開發人員通常會想知道是否需要手動調用“ delete”操作員。本文深入研究了這個主題。 在C主函數中,使用了動態分配變量(...
    程式設計 發佈於2025-05-22
  • 反射動態實現Go接口用於RPC方法探索
    反射動態實現Go接口用於RPC方法探索
    在GO 使用反射來實現定義RPC式方法的界面。例如,考慮一個接口,例如:鍵入myService接口{ 登錄(用戶名,密碼字符串)(sessionId int,錯誤錯誤) helloworld(sessionid int)(hi String,錯誤錯誤) } 替代方案而不是依靠反射...
    程式設計 發佈於2025-05-22
  • CSS可以根據任何屬性值來定位HTML元素嗎?
    CSS可以根據任何屬性值來定位HTML元素嗎?
    靶向html元素,在CSS 中使用任何屬性值,在CSS中,可以基於特定屬性(如下所示)基於特定屬性的基於特定屬性的emants目標元素: 字體家庭:康斯拉斯(Consolas); } 但是,出現一個常見的問題:元素可以根據任何屬性值而定位嗎?本文探討了此主題。 的目標元素有任何任何屬性值,...
    程式設計 發佈於2025-05-22
  • 為什麼在我的Linux服務器上安裝Archive_Zip後,我找不到“ class \” class \'ziparchive \'錯誤?
    為什麼在我的Linux服務器上安裝Archive_Zip後,我找不到“ class \” class \'ziparchive \'錯誤?
    Class 'ZipArchive' Not Found Error While Installing Archive_Zip on Linux ServerSymptom:When attempting to run a script that utilizes the ZipAr...
    程式設計 發佈於2025-05-22
  • 為什麼我的CSS背景圖像出現?
    為什麼我的CSS背景圖像出現?
    故障排除:CSS背景圖像未出現 ,您的背景圖像儘管遵循教程說明,但您的背景圖像仍未加載。圖像和样式表位於相同的目錄中,但背景仍然是空白的白色帆布。 而不是不棄用的,您已經使用了CSS樣式: bockent {背景:封閉圖像文件名:背景圖:url(nickcage.jpg); 如果您的html,cs...
    程式設計 發佈於2025-05-22
  • 如何檢查對像是否具有Python中的特定屬性?
    如何檢查對像是否具有Python中的特定屬性?
    方法來確定對象屬性存在尋求一種方法來驗證對像中特定屬性的存在。考慮以下示例,其中嘗試訪問不確定屬性會引起錯誤: >>> a = someClass() >>> A.property Trackback(最近的最新電話): 文件“ ”,第1行, AttributeError: SomeClass...
    程式設計 發佈於2025-05-22

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3