Python爬蟲(1)一次性搞定Selenium(新版)8種find_element元素定位方式

在這里插入圖片描述
selenium中有8種不錯的元素定位方式,每個方式和應用場景都不一樣,需要根據自己的使用情況來進行修改

8種find_element元素定位方式

  • 1.id定位
  • 2.CSS定位
  • 3.XPATH定位
  • 4.name定位
  • 5.class_name定位
  • 6.Link_Text定位
  • 7.PARTIAL_LINK_TEXT定位
  • 8.TAG_NAME定位
  • 總結

目前selenium已經出現了新的版本的定位方式,雖然說定位語法不一樣,但是萬變不離其宗。
在這里插入圖片描述
用舊版的定位語法就會出現這個刪除線,你用他來進行爬蟲的時候運行時就會提示你雖然問題不大但是還是得考慮使用新版本的定位方式

DeprecationWarning: find_element_by_css_selector is deprecated. Please use find_element(by=By.CSS_SELECTOR, value=css_selector) insteadline = li.find_element_by_css_selector("p.title a ").get_attribute('href')
selenium中find_element定位方式
find_element(By.XPATH)
find_element(By.CSS_SELECTOR)
find_element(By.ID)
find_element(By.TAG_NAME)
find_element(By.class_name,)
find_element(By.PARTIAL_LINK_TEXT)
find_element(By.LINK_TEXT)
find_element(By.name)

上面定位元素方法主要是單個,多個元素定位就在element后面加個s

1.id定位

在網站中有很多的id,我們可以通過找到這些id來幫助我們定位網頁中的元素,但是id定位有缺點就是id元素往往是單一個存在,如果我們需要定位多個id的話id定位就不好幫助我們進行定位。
在這里插入圖片描述

from selenium import webdriver
from selenium.webdriver import Chrome, ChromeOptions
from selenium.webdriver.common.by import By
opt = ChromeOptions()            # 創建Chrome參數對象
opt.headless = True              # 把Chrome設置成可視化無界面模式,windows/Linux 皆可
driver = webdriver.Chrome()
driver.get("網址")
a1 = driver.find_element(By.ID,'livenews-id-1-202301272620080422').text
print(a1)

在這里插入圖片描述

2.CSS定位

css定位是最佳推薦的定位元素,不僅僅效率高,而且針對復雜場景的多個元素定位需求會比xpath和其他元素定位更好
在網頁中快速定位我一般都是在開發者工具中找到selector然后針對這個標簽進行選擇
#livenews-id-1-202301272620081211 > div.media-content > h2 > a在這里插入圖片描述

from selenium import webdriver
from selenium.webdriver import Chrome, ChromeOptions
from selenium.webdriver.common.by import By
opt = ChromeOptions()            # 創建Chrome參數對象
opt.headless = True              # 把Chrome設置成可視化無界面模式,windows/Linux 皆可
driver = webdriver.Chrome()
driver.get("網站")
a1 = driver.find_element(By.CSS_SELECTOR,'#livenews-id-1-202301272620081211 > div.media-content > h2 > a').text
print(a1)

在這里插入圖片描述
當然我們真正實際上使用的時候就不用那么復雜,如果我們找到了父元素,再去找子元素時就可以直接對里面的標簽進行選擇比如我們已經知道是在要的內容在div下的a標簽中

div標簽我們已經獲取那么a標簽的內容就可以直接選擇a標簽,也可以用h2 a 這樣就表示選中h2標簽中的所有a標簽

from selenium import webdriver
from selenium.webdriver import Chrome, ChromeOptions
from selenium.webdriver.common.by import By
opt = ChromeOptions()            # 創建Chrome參數對象
opt.headless = True              # 把Chrome設置成可視化無界面模式,windows/Linux 皆可
driver = webdriver.Chrome()# Chrome瀏覽器
driver.get("網站")
f1=driver.find_elements(By.XPATH,'//*[@id="livenews-id-1-202301282620082087"]')
for i,f2 in enumerate(f1):if i < 2:a1 = f2.find_element(By.CSS_SELECTOR, 'a').textprint(a1)

復雜標簽應用可以參考這篇文章Python使用selenium中的CSS_SELECTOR進行搞定復雜多標簽定位
css里面還有許多豐富的選擇器可以參考這篇文章css選擇器

3.XPATH定位

