xpath选择器简介及如何使用
xpath選擇器簡介及如何使用
一、總結
一句話總結:XPath 的全稱是 XML Path Language,即 XML 路徑語言,它是一種在結構化文檔(比如 XML 和 HTML 文檔)中定位信息的語言,XPath 使用路徑表達式來選取 XML 文檔中的節點或節點集。節點是通過沿著路徑 (path) 或者步 (steps) 來選取的。
?
1、xpath如何使用?
19 xml=loadXMLDoc("/example/xmle/books.xml"); 20 path="/bookstore/book/title" 32 // code for Mozilla, Firefox, Opera, etc. 33 else if (document.implementation && document.implementation.createDocument) 34 { 35 var nodes=xml.evaluate(path, xml, null, XPathResult.ANY_TYPE, null); 36 var result=nodes.iterateNext(); 37 38 while (result) ?
2、插件如何使用?
其實所有的插件的使用無非就是以下步驟:
1、引入插件
2、調用函數
?
?
?
二、xpath選擇器
XPath 的全稱是 XML Path Language,即 XML 路徑語言,它是一種在結構化文檔(比如 XML 和 HTML 文檔)中定位信息的語言,XPath 使用路徑表達式來選取 XML 文檔中的節點或節點集。節點是通過沿著路徑 (path) 或者步 (steps) 來選取的。
?
?
XPath 是一門在 XML 文檔中查找信息的語言。XPath 可用來在 XML 文檔中對元素和屬性進行遍歷。
?
XPath 是 W3C XSLT 標準的主要元素,并且 XQuery 和 XPointer 都構建于 XPath 表達之上。
?
因此,對 XPath 的理解是很多高級 XML 應用的基礎。
?
?
1. 語法
1.1 HTML 實例文檔
后面我們將以下面的 HTML 文檔介紹 XPath 的使用 http://doc.scrapy.org/en/latest/_static/selectors-sample1.html。
<html><head><basehref='http://example.com/' /><title>Example website</title></head><body><divid='images'><ahref='image1.html'>Name: My image 1 <br/><imgsrc='image1_thumb.jpg'/></a><ahref='image2.html'>Name: My image 2 <br/><imgsrc='image2_thumb.jpg'/></a><ahref='image3.html'>Name: My image 3 <br/><imgsrc='image3_thumb.jpg'/></a><ahref='image4.html'>Name: My image 4 <br/><imgsrc='image4_thumb.jpg'/></a><a>Name: My image 5 <br/><imgsrc='image5_thumb.jpg'/></a></div></body></html> 1.2 選取節點
下表是 XPath 常用的語法,實例對應的是上面的 HTML 文檔。
| 表達式 | 描述 | 實例 | 結果 |
|---|---|---|---|
| nodename | 選取此節點的所有子節點 | body | 選取 body 元素的所有子節點 |
| / | 從根節點選取 | /html | 選取根元素 html |
| // | 匹配選擇的當前節點,不考慮位置 | //img | 選取所有 img 元素,而不管它們在文檔的位置 |
| . | 選取當前節點 | ./img | 選取當前節點下的 img 節點 |
| .. | 選取當前節點的父節點 | ../img | 選取當前節點的父節點下的 title |
| @ | 選取屬性 | //a[@href=”image1.html”] | 選取所有 href 屬性為 “image1.html” 的 a 節點 |
| ? | ? | //a/@href | 獲取所有 a 節點的 href 屬性的值 |
1.3 謂語
謂語用來查找某個特定的節點或者包含某個指定的值的節點,謂語嵌在方括號中。
| 路徑表達式 | 結果 |
|---|---|
| //body//a[1] | 選取屬于 body 子元素的第一個 a 元素 |
| //body//a[last()] | 選取屬于 body 子元素的最好一個 a 元素 |
| //a[@href] | 選取所有擁有名為 href 的屬性的 a 元素 |
| //a[@href=’image2.html’] | 選取所有 href 屬性等于 “image2.html” 的 a 元素 |
?
2. 在 Python 中使用
在 python 中使用 XPath 需要安裝相應的庫,這里推薦使用 lxml 庫。
代碼示例:
# -*- coding: utf-8 -*-from lxml import etreehtml = """<html><head><base href='http://example.com/' /><title>Example website</title></head><body><div id='images'><a href='image1.html'>Name: My image 1 <br/><img src='image1_thumb.jpg'/></a><a href='image2.html'>Name: My image 2 <br/><img src='image2_thumb.jpg'/></a><a href='image3.html'>Name: My image 3 <br/><img src='image3_thumb.jpg'/></a><a href='image4.html'>Name: My image 4 <br/><img src='image4_thumb.jpg'/></a><a>Name: My image 5 <br/><img src='image5_thumb.jpg'/></a></div></body>
</html>"""
from lxml import etree
soup = etree.HTML(html)
page=soup.xpath('/html/head/base/@href') #從根節點開始選取
page=soup.xpath('/html/head//@href') #也可以這樣選擇結果是相同的
#//表示從當前節點開始選擇,不必考慮位置。
#選取title下所有文本
page=soup.xpath("//title/text()")
#選取HTML下所有a節點
page=soup.xpath('//a')
#選取標簽下屬性為image.html的scr屬性
page=soup.xpath("//a[@href='image1.html']/img/@src")
#選取a標簽下第三個href屬性
page=soup.xpath("//a[contains(@href, '3')]/@href")
#body最后一個a標簽href屬性
page=soup.xpath("//body//a[last()]/img/@src")
page=soup.xpath('//a[@class="active"][@id="value"]/img/@src') #多個屬性定位
?
3.常用函數
?
除了索引、屬性外,Xpath還可以使用便捷的函數來增強定位的準確性。下面試常用的幾個函數:
?
?
<a class="menu_hot" href="/ads/auth/promote.html">應用推廣</a>
?
#定位href屬性中包含“promote.html”的所有a節點
//a[contains(@href,'promote.html')]#元素內的文本為“應用推廣”的所有a節點
//a[text()='應用推廣']#href屬性值是以“/ads”開頭的所有a節點
//a[starts-with(@href,'/ads')] 參考:xpath選擇器 - moon的博客 - CSDN博客
https://blog.csdn.net/qq_32942549/article/details/78400675
?
?
三、xpath使用實例
1、操作的xml(books.xml)
<?xml version="1.0" encoding="ISO-8859-1"?><bookstore><book category="COOKING"><title lang="en">Everyday Italian</title><author>Giada De Laurentiis</author><year>2005</year><price>30.00</price> </book><book category="CHILDREN"><title lang="en">Harry Potter</title><author>J K. Rowling</author><year>2005</year><price>29.99</price> </book><book category="WEB"><title lang="en">XQuery Kick Start</title><author>James McGovern</author><author>Per Bothner</author><author>Kurt Cagle</author><author>James Linn</author><author>Vaidyanathan Nagarajan</author><year>2003</year><price>49.99</price> </book><book category="WEB"><title lang="en">Learning XML</title><author>Erik T. Ray</author><year>2003</year><price>39.95</price> </book></bookstore>
?
?
2、需求及代碼
選取所有 title
下面的例子選取所有 title 節點:
/bookstore/book/title
1 <html> 2 <body> 3 <script type="text/javascript"> 4 function loadXMLDoc(dname) 5 { 6 if (window.XMLHttpRequest) 7 { 8 xhttp=new XMLHttpRequest(); 9 } 10 else 11 { 12 xhttp=new ActiveXObject("Microsoft.XMLHTTP"); 13 } 14 xhttp.open("GET",dname,false); 15 xhttp.send(""); 16 return xhttp.responseXML; 17 } 18 19 xml=loadXMLDoc("/example/xmle/books.xml"); 20 path="/bookstore/book/title" 21 // code for IE 22 if (window.ActiveXObject) 23 { 24 var nodes=xml.selectNodes(path); 25 26 for (i=0;i<nodes.length;i++) 27 { 28 document.write(nodes[i].childNodes[0].nodeValue); 29 document.write("<br />"); 30 } 31 } 32 // code for Mozilla, Firefox, Opera, etc. 33 else if (document.implementation && document.implementation.createDocument) 34 { 35 var nodes=xml.evaluate(path, xml, null, XPathResult.ANY_TYPE, null); 36 var result=nodes.iterateNext(); 37 38 while (result) 39 { 40 document.write(result.childNodes[0].nodeValue); 41 document.write("<br />"); 42 result=nodes.iterateNext(); 43 } 44 } 45 </script> 46 47 </body> 48 </html>
?
3、結果
Harry Potter
Everyday Italian
Learning XML
XQuery Kick Start
?
轉載于:https://www.cnblogs.com/Renyi-Fan/p/9810656.html
總結
以上是生活随笔為你收集整理的xpath选择器简介及如何使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 性格缺陷人的性格的特点有哪些?
- 下一篇: 客厅吊顶多少钱啊?