xpath是一種在xml文件中查詢資訊的語言,使用路徑表示式在xml文件中進行導航。學習xpath需要對xml和html有基本的了解。
在xpath中,有七種型別的節點:文件(根)節點、元素、屬性、文字、命名空間、處理指令、注釋,xml 文件是被作為節點樹來對待的,樹的根被稱為文件節點或者根節點。
xml version="1.0" encoding="utf-8"使用requests可獲取網頁的源**,需要先安裝這個模組pip3 install requests?>
<
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
>
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) #獲取元素的文字值,除了在匹配規則中直接通過/text(),也可以獲取到元素物件再通過物件.text來獲取,以下兩種方式等價。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屬性值
(title_ele[0],type(title_ele[0]))
(title_text[0],type(title_text[0]))
(title_attr[0],type(title_attr[0]))##
harry potter
#en
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一樣通過節點來儲存資料 概念 表示式描述 節點 節...