南京做中英文網(wǎng)站設計網(wǎng)站seo優(yōu)化多少錢
文章目錄
- Selenium與Requests對比
- 一、工作原理
- 二、功能特點
- 三、性能表現(xiàn)
- 下載對應驅動
- 1.首先我們需要打開edge瀏覽器,打開設置,找到“關于Microsoft Edge”,點擊進入查看瀏覽器版本。
- 2.查找版本之后,搜索edge驅動下載,進入下載頁面,選擇對應的版本下載就可以。
- 使用Selenium爬取腳本實例
- 1.導入必要的庫和模塊:
- 2.設置Edge瀏覽器的無頭模式:
- 3.初始化Edge WebDriver:
- 4.訪問網(wǎng)頁:
- 5.等待頁面元素加載:
- 6.查找并遍歷列表元素:
- 7.關閉瀏覽器:
Selenium爬蟲與Requests在多個方面存在顯著差異,這些差異主要體現(xiàn)在它們的工作原理、功能特點、適用場景以及性能表現(xiàn)上。在某些情況下,我們使用Selenium爬取文本內容更好,這里我們先將其與Requests進行對比。
Selenium與Requests對比
一、工作原理
Requests:
- Requests是一個HTTP庫,用于發(fā)送各種HTTP請求(如GET、POST等)。
- 它直接發(fā)送HTTP請求到服務器,并接收服務器的響應,不涉及瀏覽器環(huán)境的模擬。
Selenium: - Selenium是一個自動化測試工具,通過控制瀏覽器來模擬用戶的各種行為,如點擊、滾動、填寫表單等。
- 它通過瀏覽器驅動程序與瀏覽器進行交互。
二、功能特點
Requests:
- 簡單、快速、輕量級,易于使用和集成。
- 主要用于發(fā)送HTTP請求和接收響應,適用于靜態(tài)網(wǎng)頁內容的抓取。
- 不具備瀏覽器自動化功能。
Selenium:
- 功能強大,能夠模擬用戶與瀏覽器的所有交互行為。
- 適用于動態(tài)網(wǎng)頁、單頁面應用(SPA)以及需要用戶交互的網(wǎng)頁內容的抓取。
三、性能表現(xiàn)
Requests:
- 由于不加載JavaScript或CSS等資源,響應時間更短,資源消耗更少。
- 在處理靜態(tài)網(wǎng)頁內容時,性能表現(xiàn)優(yōu)異。
Selenium:
- 需要加載完整的頁面資源,因此速度相對較慢。
- 占用更多的CPU和內存資源,特別是在處理多個瀏覽器實例或并發(fā)請求時。
綜上所述,Selenium爬蟲與Requests在多個方面存在顯著差異。選擇哪個工具取決于具體的項目需求、網(wǎng)頁類型以及性能要求。對于簡單的靜態(tài)網(wǎng)頁內容抓取,Requests可能是更合適的選擇;而對于復雜的動態(tài)網(wǎng)頁、需要用戶交互的網(wǎng)頁或Web應用程序的抓取,Selenium則更具優(yōu)勢。
下載對應驅動
在使用Selenium之前,我們需要先下載對應瀏覽器的驅動程序(如 Edge 驅動程序)來與瀏覽器進行交互。下面我們講解如何安裝驅動。
1.首先我們需要打開edge瀏覽器,打開設置,找到“關于Microsoft Edge”,點擊進入查看瀏覽器版本。
圖例:
2.查找版本之后,搜索edge驅動下載,進入下載頁面,選擇對應的版本下載就可以。
圖例:
下載完成之后,將文件放在含有python的文件夾內(注意一定要放在一個文件夾下),這樣我們就可以使用Selenium爬取腳本了。
使用Selenium爬取腳本實例
下面我們使用Selenium庫和Edge瀏覽器(通過Edge WebDriver)來自動化訪問網(wǎng)頁并抓取數(shù)據(jù)的Python腳本。
1.導入必要的庫和模塊:
import time# pip install selenium
# 下載對應版本的驅動 放在python文件下from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.edge.options import Options
- time:用于在代碼執(zhí)行過程中添加延時。
- webdriver從selenium包中導入,用于控制瀏覽器。
- By從selenium.webdriver.common.by中導入,用于指定元素定位的方式(如XPath、CSS選擇器等)。
- expected_conditions(別名EC)和WebDriverWait從selenium.webdriver.support和selenium.webdriver.support.ui中導入,用于設置等待條件,以便在元素可用之前暫停執(zhí)行。
- Options從selenium.webdriver.edge.options中導入,用于配置Edge瀏覽器的啟動選項,如設置為無頭模式。
2.設置Edge瀏覽器的無頭模式:
if __name__ == '__main__':# 無頭模式opt = Options()opt.add_argument("--headless")
- 創(chuàng)建Options實例,并通過add_argument(“–headless”)設置瀏覽器在無頭模式下運行,即不顯示瀏覽器界面。
3.初始化Edge WebDriver:
driver = webdriver.Edge(options=opt)
- 使用webdriver.Edge(options=opt)創(chuàng)建Edge WebDriver實例,傳入之前配置的選項opt。
4.訪問網(wǎng)頁:
# 請求頁面driver.get('https://101.qq.com/#/hero')
- 使用driver.get(‘https://101.qq.com/#/hero’)訪問指定的網(wǎng)頁地址。
5.等待頁面元素加載:
# 強制等待time.sleep(10)# 等待某個元素加載完成WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH,"//ul[@class='hero-list']")))
- 使用WebDriverWait和EC.presence_of_element_located等待頁面上某個元素(這里是類名為hero-list的ul元素)出現(xiàn)。這是一種比time.sleep()更智能的等待方式,因為它會等待直到條件滿足(元素出現(xiàn))或達到最大等待時間(這里是10秒)。
6.查找并遍歷列表元素:
li_list = driver.find_elements(By.XPATH,"//ul[@class='hero-list']/li")for li in li_list:img_url = li.find_element(By.XPATH,"div/div/img").get_attribute("src")hero_name = li.find_element(By.XPATH,"div/p").textprint(img_url,hero_name)
- 使用find_elements方法通過XPath定位到ul[@class=‘hero-list’]下的所有l(wèi)i元素,并將它們存儲在li_list列表中。
- 遍歷li_list中的每個li元素,對于每個元素:
- 使用find_element和XPath定位到該li元素內的img標簽,并獲取其src屬性(即圖片URL)。
- 同樣地,定位到該li元素內的p標簽,并獲取其文本內容(即英雄名稱)。
- 打印出圖片URL和英雄名稱。
7.關閉瀏覽器:
driver.close()pass
- 使用driver.close()關閉瀏覽器。
這段代碼演示了如何使用Selenium和Edge WebDriver來自動化訪問一個網(wǎng)頁,等待頁面上的特定元素加載完成,然后抓取該頁面上特定列表項中的圖片URL和文本內容。