classname 選取所有的子節點

/ 從根節點選

// 匹配任意節點不考慮位置

. 選取當前節點。

用…選中當前節點的父節點

@ 選取屬性

還可以用xpath的通配符選取節點

用*匹配任何元素的節點

用@*來匹配任何屬性的節點

用node來匹配任意類型的節點

用//*來選中所有的元素

//div[@*]選中所有div屬性的元素

在實際中的應用場景

from selenium import webdriver
from selenium.webdriver import Chrome, ChromeOptions
from selenium.webdriver.common.by import By
opt = ChromeOptions()            # 創建Chrome參數對象
opt.headless = True              # 把Chrome設置成可視化無界面模式,windows/Linux 皆可
driver = webdriver.Chrome()# Chrome瀏覽器
driver.get("網站")
f1=driver.find_element(By.XPATH,'//*[@id="livenews-id-1-202301282620139465"]/div[1]/h2/a').get_attribute('text')
print(f1)

在這里插入圖片描述
更多xpath定位可以參考這篇文章如何使用Xpath定位元素

4.name定位

name可以指定頁面中的標簽名,如果頁面中沒有重復name就可以使用,如果頁面中有多個重復的name就不推薦使用

from selenium import webdriver
from selenium.webdriver import Chrome, ChromeOptions
from selenium.webdriver.common.by import By
opt = ChromeOptions()            # 創建Chrome參數對象
opt.headless = True              # 把Chrome設置成可視化無界面模式,windows/Linux 皆可
driver = webdriver.Chrome()# Chrome瀏覽器
driver.get("網址")
f1=driver.find_element(By.NAME,'description')
print(f1)

在這里插入圖片描述

5.class_name定位

class標簽也是selenium指定的標簽定位方式,但是這種方式實際中還是不推薦使用因為你會遇到一個div標簽中出現非常多重復的class名

from selenium import webdriver
from selenium.webdriver import Chrome, ChromeOptions
from selenium.webdriver.common.by import By
opt = ChromeOptions()            # 創建Chrome參數對象
opt.headless = True              # 把Chrome設置成可視化無界面模式,windows/Linux 皆可
driver = webdriver.Chrome()# Chrome瀏覽器
driver.get("網址")
f1=driver.find_element(By.CLASS_NAME,'time').text
print(f1)

在這里插入圖片描述

6.Link_Text定位

專門定位文本的標簽,需要指定標簽內全部的文本內容才能夠進行定位,否則是無法定位成功

from selenium import webdriver
from selenium.webdriver import Chrome, ChromeOptions
from selenium.webdriver.common.by import By
opt = ChromeOptions()            # 創建Chrome參數對象
opt.headless = True              # 把Chrome設置成可視化無界面模式,windows/Linux 皆可
driver = webdriver.Chrome()# Chrome瀏覽器
driver.get("網址")
f1=driver.find_element(By.LINK_TEXT,'焦點').text
print(f1)

在這里插入圖片描述

7.PARTIAL_LINK_TEXT定位

指定某部分文本即可定位成功,不用將文本內容全部輸入即可定位成功

from selenium import webdriver
from selenium.webdriver import Chrome, ChromeOptions
from selenium.webdriver.common.by import By
opt = ChromeOptions()            # 創建Chrome參數對象
opt.headless = True              # 把Chrome設置成可視化無界面模式,windows/Linux 皆可
driver = webdriver.Chrome()# Chrome瀏覽器
driver.get("網址")
f1=driver.find_element(By.PARTIAL_LINK_TEXT,'三亞').text

在這里插入圖片描述

8.TAG_NAME定位

tag表示定位的一類功能,也就是用來定位div、h2這一類標簽往往沒什么用處,識別率特別低,頁面中有非常多個div標簽,而且你獲取到的數據會非常混亂,數據清洗起來異常復雜
在這里插入圖片描述

使用tag定位一下子就把整個頁面所有的div信息給你獲取下來

from selenium import webdriver
from selenium.webdriver import Chrome, ChromeOptions
from selenium.webdriver.common.by import By
opt = ChromeOptions()            # 創建Chrome參數對象
opt.headless = True              # 把Chrome設置成可視化無界面模式,windows/Linux 皆可
driver = webdriver.Chrome()# Chrome瀏覽器
driver.get("網址")
f1=driver.find_element(By.TAG_NAME,'div').text
print(f1)

