關於python中的xpath解析定位

2022-09-26 00:57:12 字數 3902 閱讀 1083

爬取的**:

這裡只針對個別屬性值:

#例如:'別名'下的span標籤文字,『發病部位'下的span標籤文字以及『**科室『下的span標籤文字

#def disease(url):

text = get_html(url)

tree = etree.html(text)

bm = tree.xpath('//ul[@class="information_ul"]/li/i[text()="別名:"]/following-sibling::span/text()')

bw = tree.xpath('//ul[@class="information_ul"]/li/i[text()="發病部位:"]/following-sibling::span/a/text()')

ks = tree.xpath('//ul[@class="information_ul"]/li/i[text()="**科室:"]/following-sibling::span/a/text()')

return bm, bw, ks

補充其他:

# /從根元素開始,相當於絕對路徑

print(tree.xpath('/hsvsnmtml/body/ul'))

# //全域性搜尋,找到所有

print(tree.xpath('//li'))

ul = tree.xpath('//ul')

# . 當前

# 返回的都是列表,查詢到所有

li = ul[0].xpath('./li')

print(li)

for l in li:

# 獲取屬性id的值 @id

print(l.xpath('./@id'))

# 定位 /標籤[@屬性='值']

liclass = tree.xpath("//li[@class='liclass']")

print(liclass)

#判斷,@屬性='值' --->返回true或false

print(tree.xpath("//li/@id='12'"))

print("*************************==")

#直接使用下標訪問,下標從1開始 獲取對個li裡面的文字

print(tree.xpath('//li[2]/text()'))

#last()最後乙個

print(tree.xpath('//li[last()]/text()'))

#倒數第二個

print(tree.xpath('//li[last()-1]/text()'))

# position() 位置 > < = >= <=

print(tree.xpath('//li[position()>1]'))

#* 通配

print(tree.xpath('//*[@class="liclass"]'))

# 或 |

print(tree.xpath('//li[@class="liclass"] | //div[@class="liclass"]'))

xpath基本語法

表示式說明

article

選取所有article元素的所有子節點

程式設計客棧 /article

選取根元素article

article程式設計客棧/a

選取所有屬於article的子元素的a元素

//div

選取所有div元素(不管出現在文件裡的任何地方)

article//div

選取所有屬於article元素的後代的div元素,不管它出現在article之下的任何位置

//@class

選取所有名為class的屬性

表示式說明

/article/div[1]

選取屬於article子元素的第乙個div元素

/article/div[last()]

選取屬於article子元素的最後乙個div元素

/article/div[last()-1]

選取屬於article子元素的倒數第二個div元素

//div[@color]

選取所有擁有color屬性的div元素

//div[@color=『red']

選取所有color屬性值為red的div元素

表示式說明

/div/*

選取屬於div元素的所有子節點

//*選取所有元素

//div[@*]

選取所有帶屬性的div 元素

//div/a 丨//div/p

選取所有div元素的a和p元素

//span丨//ul

選取文件中的span和ul元素

article/div/p丨//span

選取所有屬於article元素的div元素的p元素以及文件中所有的 span元素

補充:相鄰元素定位,

前一位:

preceding-sibling::div[1]

後一位:

following-sibling::div[1]

前n位:

preceding-sibling::div[n]

後n位:

following-sibling::div[n]

# 爬取i標籤中包含相關檢查節點的兄弟 a節點(找到i節點—>找到其父節點->找到該父節點的子節點a)

content = tree.xpath('//i[contains(text(),"相關檢查:")]/../a[@class="blue"]/text()')

xpath多個class限制

//div[contains(@class, 'demo') and contains(@class, 'other')]

xpath 同時多個標籤用| 分隔

//div[contains(@class, "jib-lh-articl")]/p | //div[contains(@class, "jib-lh-articl")]/h3

選擇不包含某一屬性的節點

//div[not(@class)] 沒有class屬性的div

//tbody/tr[not(@class or @id)]

獲取當前節點的是什麼型別的html標籤

xpath_element.tag

補充知識:svsnm使用xpath定位元素(和元素定位相關的xpath語法)

本文主要講述xpath語法中,和元素定位相關的語法

第一種方法:通過絕對路徑做定位(相信大家不會使用這種方式)

by.xpath("html/body/div/form/input")

第二種方法:通過相對路徑做定位

兩個斜槓代表相對路徑

by.xpath("//input//div")

第三種方法:通過元素索引定位

by.xpath("//input[4]")

第四種方法:使用xpath+節點屬性定位(結合第2、第3中方法可以使用)

by.xpath("//input[@id='kw1']")

by.xpath("//input[@type='name' and @name='kw1']")

第五種方法:使用部分屬性值匹配(最強大的方法)

by.xpath("//input[start-with(@id,'nice')]")

by.xpath("//input[ends-with(@id,'很漂亮')]")

by.xpath("//input[contains(@id,'那麼美')]")

第六種方法:使用前集中方法的組合

by.xpwww.cppcns.comath("//input[@id='kw1']//input[start-with(@id,'nice']/div[1]/form[3])

本文標題: 關於python中的xpath解析定位

本文位址:

關於xpath中的 和

在今天之前,一直沒有注意過.的用法,習慣性的都是用 來查元素。比如在 menu title 中找id div1 的 div 我們可以用 div id div1 webdriver webelement we driver.findelement by.xpath div id div1 如果要繼續找...

關於xpath中的 和

在今天之前,一直沒有注意過.的用法,習慣性的都是用 來查元素。比如在 menu title 中找id div1 的 div 我們可以用 div id div1 webdriver webelement we driver.findelement by.xpath div id div1 如果要繼續找...

python中xpath的使用

xpath在python的爬蟲學習中,起著舉足輕重的地位,對比正規表示式 re兩者可以完成同樣的工作,實現的功能也差不多,但xpath明顯比re具有優勢,在網頁分析上使re退居二線。xpath介紹 是什麼?全稱為xml path language一種小型的查詢語言 說道xpath是門語言,不得不說它...