久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

python實(shí)例詳解之xpath解析

本篇文章給大家?guī)?lái)了關(guān)于python的相關(guān)知識(shí),其中主要介紹了xpath的相關(guān)問(wèn)題,XPath,全稱XML Path Language,即XML路徑語(yǔ)言,它是一門(mén)在XML文檔中查找信息的語(yǔ)言,希望對(duì)大家有幫助。

python實(shí)例詳解之xpath解析

推薦學(xué)習(xí):python教程

XPath,全稱XML Path Language,即XML路徑語(yǔ)言,它是一門(mén)在XML文檔中查找信息的語(yǔ)言,它最初是用來(lái)搜尋XML文檔的,但是它同樣適用于HTML文檔的搜索

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

xpath解析原理:

  • 實(shí)現(xiàn)標(biāo)簽的定位:實(shí)例化一個(gè)etree的對(duì)象,且需要將被解析的頁(yè)面源碼數(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è)解析庫(kù),支持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)開(kāi)始定位。表示的是一個(gè)層級(jí)。
// 表示的是多個(gè)層級(jí)。可以表示從任意位置開(kāi)始定位。
. 選取當(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的文檔

<html lang="en"><head> 	<meta charset="UTF-8" /> 	<title>測(cè)試bs4</title></head><body> 	<p> 		<p>百里守約</p> 	</p> 	<p class="song"> 		<p>李清照</p> 		<p>王安石</p> 		<p>蘇軾</p> 		<p>柳宗元</p> 		<a href="http://www.song.com/" title="趙匡胤" target="_self"> 			<span>this is span</span> 		宋朝是最強(qiáng)大的王朝,不是軍隊(duì)的強(qiáng)大,而是經(jīng)濟(jì)很強(qiáng)大,國(guó)民都很有錢(qián)</a> 		<a href="" class="du">總為浮云能蔽日,長(zhǎng)安不見(jiàn)使人愁</a> 		<img src="http://www.baidu.com/meinv.jpg" alt="" /> 	</p> 	<p class="tang"> 		<ul> 			<li><a href="http://www.baidu.com" title="qing">清明時(shí)節(jié)雨紛紛,路上行人欲斷魂,借問(wèn)酒家何處有,牧童遙指杏花村</a></li> 			<li><a href="http://www.163.com" title="qin">秦時(shí)明月漢時(shí)關(guān),萬(wàn)里長(zhǎng)征人未還,但使龍城飛將在,不教胡馬度陰山</a></li> 			<li><a href="http://www.126.com" alt="qi">岐王宅里尋常見(jiàn),崔九堂前幾度聞,正是江南好風(fēng)景,落花時(shí)節(jié)又逢君</a></li> 			<li><a href="http://www.sina.com" class="du">杜甫</a></li> 			<li><a href="http://www.dudu.com" class="du">杜牧</a></li> 			<li><b>杜小月</b></li> 			<li><i>度蜜月</i></li> 			<li><a href="http://www.haha.com" id="feng">鳳凰臺(tái)上鳳凰游,鳳去臺(tái)空江自流,吳宮花草埋幽徑,晉代衣冠成古丘</a></li> 		</ul> 	</p></body></html>

從瀏覽器中打開(kāi)是這樣的
python實(shí)例詳解之xpath解析
為了方便直觀,我們對(duì)寫(xiě)個(gè)HTML文件進(jìn)行本地讀取進(jìn)行測(cè)試

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

先來(lái)看子節(jié)點(diǎn)和子孫節(jié)點(diǎn),我們從上往下找p這個(gè)節(jié)點(diǎn),可以看到p的父節(jié)點(diǎn)是body,body父節(jié)點(diǎn)是html
python實(shí)例詳解之xpath解析
定位到這個(gè)HTML的p對(duì)象中,看上面html源碼,可以知道有三個(gè)p對(duì)象
python實(shí)例詳解之xpath解析python實(shí)例詳解之xpath解析python實(shí)例詳解之xpath解析
我們通過(guò)三種不同的方法來(lái)輸出這個(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)來(lái)找到這個(gè)p節(jié)點(diǎn)的對(duì)象r3=tree.xpath('//p')##跳躍上面所有節(jié)點(diǎn)來(lái)尋找p節(jié)點(diǎn)的對(duì)象r1,r2,r3>>([<Element p at 0x19d44765108>,   <Element p at 0x19d447658c8>,   <Element p at 0x19d44765588>],     [<Element p at 0x19d44765108>,   <Element p at 0x19d447658c8>,   <Element p at 0x19d44765588>],     [<Element p at 0x19d44765108>,   <Element p at 0x19d447658c8>,   <Element p at 0x19d44765588>])

屬性定位

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

r4=tree.xpath('//p[@class="song"]')r4>>>[<Element p at 0x19d447658c8>]

索引定位

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

tree.xpath('//p[@class="song"]/p')>>[<Element p at 0x19d4469a648>,  <Element p at 0x19d4469a4c8>,  <Element p at 0x19d4469af88>,  <Element p at 0x19d4469a148>]

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

tree.xpath('//p[@class="song"]/p[3]')[<Element p at 0x19d4469af88>]

取文本

比如我想取杜牧這個(gè)文本內(nèi)容
python實(shí)例詳解之xpath解析
和上面一樣,我們要定位到杜牧的這個(gè)a標(biāo)簽,首先要找到他的上一級(jí) li ,這是第五個(gè) li 里面的a所以就有了下面的寫(xiě)法,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)簽下的文本提取出來(lái)。但要注意,這樣會(huì)把所有的li標(biāo)簽下面的文本提取出來(lái),有時(shí)候你并不想要的文本也會(huì)提取出來(lái),所以最好還是寫(xiě)詳細(xì)一點(diǎn),如具體到哪個(gè)p里的li。

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

