用Selenium開啟自動化網頁交互與數據抓取之旅

用Selenium開啟自動化網頁交互與數據抓取之旅

在當今數字化時代,數據的價值不言而喻,而網頁作為海量數據的重要載體,如何高效獲取其中的關鍵信息成為眾多開發者和數據愛好者關注的焦點。Selenium這一強大工具,為我們打開了自動化操作網頁和精準抓取數據的大門。今天,就來和大家深入聊聊Selenium的使用。

一、Selenium是什么

Selenium本質上是一款用于Web應用程序測試的工具,但它的用途遠不止于此。簡單來說,它可以驅動各種瀏覽器,像Chrome、Firefox、Edge等,按照我們編寫的腳本代碼去執行一系列操作,比如點擊按鈕、輸入文本、打開網頁以及驗證頁面元素等,模擬真實用戶在瀏覽器上的行為。這意味著我們可以借助它實現網頁操作的自動化,無論是繁瑣的重復性任務,還是復雜的數據采集工作,都能輕松應對。

二、Selenium的工作原理

瀏覽器能夠被Selenium驅動,關鍵在于webdriver驅動程序。不同的瀏覽器需要對應不同版本的webdriver,例如Chrome瀏覽器就有專門為其開發的chromedriver。webdriver就像是瀏覽器的“遙控器”,通過與瀏覽器內核進行交互,控制瀏覽器執行我們設定的命令。這就要求在使用Selenium時,務必確保下載的webdriver版本與所使用的瀏覽器版本相匹配,否則可能會出現各種兼容性問題。

三、Selenium的使用方法

(一)使用前的準備工作

  1. 安裝Selenium庫:安裝Selenium非常簡單,使用pip命令即可。在命令行中輸入pip install selenium -i https://pypi.mirrors.ustc.edu.cn/simple/,就能快速完成安裝。如果使用的是PyCharm等集成開發環境,也可以在其界面中輕松完成安裝操作。
  2. 下載瀏覽器內核驅動:以Chrome瀏覽器為例,其內核驅動地址為https://chromedriver.storage.googleapis.com/index.html 。下載后,根據不同的操作系統進行相應的配置。在Windows系統中,解壓下載的文件,并將其放置在Python安裝目錄的Scripts文件夾下;Linux和Mac系統類似,但要注意系統中可能存在多個Python版本,需確保配置的是當前運行的Python版本的環境變量。

(二)基本操作示例

  1. 打開網頁并進行搜索:下面這段代碼展示了如何使用Selenium打開蘇寧易購網站,并搜索“手機”。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys__browser_url = r"C:\Program Files\Google\Chrome\Application\chrome.exe" 
chrome_options = Options()
chrome_options.binary_location = __browser_url    
driver = webdriver.Chrome(options=chrome_options)  driver.get('https://www.suning.com/') 
driver.find_element_by_id("searchKeywords").send_keys("手機" + Keys.RETURN)

在這段代碼中,首先創建了一個Options對象,用于配置瀏覽器的相關參數,然后指定Chrome瀏覽器的安裝路徑,初始化Chrome驅動。接著使用get方法打開蘇寧易購網站,再通過find_element_by_id找到搜索框元素,并使用send_keys方法輸入“手機”并回車,完成搜索操作。

  1. 獲取網頁元素信息:在網頁數據抓取中,獲取元素信息是關鍵步驟。比如,我們可以獲取網頁上某個元素的文本內容、屬性值、位置、標簽名以及大小等信息。下面以獲取蘇寧易購手機商品評論為例:
from selenium import webdriver
from selenium.webdriver.edge.options import Options
import time__browser_url = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" 
chrome_options = Options()
chrome_options.binary_location = __browser_url    
driver = webdriver.Edge(options=chrome_options)  from selenium.webdriver.common.by import By
driver.get('https://review.suning.com/cluster_cmmdty_review/cluster-38249278-000000012389328846-0000000000-1-good.htm?originalCmmdtyType=general&safp=d488778a.10004.loverRight.166')yzpj_file = open('優質評價1.txt','w')
def get_py_content(file):pj_elments_content = driver.find_elements(by=By.CLASS_NAME,value= 'body-content')for i in range(len(pj_elments_content)):file.write(pj_elments_content[i].text+'\n')
get_py_content(yzpj_file)next_elements = driver.find_elements_by_xpath('//*[@class="next rv-maidian "]')
print(next_elements)
while next_elements !=[]:next_element = next_elements[0]time.sleep(1)next_element.click()get_py_content(yzpj_file)next_elements = driver.find_elements_by_xpath('//*[@class="next rv-maidian "]')
yzpj_file.close()

這段代碼實現了從蘇寧易購手機商品評價頁面抓取優質評價的功能。首先打開指定的評價頁面,然后定義了一個函數get_py_content,通過find_elements方法根據類名查找所有評價內容的元素,并將其文本寫入文件。接著,使用find_elements_by_xpath方法查找“下一頁”按鈕元素,通過循環點擊“下一頁”按鈕,持續獲取并保存多頁的評價內容。

(三)其他常用操作

  1. 前進、后退與刷新:在瀏覽網頁時,前進、后退和刷新是常見操作,Selenium同樣支持這些功能。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time__browser_url = r"D:\Program Files (x86)\360Roaming\360se6\Application\360se.exe" 
chrome_options = Options()
chrome_options.binary_location = __browser_urldriver = webdriver.Chrome(chrome_options=chrome_options)
driver.get('http://www.taobao.com')  
driver.get('http://www.baidu.com')
driver.get('http://www.qq.com')
driver.back()  
time.sleep(5)  
driver.forward() 
time.sleep(5)
driver.refresh()  
driver.quit() 

上述代碼展示了如何在不同網頁之間切換,以及進行后退、前進和刷新操作,最后關閉瀏覽器。

  1. 操作Cookies:Cookies在網頁交互中用于存儲用戶信息等數據,Selenium也能對其進行操作。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options__browser_url = r"D:\Program Files (x86)\360Roaming\360se6\Application\360se.exe" 
chrome_options = Options()
chrome_options.binary_location = __browser_urldriver = webdriver.Chrome(chrome_options=chrome_options)
driver.get('http://www.taobao.com')  
print(driver.get_cookies())
driver.add_cookie({'name': 'zhangsan', 'value' : '98'})
print(driver.get_cookies())

這段代碼獲取了淘寶網站的Cookies,并添加了一個自定義的Cookie,再次獲取Cookies以查看添加效果。

四、項目實戰 - 蘇寧易購醫用口罩信息抓取

下面通過一個實際項目,展示Selenium在數據抓取方面的強大功能。我們要從蘇寧易購網站獲取醫用口罩的價格、名稱、評價數和店鋪名稱信息。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
import time__browser_url = r"D:\Program Files (x86)\360Roaming\360se6\Application\360se.exe" 
chrome_options = Options()
# chrome_options.add_argument('--headless') 
chrome_options.binary_location = __browser_urldriver = webdriver.Chrome(chrome_options = chrome_options)
driver.get('http://www.suning.com')  
element = driver.find_element_by_xpath("//div/input[@tabindex='0']")
element.send_keys("醫用口罩" + Keys.RETURN)
time.sleep(20)
driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
time.sleep(20)
price_elements = driver.find_elements_by_xpath('//span[@class="def-price"]')
title_elements = driver.find_elements_by_xpath('//div[@class="title-selling-point"]')
evaluate_elements = driver.find_elements_by_xpath('//div[@class="info-evaluate"]')
store_elements = driver.find_elements_by_xpath('//div[@class="store-stock"]')
f = open('醫用口罩.txt','w',encoding='utf-8')
for i in range(len(price_elements)):f.write(price_elements[i].text + '\t')f.write(title_elements[i].text + '\t')f.write(evaluate_elements[i].text + '\t')f.write(store_elements[i].text + '\n')
f.close()