在這里插入圖片描述

總結

如果要從想要更加快速搞定爬蟲的內容,建議只搞xpath、css這兩種定位方式,吃透就能夠應對絕大多數的爬蟲情況,當然如果有反爬蟲網站效果就不理想要自行處理。

在這里插入圖片描述

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

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

相關文章

【第一階段】kotlin中反引號中的函數名特點

在kotlin中可以直接中文定義函數&#xff0c;使用反引號進行調用 eg: fun main() {2023年8月9日定義的函數(5) }private fun 2023年8月9日定義的函數(num:Int){println("反引號的用法$num") }執行結果 在Java中is,in可以定義方法&#xff0c;但是在kotlin中is,in是…

資料分析(三)—— 基期、現期、人口、增長量

基期 基期值 現期值 - 增長量 增長量/增長率 現期值/1&#xff08;間隔)增長率 化除為乘 &#xff1a;當增長率&#xff5c;r| < 5% 時&#xff0c;&#xff0c; 注&#xff1a;當選項首位相同&#xff0c;第二位也相同時&#xff0c;只能用直除 基期和差 (結合選…

SolidUI社區-根據Prompt打造人設

背景 隨著文本生成圖像的語言模型興起&#xff0c;SolidUI想幫人們快速構建可視化工具&#xff0c;可視化內容包括2D,3D,3D場景&#xff0c;從而快速構三維數據演示場景。SolidUI 是一個創新的項目&#xff0c;旨在將自然語言處理&#xff08;NLP&#xff09;與計算機圖形學相…

【openwrt學習筆記】dnsmasq源碼閱讀

目錄 一、DHCP(Dynamic Host Configuration Protocol)1.1 前置知識1.2 參考鏈接1.3 IP地址分配代碼分析rfc2131.cdhcp-common.cdhcp.c 1.4 幾個小問題1.4.1 連續IP模式&#xff08;sequential_ip&#xff09;1.4.2 重新連接使用IP地址1.4.3 續約租期1.4.4 不同的MAC地址分配到相…

VS+Qt+C++旅游景區地圖導航源碼實例

程序示例精選 VSQtC旅游景區地圖導航 如需安裝運行環境或遠程調試&#xff0c;見文章底部個人QQ名片&#xff0c;由專業技術人員遠程協助&#xff01; 前言 這篇博客針對<<VSQtC旅游景區地圖導航>>編寫代碼&#xff0c;代碼整潔&#xff0c;規則&#xff0c;易讀。…

【Vue框架】菜單欄權限的使用與顯示

前言 在 【Vue框架】Vue路由配置 中的getters.js里&#xff0c;可以看到有一個應用程序的狀態&#xff08;變量&#xff09;叫 permission_routes&#xff0c;這個就是管理前端菜單欄的狀態。具體代碼的介紹&#xff0c;都以注釋的形式來說明。 1、modules\permission.js 1…

SpringBoot 將項目打包成 jar 包

SpringBoot 將項目打包成 jar 包 一、項目打包成 jar 包 首先在 pom.xml 文件中導入 Springboot 的 maven 依賴 <!-- 將應用打包成一個可以執行的 jar 包 --> <build><plugins><plugin><groupId>org.springframework.boot</groupId><…

學習筆記整理-面向對象-02-認識函數的上下文

一、認識函數的上下文 什么是上下文 垃圾分類&#xff0c;這是非常好的習慣&#xff0c;值得表揚隨手關燈&#xff0c;這是非常好的習慣&#xff0c;值得表揚遛狗栓繩&#xff0c;這是非常好的習慣&#xff0c;值得表揚課后復習&#xff0c;這是非常好的習慣&#xff0c;值得…

【數據結構】單鏈表OJ題(二)

&#x1f525;博客主頁&#xff1a;小王又困了 &#x1f4da;系列專欄&#xff1a;數據結構 &#x1f31f;人之為學&#xff0c;不日近則日退 ??感謝大家點贊&#x1f44d;收藏?評論?? 目錄 一、鏈表分割 &#x1f4a1;方法一&#xff1a; 二、鏈表的回文 &#x…

hosts文件中被添加 windows10.microdone.cn

