最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用XPath定位元素的入門實戰(zhàn)指南

 更新時間:2026年04月23日 08:13:55   作者:detayun  
XPath是一種強大的XML/HTML文檔定位語言,支持精準元素查詢和復雜條件篩選,本文介紹了XPath在Python開發(fā)中的關(guān)鍵應用,包括自動化測試,爬蟲和數(shù)據(jù)分析,感興趣的小伙伴可以了解下

在自動化測試、爬蟲開發(fā)或 Web 數(shù)據(jù)分析中,XPath(XML Path Language) 是一種強大的工具,用于在 HTML/XML 文檔中精準定位元素。Python 的 lxml、seleniumscrapy 等庫都支持 XPath,使其成為開發(fā)者必備的技能之一。

本文將詳細介紹 XPath 的基本語法Python 中的使用方法,并通過 實戰(zhàn)案例 幫助你快速掌握 XPath 定位技巧。

1. XPath 是什么

XPath 是一種用于在 XML/HTML 文檔中導航和選擇節(jié)點的查詢語言。它可以通過 路徑表達式 定位元素,支持層級關(guān)系、屬性匹配、條件篩選等高級功能。

XPath 的優(yōu)勢

  • 精準定位:比 CSS 選擇器更靈活,支持復雜查詢。
  • 跨瀏覽器兼容:適用于所有瀏覽器(如 Chrome、Firefox、Edge)。
  • 支持動態(tài)內(nèi)容:可結(jié)合 selenium 定位動態(tài)加載的元素。
  • 適用于爬蟲scrapylxml 均支持 XPath 解析 HTML。

2. XPath 基本語法

2.1 基本路徑表達式

