lxml 和 XPah (爬虫)
lxml 和 XPah (爬蟲)
- XPath 的基本語法規(guī)則
- 獲取內(nèi)容
- 集合的概念
- 屬性匹配與獲取
- 按序選擇節(jié)點(diǎn)
XPath 的基本語法規(guī)則
| nodename | 選取此節(jié)點(diǎn)的作用子節(jié)點(diǎn) |
| / | 從當(dāng)前節(jié)點(diǎn)選取直接子節(jié)點(diǎn) |
| // | 從當(dāng)前節(jié)點(diǎn)選取子孫節(jié)點(diǎn) |
| . | 選取當(dāng)前節(jié)點(diǎn) |
| … | 選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn) |
| @ | 選取屬性 |
注意:
-
通過X Path定位節(jié)點(diǎn)返回的是節(jié)點(diǎn)集合,即使只有一個節(jié)點(diǎn),返回的也是一個節(jié)點(diǎn)集合。
-
使用XPath分析的HTML文檔并不一定是標(biāo)準(zhǔn)的,可以沒有像 <html>、<head>、<body> 這些節(jié)點(diǎn)。任何一段符合HTML語法標(biāo)準(zhǔn)的代碼都可以使用XPah進(jìn)行定位。
獲取內(nèi)容
- 通過getroot方法獲得根節(jié)點(diǎn)
- 通過get方法獲得節(jié)點(diǎn)屬性值,
- 通過text方法屬性獲取節(jié)點(diǎn)內(nèi)容,通過索引的方式引用子節(jié)點(diǎn)。
如有一個下面的HTML
html = ''' <div> <ul> <li class="item1"><a href ="http:1">1</a><p>11</p></li> <li class="item2"><a href ="http:2">2</a></li> <li class="item3"><a href ="http:3">3</a></li> </ul> </div>集合的概念
下面代碼:
from lxml import etree # 分析HTML代碼 tree = etree.HTML(html) # 使用 xpath 定位 aTags = tree.xpath("//li") print(aTags[0][0].text) # 對應(yīng)<a> print(aTags[0][1].text) # 對應(yīng)<p> print(aTags[1][0].text) # 輸出 1 11 2.分析
- //:由上面的語法規(guī)則,這個當(dāng)前節(jié)點(diǎn)指的是html這個整體,即文檔節(jié)點(diǎn)。所以這樣可以的到<div>、<ul>、<li>在內(nèi)的節(jié)點(diǎn)
- li:是語法規(guī)則第一條,就是選取所有節(jié)點(diǎn)名為li
- 之后返回是一個集合,因?yàn)樵谠摪噶兄杏腥齻€,所以可以想象成是一個二維集合。其中在li中的每一個標(biāo)簽一同構(gòu)成了一個二維數(shù)組
屬性匹配與獲取
比較常用的匹配就是根據(jù)屬性值來選取節(jié)點(diǎn)。引用屬性值需要在屬性名前面加@,如@class表示class屬性。
XPath 的過濾條件需要放到一對中括號([…])中,如'//a[@class="item1"]'表示過濾所以class屬性值為item1的<a>節(jié)點(diǎn)。如果不放在括號里,如‘//a/@href'表示獲取<a>節(jié)點(diǎn)的href屬性值。
如上面的例子我們要獲取第二個li 可以這樣寫:
aTags = tree.xpath("//li[@class='item2']")按序選擇節(jié)點(diǎn)
在很多時候,在選中某些節(jié)點(diǎn)時,按一些屬性進(jìn)行匹配,可能同時有多個節(jié)點(diǎn)滿足條件,而只想得到其中的一個或幾個節(jié)點(diǎn)。
這時就要使用索引的方式獲取特定的節(jié)點(diǎn)。在X Path中使用索引的方式與 Python 中引用列表中元素的方式類似,都是在中括號中使用索引,
如上面的例子我們要獲取第二個li 也可以這樣寫:
aTags = tree.xpath("//li[2]")注意:在這里下標(biāo)是從1開始的。
總結(jié)
以上是生活随笔為你收集整理的lxml 和 XPah (爬虫)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 看小说有广告?不可能的,分分钟教你爬取小
- 下一篇: 还不知道要看什么小说嘛?爬取小说网站前1