Python爬蟲之xlml解析庫(全面了解)
1.Xpath
Xpath是一門在XML中查找信息的語言,可用來在XML文檔中對元素和屬性進(jìn)行遍歷。XQuery和xpoint都是構(gòu)建于xpath表達(dá)之上
2.節(jié)點
父(parent),子(children),兄弟(sibling),先輩(ancetstor),后代(Decendant)
3.選取節(jié)點
路徑表達(dá)式
| 表達(dá)式 | 描述 | 路徑表達(dá)式 | 結(jié)果 |
| nodename | 選取此節(jié)點上的所有的子節(jié)點 | bookstore | 選取bookstore元素的所有子節(jié)點 |
| / | 從根節(jié)點上選取 | /bookstore | 選取根元素bookstore,為絕對路徑 |
| // | 從匹配選擇的當(dāng)前節(jié)點選擇文檔中的節(jié)點,不考慮位置 | //book | 選取所有的book子元素,而不管他們在文檔的位置 |
| . | 選取當(dāng)前節(jié)點 | bookstore//book | 選擇bookstore后代中所有的book元素 |
| .. | 選取當(dāng)前節(jié)點的父節(jié)點 | ||
| @ | 選取屬性 | //@lang | 選取名為lang的所有屬性 |
謂語
謂語用來查找某個特定的節(jié)點或者包含某個指定的值的節(jié)點
謂語被嵌在方括號中
| 路徑表達(dá)式 | 結(jié)果 |
| /bookstore/book[1] | 選取屬于bookstore子元素的第一個book元素 |
| /bookstore/book[last()] | 選取屬于bookstore子元素的最后book元素 |
| /bookstore/book[last()-1] | 選取屬于bookstore子元素的倒數(shù)第二個book元素 |
| /bookstore/book[position()<3] | 選取最前面的兩個屬于bookstore元素的子元素的book元素 |
| //title[@lang='eng'] | 選取所有的title元素,并且這些元素?fù)碛兄禐閑ng的lang屬性 |
| /bookstore/book[price>35.0] | 選取bookstore元素的所有book元素,且其中的price值大于35.0 |
選取未知節(jié)點(通配符)
* 匹配任何 元素節(jié)點
@* 匹配任何屬性節(jié)點
node() 匹配任何類型的節(jié)點
4.lxml用法
#!/usr/bin/python
#_*_coding:utf-8_*_
from lxml import etree
text='''
<div>
<ul>
<li class="item-0"><a href="link1.html" rel="external nofollow" rel="external nofollow" >first item</a></li>
<li class="item-1"><a href="link2.html" rel="external nofollow" >second item</a></li>
<li class="item-inactive"><a href="link3.html" rel="external nofollow" >third item</a></li>
<li class="item-1"><a href="link4.html" rel="external nofollow" >fourth item</a></li>
<li class="item-0"><a href="link5.html" rel="external nofollow" >fifth item</a>
</ul>
</div>
'''
# html=etree.HTML(text) #html對象,存儲在地址中,有自動修正功能
# result=etree.tostring(html) #將html對象轉(zhuǎn)化為字符串
html=etree.parse('hello.html')
# result=etree.tostring(html,pretty_print=True)
# print result
print type(html)
result= html.xpath('//li')
print result
print len(result)
print type(result)
print type(result[0])
print html.xpath('//li/@class') # 獲取li標(biāo)簽下的所有的class
print html.xpath('//li/a[@href="link1.html" rel="external nofollow" rel="external nofollow" ]') #獲取li標(biāo)簽下href為link1的<a>標(biāo)簽
print html.xpath('//li//span') #獲取li標(biāo)簽下所有的span標(biāo)簽
print html.xpath('//li[last()-1]/a')[0].text #獲取倒數(shù)第二個元素的內(nèi)容
以上這篇Python爬蟲之xlml解析庫(全面了解)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決Python找不到ssl模塊問題 No module named _ssl的方法
這篇文章主要介紹了解決Python找不到ssl模塊問題 No module named _ssl的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-04
python使用redis模塊來跟redis實現(xiàn)交互
這篇文章主要介紹了python使用redis模塊來跟redis實現(xiàn)交互,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-06-06
tensorflow建立一個簡單的神經(jīng)網(wǎng)絡(luò)的方法
本篇文章主要介紹了tensorflow建立一個簡單的神經(jīng)網(wǎng)絡(luò)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02
Python調(diào)用PC攝像頭實現(xiàn)掃描二維碼
PC攝像機(jī)掃描二維碼的應(yīng)用場景很廣泛,可以應(yīng)用于各種需要快速掃描、識別和管理的場景,本文就來具體講講如何用Python實現(xiàn)這一功能吧2023-05-05
Python數(shù)據(jù)分析處理(三)--運動員信息的分組與聚合
這篇文章主要介紹了Python數(shù)據(jù)清洗與處理?運動員信息的分組與聚合,根據(jù)Python數(shù)據(jù)清洗與處理?的相關(guān)資料展開運動員信息的分組與聚合的文章內(nèi)容,需要的朋友可以參考一下2021-12-12