表達式說明示例
/從根節(jié)點開始/html/body/div
//從任意節(jié)點開始(不限制層級)//div(所有 <div>
.當前節(jié)點./div(當前節(jié)點的 <div>
..父節(jié)點//div/..<div> 的父節(jié)點)
@匹配屬性//div[@class="header"]

2.2 條件篩選(謂詞[])

表達式說明示例
[1]第一個匹配的元素//div[1](第一個 <div>
[@id="xxx"]匹配特定屬性//input[@id="username"]
[contains(@class, "xxx")]屬性包含某值//div[contains(@class, "header")]
[starts-with(@class, "xxx")]屬性以某值開頭//div[starts-with(@class, "col-")]
[text()="xxx"]匹配文本內(nèi)容//p[text()="Hello"]
[last()]最后一個匹配的元素//div[last()]

2.3 邏輯運算符

運算符說明示例
and邏輯與//div[@class="a" and @id="b"]
or邏輯或//div[@class="a" or @class="b"]
not()邏輯非//div[not(@class)](無 class<div>

3. Python 中使用 XPath

3.1 使用lxml解析 HTML(適用于爬蟲)

from lxml import etree

html = """
<html>
    <body>
        <div class="header">
            <h1>Welcome</h1>
            <p class="desc">This is a demo.</p>
        </div>
    </body>
</html>
"""

# 解析 HTML
tree = etree.HTML(html)

# 使用 XPath 定位元素
h1 = tree.xpath('//h1/text()')[0]  # 獲取 <h1> 的文本
desc = tree.xpath('//p[@class="desc"]/text()')[0]  # 獲取 <p class="desc"> 的文本

print(f"Title: {h1}")  # 輸出: Welcome
print(f"Description: {desc}")  # 輸出: This is a demo.

3.2 使用selenium定位動態(tài)元素(適用于自動化測試)

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

driver = webdriver.Chrome()
driver.get("https://example.com")

# 使用 XPath 定位元素
element = driver.find_element(By.XPATH, '//input[@id="username"]')
element.send_keys("admin")

# 定位多個元素
elements = driver.find_elements(By.XPATH, '//div[contains(@class, "item")]')
for el in elements:
    print(el.text)

driver.quit()

3.3 使用scrapy爬取數(shù)據(jù)(適用于爬蟲開發(fā))

import scrapy

class ExampleSpider(scrapy.Spider):
    name = "example"
    start_urls = ["https://example.com"]

    def parse(self, response):
        # 使用 XPath 提取數(shù)據(jù)
        titles = response.xpath('//h1/text()').getall()
        links = response.xpath('//a/@href').getall()

        for title, link in zip(titles, links):
            yield {
                "title": title.strip(),
                "url": link,
            }

4. XPath 實戰(zhàn)案例

案例 1:定位動態(tài)加載的按鈕

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

driver = webdriver.Chrome()
driver.get("https://demo.seleniumeasy.com/dynamic-loading-example.html")

# 等待按鈕出現(xiàn)并點擊
button = driver.find_element(
    By.XPATH,
    '//div[contains(@class, "btn-primary")][@id="startButton"]'
)
button.click()

案例 2:爬取電商網(wǎng)站商品信息

import requests
from lxml import etree

url = "https://example.com/products"
response = requests.get(url)
tree = etree.HTML(response.text)

# 提取商品名稱和價格
products = tree.xpath('//div[@class="product-item"]')
for product in products:
    name = product.xpath('.//h2/text()')[0].strip()
    price = product.xpath('.//span[@class="price"]/text()')[0].strip()
    print(f"{name}: {price}")

案例 3:定位表格中的特定行

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

driver = webdriver.Chrome()
driver.get("https://example.com/table-demo")

# 定位第二行的第三列(索引從 1 開始)
cell = driver.find_element(
    By.XPATH,
    '//table//tr[2]/td[3]'
)
print(cell.text)

5. XPath 調(diào)試技巧

瀏覽器開發(fā)者工具

  • F12 打開 DevTools。
  • Ctrl+F 輸入 XPath 測試是否匹配目標元素。

try-except 處理異常

try:
    element = driver.find_element(By.XPATH, '//div[@id="non-existent"]')
except Exception as e:
    print(f"定位失敗: {e}")

使用 contains() 避免 class 順序問題

# 錯誤寫法(如果 class 順序變化會失效)
'//div[@class="flex size-36"]'

# 正確寫法(推薦)
'//div[contains(@class, "flex") and contains(@class, "size-36")]'

6. 總結(jié)

  • XPath 是一種強大的定位工具,適用于 lxml、seleniumscrapy 等 Python 庫。
  • 基本語法 包括 ///、@、[] 等,支持條件篩選和邏輯運算。
  • 實戰(zhàn)技巧
    • 使用 contains() 避免 class 順序問題。
    • 結(jié)合 selenium 定位動態(tài)元素。
    • 在瀏覽器中調(diào)試 XPath 確保準確性。

掌握 XPath 后,你可以更高效地完成 Web 自動化測試、爬蟲開發(fā)、數(shù)據(jù)分析 等任務(wù)。希望本文能幫助你快速上手 XPath! 

到此這篇關(guān)于Python使用XPath定位元素的入門實戰(zhàn)指南的文章就介紹到這了,更多相關(guān)Python XPath定位元素內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 打包Python代碼的常用方法實現(xiàn)程序exe應用

    打包Python代碼的常用方法實現(xiàn)程序exe應用

    Python是一門強大的編程語言,但在將Python代碼分享給其他人時,讓他們安裝Python解釋器并運行腳本可能有點繁瑣,這時,將Python代碼打包成可執(zhí)行的應用程序(.exe)可以大大簡化這個過程,本文將介紹幾種常用的方法,輕松地將Python代碼變成獨立的可執(zhí)行文件
    2023-12-12
  • Python高級編程之繼承問題詳解(super與mro)

    Python高級編程之繼承問題詳解(super與mro)

    這篇文章主要介紹了Python高級編程之繼承問題,結(jié)合實例形式詳細分析了Python多繼承、MRO順序及super調(diào)用父類等相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • 解決pip安裝報錯required?to?install?pyproject.toml-based?projects問題

    解決pip安裝報錯required?to?install?pyproject.toml-based?projec

    這篇文章主要介紹了解決pip安裝報錯required?to?install?pyproject.toml-based?projects問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Pytorch技法之繼承Subset類完成自定義數(shù)據(jù)拆分

    Pytorch技法之繼承Subset類完成自定義數(shù)據(jù)拆分

    這篇文章主要介紹了Pytorch技法之繼承Subset類完成自定義數(shù)據(jù)拆分,下文我們介紹一些下面是加載內(nèi)置訓練數(shù)據(jù)集的常見操作,需要的小伙伴可以參考一下
    2022-02-02
  • Python MD5加密實例詳解

    Python MD5加密實例詳解

    這篇文章主要介紹了Python MD5加密實例詳解的相關(guān)資料,這里提供實現(xiàn)方法及實例,需要的朋友可以參考下
    2017-08-08
  • python 生成器和迭代器的原理解析

    python 生成器和迭代器的原理解析

    這篇文章主要介紹了python 生成器和迭代器的原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Spring @Enable模塊驅(qū)動原理及使用實例

    Spring @Enable模塊驅(qū)動原理及使用實例

    這篇文章主要介紹了Spring @Enable模塊驅(qū)動原理及使用實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Python 爬取淘寶商品信息欄目的實現(xiàn)

    Python 爬取淘寶商品信息欄目的實現(xiàn)

    這篇文章主要介紹了Python 爬取淘寶商品信息欄目的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • Python接口自動化淺析數(shù)據(jù)驅(qū)動原理

    Python接口自動化淺析數(shù)據(jù)驅(qū)動原理

    這篇文章主要介紹了Python接口自動化淺析數(shù)據(jù)驅(qū)動原理,文中會詳細描述怎樣使用openpyxl模塊操作excel及結(jié)合ddt來實現(xiàn)數(shù)據(jù)驅(qū)動,有需要的朋友可以參考下
    2021-08-08
  • Python2.x利用commands模塊執(zhí)行Linux shell命令

    Python2.x利用commands模塊執(zhí)行Linux shell命令

    這篇文章主要介紹了Python2.x利用commands模塊執(zhí)行Linux shell命令 的相關(guān)資料,需要的朋友可以參考下
    2016-03-03

最新評論

新巴尔虎左旗| 孙吴县| 嵊泗县| 合作市| 富顺县| 东明县| 瑞金市| 鄂伦春自治旗| 金溪县| 克拉玛依市| 额尔古纳市| 密山市| 织金县| 连南| 京山县| 台江县| 砀山县| 若羌县| 托克逊县| 阿拉善盟| 鹤峰县| 吉木乃县| 彰化县| 海原县| 曲沃县| 崇明县| 如东县| 望谟县| 龙游县| 包头市| 乌恰县| 丰城市| 仁寿县| 榆社县| 马鞍山市| 体育| 桑日县| 高密市| 高台县| 百色市| 汽车|