python xpath解析基本用法

2022-05-21 04:25:59 字數 3480 閱讀 1946

常用便捷高效

原理:1.例項化乙個etree的物件,且需要將被解析的頁面原始碼資料載入到該物件中。

2呼叫etree物件中的xpath方法結合著xpath表示式實現標籤的定位和內容的捕獲

環境安裝:

--pip install lxml

--如何例項化乙個etree物件

--1.將本地的html文件的原始碼資料載入到etree的物件中:

etree.parse(filepath)

--2.將從網際網路上獲取原始碼資料載入到該物件中

etree.html('page_text')

--xpath('xpath表示式')

-/:表示從根節點開始定位。表示的是乙個層級

-//:表示多個層級。可以表示從任意位置開始定位

-屬性定位://div[@class='song'] tag[@attrname='attrvalue']

-索引定位://div[@class='song']/p[3] (表示:所有div下class='song'屬性下的p標籤下第3個標籤(索引是從1開始))

-取文字:

-/text()獲取的是標籤中直系的文字內容

-//text()標籤中非直系的文字內容(所有的文字內容)

-取屬性:

/@attrname   

#解析本地html檔案原始碼

#根據層級進行定位

from lxml import etree

#lxml.etree.xmlsyntaxerror: starttag: invalid element name, line 2, column 2

#html**書寫不規範,不符合xml解析器的使用規範

'''解決的辦法:

使用parse方法的parser引數:

parser = etree.htmlparser(encoding=「utf-8」)

selector = etree.parse(』./data/lol_1.html』,parser=parser)

result=etree.tostring(selector)

print(result)

'''#例項化etree物件

parser=etree.htmlparser()

tree=etree.parse('大學排名.html',parser=parser)

r=tree.xpath('/html/head/title')

print(r) #

#/表示從根節點開始定位,乙個斜槓表示乙個層級,

n=tree.xpath('/html/body/div')

print(n) #

#// 兩個斜槓表示多個層級

a=tree.xpath('/html//div')

print(a)

b=tree.xpath('//div')

print(b) #[, , , ,...]

#屬性模式

#//標籤名[@class='']

c=tree.xpath('/html/body//div[@class="header shadow"]')

c=tree.xpath('//div[@class="header shadow"]')

print(c)

#索引定位

#//div[@class='']/p[3]索引從1開始表示第三個p標籤

#獲取標籤中的文字內容 亂碼需要編碼解碼

#/text();//text()

d=tree.xpath('//title/text()')

print(d) #['èí¿æ-¸ßµè½ìóýæà¼ûáìïèæ·åæ']

print(d[0].encode('iso-8859-1').decode('gbk')) #軟科-高等教育評價領先品牌

d=tree.xpath('//td/text()')

#如需獲取標籤下的屬性中的標籤內的text

#tree.xpath('/html/body/div[@class='header..']/p/text()')

#for i,s in enumerate(d):

#print(d[i].encode('iso-8859-1').decode('gbk'),end='\t') #通過for迴圈列印出td下所有text()的內容

#獲取標籤中的屬性值

e=tree.xpath('/html/body/div/@id')#取得div下id=屬性對應的值

print(e)

#如何從子標籤進行xpath獲取

#for i in d:

# i.xpath('./tr/td[1]')這裡的'.'表示當前i標籤,沒有i則預設是從html開始的根目錄標籤,會報錯

例項:獲取html頁面中的title內容

1.檢視**需要獲取的內容:

2.分析:

可以發現需要的內容在url class ="house-list-wrap"下的li標籤下的第二個div標籤下的a標籤裡

而li標籤並不單一,因此需要先遍歷出所有li標籤,在li標籤下在進行獲取

3.實現:

(1)由於是本地載入會有編碼上的問題,因此需要在parse中傳入乙個parser引數

parser=etree.htmlparser(encoding='utf-8')

tree= etree.parse('58.html',parser=parser)

get_list=tree.xpath('//ul[@class="house-list-wrap"]/li')

(2)這裡'/li'為了定位到所有'li'標籤需要加上,這樣返回了乙個包含所有li的標籤列表,(記住加了哪個標籤最終定位到哪個標籤,並返回該標籤的列表)

[, , , (3)對get_list中的li標籤再進行xpath解析

li標籤下的第二個div下的h2/a標籤的text()

'.'表示當前li標籤開始定位,若無'.'則會從根目錄開始

#這裡'/li'為了定位到所有'li'標籤需要加上,這樣返回了乙個包含所有li的標籤列表

print(get_list)

for i in get_list:

title=i.xpath('./div[2]/h2/a/text()')[0]

print(title)

返回所有title內容

python xpath 基本用法

在進行網頁抓取的時候,分析定位html節點是獲取抓取資訊的關鍵,目前我用的是lxml模組 用來分析xml文件結構的,當然也能分析html結構 利用其lxml.html的xpath對html進行分析,獲取抓取資訊 以下是關於xpath的一些基本用法 在介紹xpath的匹配規則之前,我們先來看一些有關x...

python xpath 解析html 下 下

用xpath來解析一般標籤都很簡單,因為大多數到可以找到class或者是id等屬性,確定一類情況。但是下有多個,下有多個,而且還沒有屬性,類似這種 解決辦法 第一種 用etree.html res etree.html response.txt table list res.xpath table ...

python xpath的基本用法

xpath是一種在xml文件中查詢資訊的語言,使用路徑表示式在xml文件中進行導航。學習xpath需要對xml和html有基本的了解。在xpath中,有七種型別的節點 文件 根 節點 元素 屬性 文字 命名空間 處理指令 注釋,xml 文件是被作為節點樹來對待的,樹的根被稱為文件節點或者根節點。xm...