真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python中xpath解析原理是什么

這篇文章給大家分享的是有關(guān)python中xpath解析原理是什么的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的韓城網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

XPath,全稱XML Path Language,即XML路徑語言,它是一門在XML文檔中查找信息的語言,它最初是用來搜尋XML文檔的,但是它同樣適用于HTML文檔的搜索

XPath的選擇功能十分強(qiáng)大,它提供了非常簡(jiǎn)明的路徑選擇表達(dá)式,另外,它還提供了超過100個(gè)內(nèi)建函數(shù),用于字符串、數(shù)值、時(shí)間的匹配以及節(jié)點(diǎn)、序列的處理等,幾乎所有我們想要定位的節(jié)點(diǎn),都可以用XPath來選擇

xpath解析原理:

  • 實(shí)現(xiàn)標(biāo)簽的定位:實(shí)例化一個(gè)etree的對(duì)象,且需要將被解析的頁面源碼數(shù)據(jù)加載到該對(duì)象中。

  • 調(diào)用etree對(duì)象中的xpath方法結(jié)合著xpath表達(dá)式實(shí)現(xiàn)標(biāo)簽的定位和內(nèi)容的捕獲。

環(huán)境的安裝

pip install lxml

lxml是python的一個(gè)解析庫,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高

如何實(shí)例化一個(gè)etree對(duì)象

1.將本地的html文檔中的源碼數(shù)據(jù)加載到etree對(duì)象中:

etree. parse(filePath)#你的文件路徑

2.可以將從互聯(lián)網(wǎng)上獲取的源碼數(shù)據(jù)加載到該對(duì)象中

etree.HtML('page_ text')#page_ text互聯(lián)網(wǎng)中響應(yīng)的數(shù)據(jù)

xpath 表達(dá)式

表達(dá)式描述
nodename選取此節(jié)點(diǎn)的所有子節(jié)點(diǎn)
/表示的是從根節(jié)點(diǎn)開始定位。表示的是一個(gè)層級(jí)。
//表示的是多個(gè)層級(jí)??梢员硎緩娜我馕恢瞄_始定位。
.選取當(dāng)前節(jié)點(diǎn)
選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)
@選取屬性
*通配符,選擇所有元素節(jié)點(diǎn)與元素名
@*選取所有屬性
[@attrib]選取具有給定屬性的所有元素
[@attrib=‘value’]選取給定屬性具有給定值的所有元素
[tag]選取所有具有指定元素的直接子節(jié)點(diǎn)
[tag=‘text’]選取所有具有指定元素并且文本內(nèi)容是text節(jié)點(diǎn)

對(duì)上面表達(dá)式的實(shí)例詳解

這是一個(gè)HTML的文檔


	
	測(cè)試bs4
	

百里守約

李清照

王安石

蘇軾

柳宗元

this is span 宋朝是最強(qiáng)大的王朝,不是軍隊(duì)的強(qiáng)大,而是經(jīng)濟(jì)很強(qiáng)大,國(guó)民都很有錢 總為浮云能蔽日,長(zhǎng)安不見使人愁

  • 清明時(shí)節(jié)雨紛紛,路上行人欲斷魂,借問酒家何處有,牧童遙指杏花村
  • 秦時(shí)明月漢時(shí)關(guān),萬里長(zhǎng)征人未還,但使龍城飛將在,不教胡馬度陰山
  • 岐王宅里尋常見,崔九堂前幾度聞,正是江南好風(fēng)景,落花時(shí)節(jié)又逢君
  • 杜甫
  • 杜牧
  • 杜小月
  • 度蜜月
  • 鳳凰臺(tái)上鳳凰游,鳳去臺(tái)空江自流,吳宮花草埋幽徑,晉代衣冠成古丘

從瀏覽器中打開是這樣的
python中xpath解析原理是什么
為了方便直觀,我們對(duì)寫個(gè)HTML文件進(jìn)行本地讀取進(jìn)行測(cè)試

子節(jié)點(diǎn)和子孫節(jié)點(diǎn)的定位 / 和 //

先來看子節(jié)點(diǎn)和子孫節(jié)點(diǎn),我們從上往下找p這個(gè)節(jié)點(diǎn),可以看到p的父節(jié)點(diǎn)是body,body父節(jié)點(diǎn)是html
python中xpath解析原理是什么
定位到這個(gè)HTML的p對(duì)象中,看上面html源碼,可以知道有三個(gè)p對(duì)象
python中xpath解析原理是什么python中xpath解析原理是什么python中xpath解析原理是什么
我們通過三種不同的方法來輸出這個(gè)節(jié)點(diǎn)的信息,可以看到輸出的是三個(gè)一樣的Element,也就是這三種方法實(shí)現(xiàn)的功能是一樣的。

import requestsfrom lxml import etree
tree = etree.parse('test.html')r1=tree.xpath('/html/body/p')	#直接從上往下挨著找節(jié)點(diǎn)r2=tree.xpath('/html//p')#跳躍了一個(gè)節(jié)點(diǎn)來找到這個(gè)p節(jié)點(diǎn)的對(duì)象r3=tree.xpath('//p')##跳躍上面所有節(jié)點(diǎn)來尋找p節(jié)點(diǎn)的對(duì)象r1,r2,r3>>([,
  ,
  ],
  
 [,
  ,
  ],
  
 [,
  ,
  ])

