python xpath的基本用法

2022-07-24 12:48:16 字數 4398 閱讀 1983

xpath是一種在xml文件中查詢資訊的語言,使用路徑表示式在xml文件中進行導航。學習xpath需要對xml和html有基本的了解。

在xpath中,有七種型別的節點:文件(根)節點、元素、屬性、文字、命名空間、處理指令、注釋,xml 文件是被作為節點樹來對待的,樹的根被稱為文件節點或者根節點。

xml version="1.0" encoding="utf-8"

?>

<

bookstore

>

<

book

>

<

title

lang

="en"

>harry potter

title

>

<

author

>j k. rowling

author

>

<

year

>2005

year

>

<

price

>29.99

price

>

book

>

<

book

category

="cooking"

>

<

title

lang

="en"

>everyday italian

title

>

<

author

>giada de laurentiis

author

>

<

year

>2005

year

>

<

price

>30.00

price

>

book

>

bookstore

>

使用requests可獲取網頁的源**,需要先安裝這個模組pip3 install requests

import requests

req = requests.get(url)  #req為,req.text為整個網頁源**

要使用xpath,需要安裝乙個第三方庫lxml,直接在cmd命令視窗中通過pip3 install lxml即可。 

from lxml import etree       #匯入lxml模組的etree

selector = etree.html(原始碼)    #將原始碼轉化為能被xpath匹配的格式

info1 = selector.xpath("//標籤1[@屬性1='值1']/標籤2[@屬性2='值2']/.../標籤n[@屬性n='值n'] ")   #返回匹配到的元素節點,型別為列表

info2 = selector.xpath("//標籤1[@屬性1='值1']/標籤2[@屬性2='值2']/.../text()")    #返回匹配到的元素節點的文字值,型別為列表

info3 = selector.xpath("//標籤1[@屬性1='值1']/標籤2[@屬性2='值2']/.../@屬性x")    #返回匹配到的元素節點的x屬性值,型別為列表

通過nodename選取返回的列表的每乙個元素為元素節點,型別為class 'lxml.etree._element'物件,最後乙個元素名稱不能再加/否則會報錯。

text()和@attrname則可以直接獲取到元素節點的文字值和屬性值。

selector = etree.html(source)                        #

source為上述bookstore所在的整個**塊

title_ele = selector.xpath('

//book/title

') #

返回title元素節點物件

title_text = selector.xpath('

//book/title/text()

') #

返回title元素節點的文字

title_attr = selector.xpath('

//book/title/@lang

') #

返回title元素節點的lang屬性值

print

(title_ele[0],type(title_ele[0]))

print

(title_text[0],type(title_text[0]))

print

(title_attr[0],type(title_attr[0]))##

harry potter

#en

獲取元素的文字值,除了在匹配規則中直接通過/text(),也可以獲取到元素物件再通過物件.text來獲取,以下兩種方式等價。

title1 = selector.xpath('

//book/title/text()')

title2 =list( map(lambda x:x.text,selector.xpath('

//book/title

') ) )

除了上述基本的選取方法之外,還可以按條件進行選取,條件都放在節點名稱的方括號[ ]內

i1 = selector.xpath('

//book[1]/title/text()

') #

book元素的第乙個元素(注意不是從0開始)

i2 = selector.xpath('

//book[last()]/title/text()

') #

book元素的最後乙個元素

i3 = selector.xpath('

//book[last()-1]/title/text()

') #

book元素的倒數第二個元素

i4 = selector.xpath('

//book[position()<3]/title/text()

') #

book元素的前2個元素

i5 = selector.xpath('

//book[@class="story"]/title/text()

') #

class屬性為story的book元素

i6 = selector.xpath('

//book[@category="cooking"]/title/text()

') #

category屬性為cooking的book元素

i7 = selector.xpath('

//book[@category]/title/text()

') #

有category屬性的book元素

i8 = selector.xpath('

//book[starts-with(@category,"ch")]/title/text()

') #

category屬性以ch開頭的book元素,沒有ends-with方法

i9 = selector.xpath('

//book[contains(@category,"oo")]/title/text()

') #

category屬性包含oo的book元素

i10 = selector.xpath('

//book[price>30]/title/text()

') #

price的文字值大於30的book元素

i11 = selector.xpath('

//book[contains(title,"day")]/title/text()

') #

title的文字值包含day的book元素

i12 = selecotr.xpath('

//book/title/text() | //book/@category

') #

同時獲取book元素的title元素文字值和category屬性值

i13 = selector.xpath('

//book/*

') #

book元素下的所有直接子元素

i14 = selector.xpath('

//book/title[@+]

') #

book元素下有屬性的title元素

python xpath 基本用法

在進行網頁抓取的時候,分析定位html節點是獲取抓取資訊的關鍵,目前我用的是lxml模組 用來分析xml文件結構的,當然也能分析html結構 利用其lxml.html的xpath對html進行分析,獲取抓取資訊 以下是關於xpath的一些基本用法 在介紹xpath的匹配規則之前,我們先來看一些有關x...

python xpath解析基本用法

常用便捷高效 原理 1.例項化乙個etree的物件,且需要將被解析的頁面原始碼資料載入到該物件中。2呼叫etree物件中的xpath方法結合著xpath表示式實現標籤的定位和內容的捕獲 環境安裝 pip install lxml 如何例項化乙個etree物件 1.將本地的html文件的原始碼資料載入...

後浪小萌新Python XPath的使用

xpath是專門用來解析xml資料格式的資料的。採用直接分析節點的方式解析資料 xml資料注意 xml和json一樣都是屬於資料格式,用來進行資料的傳遞的資料格式。json的優點輕,佔頻寬小 xml傳統 老牌 資料加密方便 xml資料格式 像html一樣通過節點來儲存資料 概念 表示式描述 節點 節...