在這個項目中,首先打開蘇寧易購網站,通過XPath找到搜索框并輸入“醫用口罩”進行搜索。然后使用execute_script方法將頁面滾動到底部,以便加載更多商品信息。接著,通過XPath分別獲取價格、名稱、評價數和店鋪名稱的元素,并將這些信息寫入文件中。

Selenium為我們提供了豐富的功能,讓網頁自動化操作和數據抓取變得更加高效便捷。無論是進行網頁測試、數據采集還是自動化任務處理,它都是一個不可多得的好幫手。希望通過這篇博客,大家能對Selenium的使用有更深入的了解,在實際項目中充分發揮它的優勢。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/79379.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/79379.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/79379.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VB.net序列化和反序列化的使用方法和實用場景

引言 相信很多初學編程的人都會提出過這個疑問:“既然我的變量可以存在內存之中,那么是否也可以存在硬盤之中呢” 其實我想回答的是,完全可以而且方法不止一種,而今天講的是序列化最經典的——二進制序列化 由于序列化的部分已…

Android OTA

一、OTA運行原理 Android 平臺提供 Google diff arithmetic 差分機制,升級包支持完整升級以及差分升級,OTA 運行原理圖如下所示。 1. OTA Server 負責對更新包進行上傳,下載以及版本的管理。 2. 開發者在修改 Android 系統后,通…

Untiy基礎學習(三)Untiy中編寫腳本的基本規則

一、怎么創建腳本 在Project窗口下,右鍵Create C#Script 即可創建腳本 創建腳本的注意事項 : 1)類名和文件名必須一致,不然不能掛載(因為反射機制創建對象,會通過文件名去找Type) 2)沒有特殊需…

VBA宏即根據第一列的內容和第二列的數字,按照數字數量生成對應內容并依次放在第三列、第四列等

打開你的 Excel 工作表。按下 Alt F11 組合鍵,打開 VBA 編輯器。在 VBA 編輯器中,點擊 插入 -> 模塊。在模塊窗口中,輸入以下 VBA 代碼: Sub GenerateItems()Dim lastRow As LongDim i As Long, j As LongDim item As String…

深度學習系統學習系列【1】之基本知識

文章目錄 說明基礎知識人工智能、機器學習、深度學習的關系機器學習傳統機器學習的缺陷選擇深度學習的原因深度學習的關鍵問題深度學習的應用深度學習的加速硬件GPU環境搭建主流深度學習框架對比 說明 文章屬于個人學習筆記內容,僅供學習和交流。內容參考深度學習原…

論文筆記-基于多層感知器(MLP)的多變量橋式起重機自適應安全制動與距離預測

《IET Cyber-Systems and Robotics》出版山東大學 Tenglong Zhang 和 Guoliang Liu 團隊的研究成果,文章題為“Adaptive Safe Braking and Distance Prediction for Overhead Cranes With Multivariation Using MLP”。 摘要 橋式起重機的緊急制動及其制動距離預測是…

DeepSeek實戰--各版本對比

