xpath教程二 ---- 通過ID和Class檢索


必備知識點

  • 在html中,id是唯一的
  • 在html中,class是可以多處引用的

工具

  • Python3版本
  • lxml庫【優點是解析快】
  • HTML代碼塊【從網絡中獲取或者自己杜撰一個】
  • requests【推薦安裝,從網頁上獲取網頁代碼練手,再好不過了】

Xpath學習

先定義html代碼塊【這次只從body開始】

<body> <div class="container"> <div id="first"> <div class="one">都市</div> <div class="two">德瑪西亞</div> <div class="two">王牌對王牌</div> <a> <div class="spe">特殊位置</div> </a> </div> <div id="second"> <div class="three">水電費</div> <div class="three">說的話房間不開封</div> <div class="four">三頓飯黑客技術</div> </div> <div id="third"> <div class="three">水電費</div> <div class="three">說的話房間開封</div> </div> </div> </body> """ 

再准備python代碼塊

from lxml import etree html = etree.HTML(html_str) 

任務一:獲取類名為one的文本值

解決這個問題,有非常簡單的xpath路徑,直接匹配html代碼中的class,然后獲取文本值就行

代碼如下:

print(html.xpath('.//div[@class="one"]/text()')) 

結果:['都市']

這里需要解釋多個地方: - @的作用:表示屬性,div屬於標簽,它有自己的屬性,例如classid等等。 - 點 . 的作用:表示當前位置;與其對應的是雙點 .. :表示上一層級的位置 - 雙斜杠 // 的作用:查找當前標簽下所有子級中搜索;與其對應的是單斜桿 / ,這個標簽標簽下一層所有中搜索。【后面兩個任務是這點的練習】

任務二:獲取id為first下,第一層子級div標簽的文本值

只需要獲取第一層,使用單斜桿就足夠了,xpath路徑如下:

print(html.xpath('.//div[@id="first"]/div/text()')) 

結果:['都市', '德瑪西亞', '王牌對王牌']

任務三:獲取id為first下,所有層級div標簽的文本值

這個任務和上一個任務形成對比,一個是單斜桿一個是雙斜杠,則xpath的代碼如下:

print(html.xpath('.//div[@id="first"]//div/text()')) 

結果:['都市', '德瑪西亞', '王牌對王牌', '特殊位置']

任務四:獲取id為second下,所有類為threediv標簽的文本值

指定id為second,並且子級div的類名是three,然后是獲取文本,則xpath如下

print(html.xpath('.//div[@id="second"]/div[@class="three"]/text()')) 

結果:['水電費', '說的話房間不開封']

任務五:獲取所有類為threediv標簽的文本值

觀察html代碼塊,會發現類為threediv標簽在幾個地方,所以這里最好的方法就是全局范圍內的直接搜索,簡單粗暴的xpath如下:

print(html.xpath('.//div[@class="three"]/text()')) 

結果:['水電費', '說的話房間不開封', '水電費', '說的話房間開封']

任務六:獲取文本等於水電費的標簽,取出他們的class

通過文本值,獲取他們的類名信息,就是把上一個任務反過來做就行,xpath如下:

print(html.xpath('.//div[text()="水電費"]/@class')) 

結果:['three', 'three']

最終的代碼和運行截圖

html_str = """ <body> <div class="container"> <div id="first"> <div class="one">都市</div> <div class="two">德瑪西亞</div> <div class="two">王牌對王牌</div> <a> <div class="spe">特殊位置</div> </a> </div> <div id="second"> <div class="three">水電費</div> <div class="three">說的話房間不開封</div> <div class="four">三頓飯黑客技術</div> </div> <div id="third"> <div class="three">水電費</div> <div class="three">說的話房間開封</div> </div> </div> </body> """ from lxml import etree html = etree.HTML(html_str) print(html.xpath('.//div[@class="one"]/text()')) print(html.xpath('.//div[@id="first"]/div/text()')) print(html.xpath('.//div[@id="first"]//div/text()')) print(html.xpath('.//div[@id="second"]/div[@class="three"]/text()')) print(html.xpath('.//div[@class="three"]/text()')) print(html.xpath('.//div[text()="水電費"]/@class')) 

xpath_2

版權聲明:允許轉載,轉載請注明出處 —— 《xpath教程》: 通過ID和Class檢索


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM