python影片教學欄位介紹python的Xpath語法。
#一、XMl簡介
(一)什麼是XML
- XML 指可擴充標記語言(EXtensible)
- XML 是一種標記語言,很類似HTML。
- XML 的設計宗旨是傳輸數據,而非顯示數據。
- XML 的標籤需要我們自己定義。
- XML 被設計為具有自我描述性。
- XML 是 W3C 的建議標準。
W3School 官方文件:http://www.w3school.com.cn/xml/index.asp
(二)XML 與HTML 的差異
資料格式 | 描述 |
XML
Extensible Markup Language ( 可擴展標記語言)
被設計為傳輸和儲存數據,其焦點是資料的內容。
HTML
HyperText Markup Language(超文本標記語言)
顯示資料以及如何更好地顯示資料。
HTML DOM
Document Object Model for HTML(超文本標文件物件模型)
透過HTML DOM,可以存取所有的HTML 元素,連同它們所包含的文本和屬性。可以對其中的內容進行修改和刪除,同時也可以建立新的元素。
(三)XML 的節點關係每個元素以及屬性都有一個父。上面是一個簡單的XML 範例中,book 元素是title、author、year 以及price 元素的父 | 2.子(Children) |
---|---|
有相同的父的節點。在上面的例子中,title、author、year 以及 price 元素都是同胞 | 4. 先修(Ancestor) |
5. 後代(Descendant) | 某個節點的子,子的子等等。在上面的例子中,bookstore 的後代是book、title、author、year 以及price 元素: |
XPath (XML Path Language) 是一門在XML 文件中查找資訊的語言,可用來在XML 文件中對元素和屬性進行遍歷。 | (一)選取節點 |
表達式 | |
在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:
路径表达式 | 描述 |
---|---|
bookstore | 选取 bookstore 元素的所有子节点 |
/bookstore | 选取根元素 bookstore。代表元素的绝对路径。 |
bookstore/book | 选取属于 bookstore 的子元素的所有 book 元素。 |
//book | 选取所有 book 子元素,而不管它们在文档中的位置 |
bookstore//book | 选择属于 booksore 元素的后代所有的 book 元素,而不管他们位于 bookstore 之下的什么位置。 |
//@lang | 选取名为 lang 的所有属性。 |
text() | 取标签当中的值 |
(二)谓语(Predicates)
谓语用来查找某个特定的节点或者包含某个指定的值的节点,被嵌在方括号中。在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:
路径表达式 | 描述 |
---|---|
/bookstore/book[l] | 选取属于 bookstore 子元素的第一个 book 元素。 |
/bookstore/book[last()] | 选取属于 bookstore 子元素的最后一个 book 元素。 |
/bookstore/book[last()-1] | 选取属于 bookstore 子元素的倒数第二个 book 元素。 |
/bookstore/book[position() | 选最前面的一个属于 bookstore 元素的子元素的 book 元素。 |
//title[@lang] | 选取所有属性名为 lang 的属性的 title 元素。 |
//titlel@lang=‘eng’] | 选取所有 tltle 元素,且这些元素有属性值为 eng 的 lang 属性。 |
(三)选取未知节点
XPath 通配符可用来选取未知的 XML 元素。
通配符 | 描述 |
---|---|
* | 匹配任何元素节点。 |
@* | 匹配任何属性节点。 |
在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:
路径表达式 | 描述 |
---|---|
/bookstore/* | 选取 bookstore 元素的所有子元素 |
//* | 选取文档中的所有元素。 |
//title[@*] | 选取所有带有属性的 title 元素。 |
(四)选取若干路径
通过在路径表达式中使用“|”运算符,您可以选取若干个路径。在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:
路径表达式 | 描述 |
---|---|
//book/title | //book/price |
//title | //price |
//price | 选取文档中所有的 price 元素。 |
三、lxml 模块
(一)lxml 简介与安装
lxml 是一个 HTML/XML 的解析器,主要的功能是如何解析和提取 HTML/XML 数据。我们可以利用之前学习的 XPath 语法,来快速的定位特定元素以及节点信息。
安装方法:pip install lxml
(二)lxml 初步使用
1、解析HTML字符串
XML 素材:http://www.cnblogs.com/zhangboblogs/p/10114698.html
小结:lxml 可以自动修正 html 代码,例子里不仅补全了 li 标签,还添加了 body,html 标签。
2.、lxml 文件读取
XML 素材:http://www.cnblogs.com/zhangboblogs/p/10114698.htm
除了直接读取字符串,lxml 还支持从文件里读取内容。我们新建一个 hello.html 文件,再利用 etree.parse()方法来读取文件。
注意:从文件中读取数据,要求文件内容符合 xml 格式,如果标签缺失,则不能正常读取。
四、XPath 节点信息解析:
# 安装lxml: pip install lxml # 1. 导入etree: 两种导入方式 # 第一种: 直接导入 from lxml import etree # 注意: 此种导入方式,可能会导致报错(etree下面会出现红色波浪线,不影响正常使用) # 第二种: # from lxml import html # etree = html.etree str = '<bookstore>' \ '<book>' \ '<title>Harry Potter</title>' \ '<price>29.99</price>' \ '</book>' \ '<book>' \ '<title>Learning XML</title>' \ '<price>39.95</price>' \ '</book>' \ '<book>' \ '<title>西游记</title>' \ '<price>69.95</price>' \ '</book>' \ '<book>' \ '<title>水浒传</title>' \ '<price>29.95</price>' \ '</book>' \ '<book>' \ '<title>三国演义</title>' \ '<price>29.95</price>' \ '</book>' \ '</bookstore>' # 2. etree.HTML() 将字符串转换成HTML元素对象,可以自动添加缺失的元素 html = etree.HTML(str) # <element> 是一个el对象 # print(html) # 3. 方法: # 3.1 tostring() 查看转换之后的内容(二进制类型) # 如果想要查看字符串,需要解码 # 如果想要显示汉字,需要先编码,再解码 # content = etree.tostring(html,encoding='utf-8') # print(content.decode()) # 3.2 xpath()方法 作用:提取页面数据,返回值是一个列表 # xpath的使用一定是建立在etree.HTML()之后的内容中的 # xpath是如何来提取页面数据的? # 答:使用的是路径表达式 # 3.2.1 xpath路径分为两种: # 第一种: / 代表一层层的查找,如果/存在于开头,代表根路径 # bookstore = html.xpath('/html/body/bookstore') # print(bookstore) # [<element>] # 第二种: // 任意路径 焦点在元素身上 # 例如:查找bookstore标签 # bookstore = html.xpath('//bookstore') # print(bookstore) # [<element>] # 第一种和第二种结合 # 例如:查找所有book标签 # book = html.xpath('//bookstore/book') # print(book) # [<element>, <element>, <element>, <element>, <element>] # 3.2.2 /text() 获取标签之间的内容 # 例如:获取所有title标签的内容 # 步骤: # 1. 找到所有title标签 # 2. 获取内容 # title = html.xpath('//book/title/text()') # print(title) # ['Harry Potter', 'Learning XML', '西游记', '水浒传', '三国演义'] # 3.3 位于 使用[] 可以理解成条件 # 3.3.1 [n] 代表获取第n个元素,n是数字,n / = / 3]/title/text()') # print(title) # ['水浒传', '三国演义'] # ? title = html.xpath('//book[position()>last()-2]/title/text()') # print(title) # ['水浒传', '三国演义'] # 3.3.3 获取属性值:@属性名 # 例如: 获取lang属性值为cng的title标签的内容 # title = html.xpath('//book/title[@lang="cng"]/text()') # print(title) # ['西游记'] # 例如: 获取包含src属性得title标签的内容 # title = html.xpath('//book/title[@src]/text()') # print(title) # ['Harry Potter', '水浒传', '三国演义'] # 例如: 获取包含属性的title标签的内容 # title = html.xpath('//book/title[@*]/text()') # print(title) # ['Harry Potter', 'Learning XML', '西游记', '水浒传', '三国演义'] # 例如: 获取最后一个title标签的src属性的值 # title = html.xpath('//book[last()]/title/@src') # print(title) # ['https://www.jd.com'] # 例如: 获取所有包含src属性的标签之间的内容 # node = html.xpath('//*[@src]/text()') # print(node) # ['Harry Potter', '水浒传', '三国演义'] # 3.4 and 与 连接的是谓语(条件) # 例如: 获取lang="dng"并且class="t1"的title标签的内容 # title = html.xpath('//book/title[@lang="dng" and @class="t1"]/text()') # title1 = html.xpath('//book/title[@lang="dng"][@class="t1"]/text()') # print(title) # ['三国演义'] # print(title1) # ['三国演义'] # 3.5 or 或 连接谓语 # 例如: 查找lang="cng"或者lang="bng"的title标签的内容 # title = html.xpath('//book/title[@lang="cng" or @lang="bng"]/text()') # print(title) # ['Harry Potter', '西游记'] # 3.6 | 连接路径 # 例如: 获取所有title标签和price标签之间的内容 # title = html.xpath('//title/text() | //price/text()') # print(title) # ['Harry Potter', '29.99', 'Learning XML', '39.95', '西游记', '69.95', '水浒传', '29.95', '三国演义', '29.95'] # 3.8 parse() 作用:从文件中读取数据 # 注意: 读取的文件,必须满足xml格式**(不存在单标签,全部都是上标签)** content = etree.parse('test.html') # print(content) # <lxml.etree._elementtree> res = etree.tostring(content,encoding='utf-8') print(res.decode()) nbsp;html> <title>test</title> <h1> 这是一个html </h1> </lxml.etree._elementtree></element></element></element></element></element></element></element></element>
相关免费学习推荐:python视频教程
以上是python之Xpath語法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Arraysinpython,尤其是Vianumpy,ArecrucialInsCientificComputingfortheireftheireffertheireffertheirefferthe.1)Heasuedfornumerericalicerationalation,dataAnalysis和Machinelearning.2)Numpy'Simpy'Simpy'simplementIncressionSressirestrionsfasteroperoperoperationspasterationspasterationspasterationspasterationspasterationsthanpythonlists.3)inthanypythonlists.3)andAreseNableAblequick

你可以通過使用pyenv、venv和Anaconda來管理不同的Python版本。 1)使用pyenv管理多個Python版本:安裝pyenv,設置全局和本地版本。 2)使用venv創建虛擬環境以隔離項目依賴。 3)使用Anaconda管理數據科學項目中的Python版本。 4)保留系統Python用於系統級任務。通過這些工具和策略,你可以有效地管理不同版本的Python,確保項目順利運行。

numpyarrayshaveseveraladagesoverandastardandpythonarrays:1)基於基於duetoc的iMplation,2)2)他們的aremoremoremorymorymoremorymoremorymoremorymoremoremory,尤其是WithlargedAtasets和3)效率化,效率化,矢量化函數函數函數函數構成和穩定性構成和穩定性的操作,製造

數組的同質性對性能的影響是雙重的:1)同質性允許編譯器優化內存訪問,提高性能;2)但限制了類型多樣性,可能導致效率低下。總之,選擇合適的數據結構至關重要。

到CraftCraftExecutablePythcripts,lollow TheSebestPractices:1)Addashebangline(#!/usr/usr/bin/envpython3)tomakethescriptexecutable.2)setpermissionswithchmodwithchmod xyour_script.3)

numpyArraysareAreBetterFornumericalialoperations andmulti-demensionaldata,而learthearrayModuleSutableforbasic,內存效率段

numpyArraySareAreBetterForHeAvyNumericalComputing,而lelethearRayModulesiutable-usemoblemory-connerage-inderabledsswithSimpleDatateTypes.1)NumpyArsofferVerverVerverVerverVersAtility andPerformanceForlargedForlargedAtatasetSetsAtsAndAtasEndCompleXoper.2)

ctypesallowscreatingingangandmanipulatingc-stylarraysinpython.1)usectypestoInterfacewithClibrariesForperfermance.2)createc-stylec-stylec-stylarraysfornumericalcomputations.3)passarraystocfunctions foreforfunctionsforeffortions.however.however,However,HoweverofiousofmemoryManageManiverage,Pressiveo,Pressivero


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。