屬性定位

如果我只想要p里面song這一個(gè)標(biāo)簽,就可以對(duì)其屬性定位
python中xpath解析原理是什么
當(dāng)然返回的還是一個(gè)element

r4=tree.xpath('//p[@class="song"]')r4>>>[]

索引定位

如果我只想獲得song里面的蘇軾的這個(gè)標(biāo)簽
我們找到了song,/p可以返回里面的所有標(biāo)簽,

tree.xpath('//p[@class="song"]/p')>>[,
 ,
 ,
 ]

這個(gè)單獨(dú)返回的蘇軾的p標(biāo)簽,要注意的是這里的索引不是從0開始的,而是1

tree.xpath('//p[@class="song"]/p[3]')[]

取文本

比如我想取杜牧這個(gè)文本內(nèi)容
python中xpath解析原理是什么
和上面一樣,我們要定位到杜牧的這個(gè)a標(biāo)簽,首先要找到他的上一級(jí) li ,這是第五個(gè) li 里面的a所以就有了下面的寫法,text()是把element轉(zhuǎn)化為文本,當(dāng)然上面的在后面加個(gè)text()都可以展示文本內(nèi)容。

tree.xpath('//p[@class="tang"]//li[5]/a/text()')>>['杜牧']

可以看到這個(gè)返回的是一個(gè)列表,如果我們想取里面的字符串,可以這樣

tree.xpath('//p[@class="tang"]//li[5]/a/text()')[0]杜牧

看一個(gè)更直接的,//li 直接定位到 li這個(gè)標(biāo)簽,//text()直接將這個(gè)標(biāo)簽下的文本提取出來。但要注意,這樣會(huì)把所有的li標(biāo)簽下面的文本提取出來,有時(shí)候你并不想要的文本也會(huì)提取出來,所以最好還是寫詳細(xì)一點(diǎn),如具體到哪個(gè)p里的li。

tree.xpath('//li//text()')['清明時(shí)節(jié)雨紛紛,路上行人欲斷魂,借問酒家何處有,牧童遙指杏花村',
 '秦時(shí)明月漢時(shí)關(guān),萬里長(zhǎng)征人未還,但使龍城飛將在,不教胡馬度陰山',
 '岐王宅里尋常見,崔九堂前幾度聞,正是江南好風(fēng)景,落花時(shí)節(jié)又逢君',
 '杜甫',
 '杜牧',
 '杜小月',
 '度蜜月',
 '鳳凰臺(tái)上鳳凰游,鳳去臺(tái)空江自流,吳宮花草埋幽徑,晉代衣冠成古丘']

取屬性

比如我想取下面這個(gè)屬性
python中xpath解析原理是什么
可以直接用@取屬性

tree.xpath('//p[@class="song"]/img/@src')['http://www.baidu.com/meinv.jpg']

或者如果我想取所有的href這個(gè)屬性,可以看到tang和song的所有href屬性

tree.xpath('//@href')['http://www.song.com/',
 '',
 'http://www.baidu.com',
 'http://www.163.com',
 'http://www.126.com',
 'http://www.sina.com',
 'http://www.dudu.com',
 'http://www.haha.com']

爬蟲實(shí)戰(zhàn)之58同城房源信息

#導(dǎo)入必要的庫import requestsfrom lxml import etree#URL就是網(wǎng)址,headers看圖一url='https://sh.58.com/ershoufang/'headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.7 Safari/537.36'}#對(duì)網(wǎng)站發(fā)起請(qǐng)求page_test=requests.get(url=url,headers=headers).text# 這里是將從互聯(lián)網(wǎng)上獲取的源碼數(shù)據(jù)加載到該對(duì)象中tree=etree.HTML(page_test)#先看圖二的解釋,這里li有多個(gè),所里返回的li_list是一個(gè)列表li_list=tree.xpath('//ul[@class="house-list-wrap"]/li')#這里我們打開一個(gè)58.txt文件來保存我們的信息fp=open('58.txt','w',encoding='utf-8')#li遍歷li_listfor li in li_list:
	#這里 ./是對(duì)前面li的繼承,相當(dāng)于li/p...
    title=li.xpath('./p[2]/h3/a/text()')[0]
    print(title+'\n')
    #把文件寫入文件
    fp.write(title+'\n')fp.close()

圖一:
python中xpath解析原理是什么
圖二:.
這里我們要提取所有的房源信息,可以看到每個(gè)小節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn)都是一樣的,我們要提取的是h3節(jié)點(diǎn)a里的房源信息,看圖三
python中xpath解析原理是什么
這里每個(gè) /li 節(jié)點(diǎn)里面的子節(jié)點(diǎn)都是一樣的,所以我們可以先找到所有的li節(jié)點(diǎn),再往下找我們想要的信息

python中xpath解析原理是什么

感謝各位的閱讀!關(guān)于“python中xpath解析原理是什么”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!


網(wǎng)站題目:python中xpath解析原理是什么
文章轉(zhuǎn)載:http://weahome.cn/article/johhoh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部