取屬性

比如我想取下面這個(gè)屬性
python實(shí)例詳解之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']

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

#導(dǎo)入必要的庫(kù)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')#這里我們打開(kāi)一個(gè)58.txt文件來(lái)保存我們的信息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]/h2/a/text()')[0]     print(title+'n')     #把文件寫(xiě)入文件     fp.write(title+'n')fp.close()

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

python實(shí)例詳解之xpath解析

推薦學(xué)習(xí):python教程

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
久久婷婷av| 久久精品72免费观看| 国产高潮在线| 成人高清一区| а√天堂中文在线资源8| 国产在线日韩精品| 国产精品麻豆久久| 日本а中文在线天堂| 91tv亚洲精品香蕉国产一区| 成人羞羞视频播放网站| 亚洲国产专区校园欧美| 国产亚洲一区二区手机在线观看| 色综合www| 影院欧美亚洲| 亚洲精品观看| 国产精品videosex极品| 国产一区二区三区精品在线观看| 福利视频一区| 九九精品调教| 中国女人久久久| 亚洲精品影视| 欧美激情福利| 黑人精品一区| 好看的av在线不卡观看| 综合色一区二区| 国产精品激情电影| 伊人网在线播放| 99精品网站| 亚洲综合国产| 国产日韩免费| av亚洲一区二区三区| 国产精品毛片在线看| 天堂精品久久久久| 国产伊人久久| 激情91久久| 久久狠狠亚洲综合| 深夜福利视频一区二区| 在线看片不卡| 欧美在线看片| 日韩国产欧美一区二区| 麻豆亚洲精品| 免费观看亚洲天堂| 亚洲人成在线网站| 在线一区二区三区视频| 欧美激情99| 尤物tv在线精品| 色婷婷成人网| 正在播放日韩精品| 综合亚洲自拍| 91一区二区三区四区| 日韩制服丝袜先锋影音| 国产精品17p| 亚洲精品a级片| 国产免费久久| 亚洲欧美日韩高清在线| 国产免费av一区二区三区| 在线日韩中文| 欧美日韩夜夜| 亚洲午夜精品久久久久久app| 91精品一区| 欧美1区免费| 国产精品主播| 中文欧美日韩| 丰满少妇一区| 日韩欧美另类中文字幕| 日韩国产一区| 国产伦精品一区二区三区在线播放| 久久精品高清| 国产精品mm| 日韩影院免费视频| 九九精品调教| 美腿丝袜在线亚洲一区| 在线国产一区二区| 精品欠久久久中文字幕加勒比| 国产免费成人| 日韩在线看片| 欧美精品97| 亚洲日本在线观看视频| 欧美丝袜一区| 国产一区二区三区不卡av | 精品国产不卡| 亚洲区国产区| 国内精品99| 国产成人精品三级高清久久91| 亚洲2区在线| 久久要要av| 精品国产aⅴ| 国产剧情一区二区在线观看| 国产亚洲一级| 国产99精品| 精品视频自拍| 欧美另类中文字幕| 日韩精品一卡二卡三卡四卡无卡| 亚洲黄色中文字幕| 你懂的国产精品| 欧美日韩精品一区二区三区在线观看| 亚洲欧美高清| 欧美综合另类| 国产 日韩 欧美 综合 一区| 欧美日韩一区二区三区不卡视频| 狠狠干综合网| 久久中文字幕二区| 国产白浆在线免费观看| 欧美激情精品| 国产探花一区二区| 亚洲麻豆一区| 蜜桃一区二区三区在线观看| 亚洲精品网址| 亚洲福利免费| 欧洲一区二区三区精品| 狠狠久久伊人中文字幕| 国产精区一区二区| 日韩福利视频网| 亚洲va久久| 亚洲精品国产精品粉嫩| 欧美精品一区二区三区精品| 欧美日韩免费观看视频| 成人亚洲一区| 国产91在线播放精品| 国内精品麻豆美女在线播放视频| 国产毛片久久久| 国产麻豆精品| 国产精品久久久久久久久久妞妞 | 日韩深夜视频| 亚洲综合电影| 久久久9色精品国产一区二区三区| 手机在线电影一区| 免费日韩一区二区三区| 免费精品一区| 国际精品欧美精品| 日本黄色精品| 天堂а√在线最新版中文在线| 日韩av自拍| www成人在线视频| 精品在线99| 国产一级久久| 视频一区日韩| 国产亚洲欧美日韩在线观看一区二区 | 欧美日韩18| 国产精品任我爽爆在线播放 | 国产精品天堂蜜av在线播放| 国产精品一国产精品| 蜜桃久久久久| 福利一区二区三区视频在线观看| 特黄毛片在线观看| 欧美国产91| 午夜国产欧美理论在线播放| 先锋亚洲精品| 欧美日韩精品一区二区三区视频 | 婷婷精品在线观看| 欧美日韩中出| 国产在视频一区二区三区吞精| 91精品韩国| 欧美手机在线| 亚洲精品麻豆| 精品视频国内| 亚洲成人国产| 亚洲精品麻豆| 欧美精品1区| 另类中文字幕国产精品| 亚洲在线电影| 国产一卡不卡| 日韩欧美三级| 久久高清免费观看| 国产精品一国产精品| 成人看片网站| 香蕉久久一区| 黄色在线网站噜噜噜| 999久久久91| 五月激激激综合网色播| 美女高潮久久久| 99热精品久久| 日韩中文字幕无砖| 精品伊人久久久| 1000部精品久久久久久久久| 日本精品国产| 色网在线免费观看| 亚洲精品在线二区| 精品99久久| 午夜一区在线| 精品亚洲a∨| 首页亚洲欧美制服丝腿| 麻豆精品新av中文字幕| 99精品综合| 欧美亚洲二区| 亚洲国产一区二区在线观看| 久久精品999| 亚洲国产一区二区在线观看| 国产精品magnet| 午夜国产精品视频免费体验区| 国产精品九九| 久久国产88| 日韩国产综合| 欧美自拍一区| 欧美日韩精品一区二区视频| 日韩av不卡一区二区| 久久久夜精品| 麻豆精品在线观看| 久久不射中文字幕| 久久uomeier|