在網上搜了一圈逗說是之前下過征信中心的安全控件,是微通新成網絡科技有限公司這家公司提供的,也是http://microdone.cn的運營商。后邊只要使用代理,就會跳出來,所以常規處理操作就是去把瀏覽器上的安全控件卸載了。 參考 解決 windows10 的 代理頻繁被自動篡改為windows10.mi…

利用python實現激光雷達LAS數據濾波的7種方式,使用laspy讀寫

激光雷達&#xff08;LiDAR&#xff09;數據在實際應用中可能受到噪聲和不完美的測量影響&#xff0c;因此數據去噪和濾波方法變得至關重要&#xff0c;以提高數據質量和準確性。以下是一些常用的激光雷達數據去噪與濾波方法。 原始數據如下&#xff1a; 1. 移動平均濾波&…

kubernetes中PV和PVC

目錄 一、PV、PVC簡介 二、PV、PVC關系 三、創建靜態PV 1.配置nfs存儲 2.定義PV 3.定義PVC 4.測試訪問 四、 搭建 StorageClass nfs-client-provisioner &#xff0c;實現 NFS 的動態 PV 創建 1. 配置nfs服務 2.創建 Service Account 3.使用 Deployment 來創建 NFS P…

Figma中文社區來啦,云端協作設計你準備好了嗎?

Figma是改變產品設計協作方式的重要工具,但由于沒有中文社區,對國內設計師的約束較大。而擁有全中文UI 界面、功能齊全的即時設計資源廣場,恰好彌補了Figma的這一短板,它也將取代Figma成為設計師新寵。 1、UI組件集 Figma中文社區替代即時設計資源廣場,擁有海量豐富的UI設計組…

【BEV Review】論文 Delving into the Devils of Bird’s-eye-view 2022-9 筆記

背景 一般來說&#xff0c;自動駕駛車輛的視覺傳感器&#xff08;比如攝像頭&#xff09;安裝在車身上方或者車內后視鏡上。無論哪個位置&#xff0c;攝像頭所得到的都是真實世界在透視視圖&#xff08;Perspective View&#xff09;下的投影&#xff08;世界坐標系到圖像坐標系…

ssm柚子云電子商城java圖書購物電子商務管理jsp源代碼

本項目為前幾天收費幫學妹做的一個項目&#xff0c;Java EE JSP項目&#xff0c;在工作環境中基本使用不到&#xff0c;但是很多學校把這個當作編程入門的項目來做&#xff0c;故分享出本項目供初學者參考。 一、項目描述 ssm柚子云電子商城 系統有2權限&#xff1a;前臺、后…

SpringBoot筆記:SpringBoot 集成 Dataway 多數據源配置(二)

文章目錄 前言核心代碼和配置yml 配置注入多數據源常用Spi實現swagger 配置自定義 Udf指定數據源進行查詢 前言 之前簡單介紹了一下 Dataway 使用&#xff0c;本文繼續介紹一下它的多數據源配置和使用。 核心代碼和配置 yml 配置 # springboot多環境配置 #端口&#xff0c;…

JavaScript應用:五子棋游戲實戰開發

&#x1f3c6;作者簡介&#xff0c;黑夜開發者&#xff0c;全棧領域新星創作者?&#xff0c;CSDN博客專家&#xff0c;阿里云社區專家博主&#xff0c;2023年6月csdn上海賽道top4。 &#x1f3c6;數年電商行業從業經驗&#xff0c;歷任核心研發工程師&#xff0c;項目技術負責…

面試熱題(螺旋矩陣)

給你一個 m 行 n 列的矩陣 matrix &#xff0c;請按照 順時針螺旋順序 &#xff0c;返回矩陣中的所有元素 一看到這個大家有沒有想到 就是一個螺旋形狀&#xff0c;那這道題我們應該怎么解決&#xff1f; 我們先來仔細的看&#xff0c;它這種螺旋形狀的遍歷是先【右-下-左-上】…

Docker中Tomcat部署步驟

第一次訪問沒有東西。

為什么我不推薦任何人用C語言作為編程啟蒙第一課?

前言 寫了20多年的代碼&#xff0c;之前做過阿里的高級架構師&#xff0c;在技術這條路上跌跌撞撞了很多&#xff0c;我今天分享一些我個人的自學方法給各位。為什么我會說&#xff1a;不推薦任何人用C語言作為編程啟蒙第一課&#xff1f; 這里有很多同學要站出來說了&#x…