1.對比 版本參數量優勢劣勢使用場景競品DeepSeek-V36710億(MoE架構,激活370億)開源、高效推理(60 TPS)、低成本(API費用低)、中文處理能力突出(90%準確率多模態能力有限通用任務&am…

從0開始建立Github個人博客(hugoPaperMod)

從0開始建立Github個人博客(hugo&PaperMod) github提供給每個用戶一個網址,用戶可以建立自己的靜態網站。 一、Hugo hugo是一個快速搭建網站的工具,由go語言編寫。 1.安裝hugo 到hugo的github標簽頁Tags gohugoio/hugo選擇一個版本&#xff0c…

【AI論文】WebThinker:賦予大型推理模型深度研究能力

摘要:大型推理模型(LRMs),如OpenAI-o1和DeepSeek-R1,展示了令人印象深刻的長期推理能力。 然而,他們對靜態內部知識的依賴限制了他們在復雜的知識密集型任務上的表現,并阻礙了他們生成需要綜合各…

Linux_sudo命令的使用與機制

1、sudo命令的作用 sudo(全稱 superuser do)是 Linux/Unix 系統中權限管理的核心工具。 允許普通用戶在授權下以其他用戶(默認是 root)的權限執行命令,而無需直接登錄賬戶。 2、sudo命令的典型使用場景 sudo 覆蓋了系…

Scrapy框架之 中間件的使用

爬蟲中間件 特點:主要處理蜘蛛(Spider)和下載器(Downloader)之間的請求和響應。可以對蜘蛛生成的請求進行攔截、修改或過濾,也可以對下載器返回給蜘蛛的響應進行處理。適用場景: 請求過濾與修改…

供應鏈算法整理(一)--- 銷量預估

在供應鏈管理領域有較多的預估場景,例如送達時長預估、銷量預估、用電量預估。特別的在智能供應鏈領域,銷量和庫存的管理的智能化也依賴銷量預估,因此在本文我們整理了 銷量預估的算法詳細的技術方案。 時間序列預測在最近兩年內發生了巨大的…

第4篇:服務層抽象與復用邏輯

在業務系統復雜度指數級增長的今天,服務層(Service Layer)的合理設計直接影響著系統的可維護性和擴展性。本文將深入剖析 Egg.js 框架中的服務層架構設計,從基礎實現到高級封裝,全方位講解企業級應用的開發實踐。 一、…

Java學習手冊:Spring 數據訪問

一、Spring JDBC JdbcTemplate :Spring JDBC 提供了 JdbcTemplate 類,它簡化了數據庫操作,提供了豐富的 API 來執行數據庫訪問任務。JdbcTemplate 可以自動處理數據庫連接的獲取、釋放,SQL 語句的執行,結果集的處理等…

遞歸、搜索和回溯算法《遞歸》

在之前的優選算法當中我們已經學習了一些基本的算法,那么接下來我們就要來學習算法當中的一大重要章節——遞歸、搜索和回溯算法,其實也就是大家常常聽到的dfs、bfs;其實本質就是遞歸,在學習搜索、回溯等算法的過程當中我們會先來…

Java進階--設計模式

設計模式是一套被反復使用的、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。設計模式使代碼編制真正工程化,設計模式是軟件工程的基石,如同大廈的一塊塊磚石一樣&#xff0…

如何禁止AutoCAD這類軟件聯網

推薦二、三方法,對其他軟件影響最小 一、修改Hosts文件 Hosts文件是一個存儲域名與IP地址映射關系的文本文件,通過修改Hosts文件可以將AutoCAD的域名指向本地回環地址(127.0.0.1),從而實現禁止聯網的目的。具體步驟如…

深度學習框架搭建(Vscode/Anaconda/CUDA/Pytroch)

目錄 ??????一 Vscode安裝 二、Anaconda安裝 三、更新顯卡驅動 四、安裝CUDA 五、安裝Pytorch 六、Vscode配置 七、出現的問題匯總 ??????一 Vscode安裝 在 Windows 上安裝 訪問 VS Code 官網 https://code.visualstudio.com/,點擊 "Downl…

結構模式識別理論與方法

我們在前文《模式識別的基本概念與理論體系》中就已經提及“模式分類”。 具體內容看我的CSDN文章:模式識別的基本概念與理論體系-CSDN博客 模式的識別方法主要有統計模式識別方法和結構模式識別方法兩大類。統計模式識別方法提出得較早,理論也較成熟…

12.多邊形的三角剖分 (Triangulation) : Fisk‘s proof

目錄 1.Fisks proof Trangulation Coloring Domination Pigeon-Hold Principle Generation 2.Orthogonal Polygons (正交多邊形) Necessity of floor(n4) Sufficiency by convex Quadrilateralization Generalization 1.Fisks proof Trangulation 引入內對角線&…