爬取的**:
這裡只針對個別屬性值:
#例如:'別名'下的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是門語言,不得不說它...