日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

lxml 和 XPah (爬虫)

發(fā)布時間:2025/3/19 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lxml 和 XPah (爬虫) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

lxml 和 XPah (爬蟲)

  • XPath 的基本語法規(guī)則
  • 獲取內(nèi)容
    • 集合的概念
  • 屬性匹配與獲取
  • 按序選擇節(jié)點(diǎn)

XPath 的基本語法規(guī)則

XPath 語法規(guī)則描述
nodename選取此節(jié)點(diǎn)的作用子節(jié)點(diǎn)
/從當(dāng)前節(jié)點(diǎn)選取直接子節(jié)點(diǎn)
//從當(dāng)前節(jié)點(diǎn)選取子孫節(jié)點(diǎn)
.選取當(dāng)前節(jié)點(diǎn)
選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)
@選取屬性

注意:

  • 通過X Path定位節(jié)點(diǎn)返回的是節(jié)點(diǎn)集合,即使只有一個節(jié)點(diǎn),返回的也是一個節(jié)點(diǎn)集合。

  • 使用XPath分析的HTML文檔并不一定是標(biāo)準(zhǔn)的,可以沒有像 <html>、<head>、<body> 這些節(jié)點(diǎn)。任何一段符合HTML語法標(biāo)準(zhǔn)的代碼都可以使用XPah進(jìn)行定位。

獲取內(nèi)容

  • 通過getroot方法獲得根節(jié)點(diǎn)
  • 通過get方法獲得節(jié)點(diǎn)屬性值,
  • 通過text方法屬性獲取節(jié)點(diǎn)內(nèi)容,通過索引的方式引用子節(jié)點(diǎn)。

如有一個下面的HTML

html = ''' <div> <ul> <li class="item1"><a href ="http:1">1</a><p>11</p></li> <li class="item2"><a href ="http:2">2</a></li> <li class="item3"><a href ="http:3">3</a></li> </ul> </div>

集合的概念

下面代碼:

from lxml import etree # 分析HTML代碼 tree = etree.HTML(html) # 使用 xpath 定位 aTags = tree.xpath("//li") print(aTags[0][0].text) # 對應(yīng)<a> print(aTags[0][1].text) # 對應(yīng)<p> print(aTags[1][0].text) # 輸出 1 11 2

.分析

  • //:由上面的語法規(guī)則,這個當(dāng)前節(jié)點(diǎn)指的是html這個整體,即文檔節(jié)點(diǎn)。所以這樣可以的到<div>、<ul>、<li>在內(nèi)的節(jié)點(diǎn)
  • li:是語法規(guī)則第一條,就是選取所有節(jié)點(diǎn)名為li
  • 之后返回是一個集合,因?yàn)樵谠摪噶兄杏腥齻€,所以可以想象成是一個二維集合。其中在li中的每一個標(biāo)簽一同構(gòu)成了一個二維數(shù)組

屬性匹配與獲取

比較常用的匹配就是根據(jù)屬性值來選取節(jié)點(diǎn)。引用屬性值需要在屬性名前面加@,如@class表示class屬性。

XPath 的過濾條件需要放到一對中括號([…])中,如'//a[@class="item1"]'表示過濾所以class屬性值為item1的<a>節(jié)點(diǎn)。如果不放在括號里,如‘//a/@href'表示獲取<a>節(jié)點(diǎn)的href屬性值。

如上面的例子我們要獲取第二個li 可以這樣寫:

aTags = tree.xpath("//li[@class='item2']")

按序選擇節(jié)點(diǎn)

在很多時候,在選中某些節(jié)點(diǎn)時,按一些屬性進(jìn)行匹配,可能同時有多個節(jié)點(diǎn)滿足條件,而只想得到其中的一個或幾個節(jié)點(diǎn)。

這時就要使用索引的方式獲取特定的節(jié)點(diǎn)。在X Path中使用索引的方式與 Python 中引用列表中元素的方式類似,都是在中括號中使用索引,

如上面的例子我們要獲取第二個li 也可以這樣寫:

aTags = tree.xpath("//li[2]")

注意:在這里下標(biāo)是從1開始的。

總結(jié)

以上是生活随笔為你收集整理的lxml 和 XPah (爬虫)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。