常用便捷高效
原理: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獲取例項:獲取html頁面中的title內容#for i in d:
# i.xpath('./tr/td[1]')這裡的'.'表示當前i標籤,沒有i則預設是從html開始的根目錄標籤,會報錯
1.檢視**需要獲取的內容:
2.分析:
可以發現需要的內容在url class ="house-list-wrap"下的li標籤下的第二個div標籤下的a標籤裡
而li標籤並不單一,因此需要先遍歷出所有li標籤,在li標籤下在進行獲取
3.實現:
(1)由於是本地載入會有編碼上的問題,因此需要在parse中傳入乙個parser引數
parser=etree.htmlparser(encoding='utf-8')(2)這裡'/li'為了定位到所有'li'標籤需要加上,這樣返回了乙個包含所有li的標籤列表,(記住加了哪個標籤最終定位到哪個標籤,並返回該標籤的列表)tree= etree.parse('58.html',parser=parser)
get_list=tree.xpath('//ul[@class="house-list-wrap"]/li')
[, , , (3)對get_list中的li標籤再進行xpath解析
li標籤下的第二個div下的h2/a標籤的text()
'.'表示當前li標籤開始定位,若無'.'則會從根目錄開始
#這裡'/li'為了定位到所有'li'標籤需要加上,這樣返回了乙個包含所有li的標籤列表返回所有title內容print(get_list)
for i in get_list:
title=i.xpath('./div[2]/h2/a/text()')[0]
print(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...