Python爬蟲雜記 - Xpath高級用法

xpath 高級用法

1. 匹配當前節(jié)點下的所有: .//
.   表示當前
//  表示當前標簽下的所有標簽
注: 要配合使用
2. 匹配某標簽的屬性值: /@屬性名稱
    這里以input里的value值為例:
    例:xpath(//input/@value)
3. 匹配多個路徑:|
    在一個xpath中寫的多個表達式用 | 分開绞绒, 每個表達式互不干擾葬荷。
    例:xpath("http://tr[6]/td[2]/text() | //tr[7]/td[2]/text()")
4.按屬性匹配:@
獲取所有id="test"的所有文本內(nèi)容
xpath('//*[@id="test"]//text()')
5. 匹配不包含某個屬性的標簽 not
    多用于表格中匹配中不包含表頭信息的數(shù)據(jù)
    例:xpath('//table/tr[not(@class="tbhead")]')
6. 匹配包含多個屬性的標簽: and
    匹配所有的tr中不包含 tbhead 屬性 和包含 head 的tr標簽
    xpath('//table/tr[not(@class="tbhead") and @class="head"]')
7. 匹配包含不同屬性的名稱相同的標簽: or
匹配包含class="speedbar" 或者 class="content-wrap" 的標簽
例:xpath('//div[@class="speedbar" or @class="content-wrap"]')
8. 將對象還原為字符串:etree.tostring()
將匹配到的對象渗柿,作為etree.tostring()的參數(shù)即可休吠,  注: 返回字符串
 
sObj = xml.xpath('//*[@id="test"]')[0] #使用xpath定位一個節(jié)點
 sStr = etree.tostring(sObj)
9.按軸(Axes)匹配
9.1 選取當前節(jié)點的所有子元素: child
獲取div下的tr的標簽
例:xpath('//div[@id="testid"]/child::tr/td/text()') # 感覺這種方法雞肋属韧, //div[@id="testid"]//tr/td 也可以實現(xiàn)
9.2 選取當前節(jié)點的所有屬性:attribute
獲取div標簽所有的屬性值
例: xpath('//div/attribute::*') # 感覺這種方法雞肋法瑟,//div/@* 同樣能實現(xiàn)
9.3 ancestor:父輩元素 / ancestor-or-self:父輩元素及當前元素
獲取父輩元素的div的所有屬性值系瓢, 在不好定位的情況下绵患,通過孩子標簽定位,這種方法可以用
xpath('//div[@id="test"]/ancestor::div/@*')
xpath('//div[@id="test"]/ancestor-or-self::div/@*')
9.4 descendant:后代 / descendant-or-self:后代及當前節(jié)點本身
獲取孩子元素的div的所有屬性值账胧,感覺雞肋
xpath('//div[@id="test"]/descendant::div/@*')
xpath('//div[@id="test"]/descendant-or-self::div/@*')
9.5 選取當前節(jié)點的所有命名空間節(jié)點:namespace
xpath('//div[@id="test"]/namespace::*')
9.6 定位:position
和通過下標定位一樣竞慢, 方法雞肋
xpath('//*[@id="test"]/ol/li[position()=2]/text()')
10.Xpath 函數(shù):
10.1統(tǒng)計數(shù)量:count
統(tǒng)計符合要求節(jié)點的數(shù)量,  注: 返回字符串
xpath('count(//tr[@info])')
10.2字符串拼接 :concat
統(tǒng)計出來的兩個內(nèi)容的字符串進行“ + ”處理治泥, 注: 返回字符串
xpath('concat(//li[@id="one"]/text(),//li[@id="three"]/text())')
10.3 解析當前節(jié)點下的字符:string
string()直解析匹配的第一個標簽的值筹煮,  注: 返回字符串
xpath('string(//tr)') 
10.4 獲取當前節(jié)點的節(jié)點名稱: local-name
返回當前屬性的節(jié)點名稱,  注: 返回字符串
xpath('local-name(//*[@id="test"])')
10.5 以指定的字符開頭:starts-with
starts-with定位屬性值以8開頭的li元素
xpath('//tr[starts-with(@code,"one")]/text()')
10.6 小于:<
匹配所有tr標簽屬性info小于200的內(nèi)容
xpath('//tr[@info<200]/text()')
11. 根據(jù)指定的文本內(nèi)容選擇
# 指定的文本內(nèi)容可以是文本內(nèi)容的部分居夹, 也可以是全部
//div[2]/ul/li[contains(text(), "指定的文本內(nèi)容")]/span/text()

注: 以上內(nèi)容败潦, 除標注外, 均返回列表W贾劫扒!

`總注: 在平常的xpath的使用中, 前8項的內(nèi)容已基本夠用狸膏, 使用時也應(yīng)該使用簡潔沟饥、易讀、高效的匹配式湾戳。其余兩項定位在較難的地方備選使用贤旷。切不可以為了追求高逼格, 刻意使用難懂難寫低效的匹配式砾脑。人生苦短...``

本人水平有限幼驶, 如有錯誤歡迎提出指正!如有參考拦止, 請注明出處O厍病!禁止抄襲汹族,遇抄必肛O羟蟆!顶瞒!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末夸政,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子榴徐,更是在濱河造成了極大的恐慌守问,老刑警劉巖匀归,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異耗帕,居然都是意外死亡穆端,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門仿便,熙熙樓的掌柜王于貴愁眉苦臉地迎上來体啰,“玉大人,你說我怎么就攤上這事嗽仪』挠拢” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵闻坚,是天一觀的道長沽翔。 經(jīng)常有香客問我,道長窿凤,這世上最難降的妖魔是什么仅偎? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮卷玉,結(jié)果婚禮上哨颂,老公的妹妹穿的比我還像新娘。我一直安慰自己相种,他們只是感情好,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布品姓。 她就那樣靜靜地躺著寝并,像睡著了一般。 火紅的嫁衣襯著肌膚如雪腹备。 梳的紋絲不亂的頭發(fā)上衬潦,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音植酥,去河邊找鬼镀岛。 笑死,一個胖子當著我的面吹牛友驮,可吹牛的內(nèi)容都是我干的漂羊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼卸留,長吁一口氣:“原來是場噩夢啊……” “哼走越!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起耻瑟,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤旨指,失蹤者是張志新(化名)和其女友劉穎赏酥,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谆构,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡裸扶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了搬素。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姓言。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蔗蹋,靈堂內(nèi)的尸體忽然破棺而出何荚,到底是詐尸還是另有隱情,我是刑警寧澤猪杭,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布餐塘,位于F島的核電站,受9級特大地震影響皂吮,放射性物質(zhì)發(fā)生泄漏戒傻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一蜂筹、第九天 我趴在偏房一處隱蔽的房頂上張望需纳。 院中可真熱鬧,春花似錦艺挪、人聲如沸不翩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽口蝠。三九已至,卻和暖如春津坑,著一層夾襖步出監(jiān)牢的瞬間妙蔗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工疆瑰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留眉反,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓穆役,卻偏偏與公主長得像寸五,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子孵睬,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容