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