国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

網(wǎng)頁數(shù)據(jù)的解析提?。╔Path的使用----lxml庫詳解)

這篇具有很好參考價(jià)值的文章主要介紹了網(wǎng)頁數(shù)據(jù)的解析提取(XPath的使用----lxml庫詳解)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

? ? ? ? 在提取網(wǎng)頁信息時(shí),最基礎(chǔ)的方法是使用正則表達(dá)式,但過程比較煩瑣且容易出錯(cuò)。對(duì)于網(wǎng)頁節(jié)點(diǎn)來說,可以定義id、class或其他屬性,而且節(jié)點(diǎn)之間還有層次關(guān)系,在網(wǎng)頁中可以通過XPath或CSS選擇器來定位一個(gè)或多個(gè)節(jié)點(diǎn)。那么,在解析頁面時(shí),利用XPath或CSS選擇器提取某個(gè)節(jié)點(diǎn),然后調(diào)用相應(yīng)方法獲取該節(jié)點(diǎn)的正文內(nèi)容或者屬性,就可以提取我們想要的任意信息了。

? ? ? ? 在Python中,如何實(shí)現(xiàn)上述操作呢?不用擔(dān)心,相關(guān)解析庫有非常多,其中比較強(qiáng)大的有l(wèi)xml、Beautiful Soup,parsel、pyquery等。此帖介紹使用lxml庫來定位網(wǎng)頁源代碼所需部分。(哇哦,Python也太強(qiáng)大了!又對(duì)Python深愛了一份?。。。?/p>

目錄

XPath的使用

1. XPath概覽

2. XPath常用規(guī)則

3.準(zhǔn)備工作

4.實(shí)例引入

5、所有節(jié)點(diǎn)

6.子節(jié)點(diǎn)

7.父節(jié)點(diǎn)

8、屬性匹配

?9、文本獲取

10.屬性獲取

11.屬性多值匹配

12.多屬性匹配

13.按序選擇


XPath的使用

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

所以在做爬蟲時(shí),我們完全可以使用XPath實(shí)現(xiàn)相應(yīng)的信息抽取。本節(jié)我們就介紹一下 XPath的基本用法。

1. XPath概覽

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

XPath于1999年11月16日成為 W3C標(biāo)準(zhǔn),它被設(shè)計(jì)出來, 供XSLT、XPointer以及其他XML解析軟件使用。

2. XPath常用規(guī)則

????????下表列舉了 XPath的幾個(gè)常用規(guī)則。

表 達(dá) 式

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)

@

選取屬性

????????這里列出了 XPath 的一個(gè)常用匹配規(guī)則,如下:

//title[@lang='eng']

????????它代表選擇所有名稱為 title,同時(shí)屬性 lang 的值為 eng的節(jié)點(diǎn)。后面會(huì)通過 Python 的 lxml庫, 利用XPath對(duì)HTML 進(jìn)行解析。

3.準(zhǔn)備工作

????????使用lxml庫之前,首先要確保其已安裝好??梢允褂?pip3 來安裝:

pip3 install 1xml

更詳細(xì)的安裝說明可以參考:https://setup.scrape.center/lxml

????????安裝完成后,就可以進(jìn)入接下來的學(xué)習(xí)了。

4.實(shí)例引入

????????下面通過實(shí)例感受一下使用XPath對(duì)網(wǎng)頁進(jìn)行解析的過程,相關(guān)代碼如下:

from lxml import etree
text = '''
<div>
    <ul>
    <li class="item-0"><a href="link1.html">first item</a></li>
    <li class="item-1"><a href="link2.html">second item</a></li>
    <li class="item-inactive"><a href="link3.html">third item</a></li>
    <li class="item-1"><a href="link4.html">fourth item</a></li>
    <li class="item-0"><a href="link5.html">fifth item</a>
    </ul>
</div>
'''
html =etree.HTML(text)
result = etree.tostring(html)
print(result.decode('utf-8'))

????????這里首先導(dǎo)入 lxml庫的etree模塊,然后聲明了一段HTML 文本,接著調(diào)用HTML 類進(jìn)行初始化,這樣就成功構(gòu)造了一個(gè) XPath 解析對(duì)象。此處需要注意一點(diǎn),HTML 文本中的最后一個(gè) li 節(jié)點(diǎn)是沒有閉合的, 而 etree模塊可以自動(dòng)修正 HTML 文本。之后調(diào)用tostring方法即可輸出修正后的 HTML 代碼,但是結(jié)果是 bytes類型。于是利用 decode?方法將其轉(zhuǎn)換成 str類型,結(jié)果如下:

text = '''
<div>
    <ul>
    <li class="item-0"><a href="link1.html">first item</a></li>
    <li class="item-1"><a href="link2.html">second item</a></li>
    <li class="item-inactive"><a href="link3.html">third item</a></li>
    <li class="item-1"><a href="link4.html">fourth item</a></li>
    <li class="item-0"><a href="link5.html">fifth item</a>
    </ul>
</div>
'''

????????可以看到,經(jīng)過處理之后的 li 節(jié)點(diǎn)標(biāo)簽得以補(bǔ)全,并且自動(dòng)添加了 body、html節(jié)點(diǎn)。另外,也可以不聲明,直接讀取文本文件。?首先要將HTML文本新建一個(gè)html程序,然后采用調(diào)用的方式

test.html文件代碼:(該html文本一定需要?jiǎng)?chuàng)建到與一下Python程序同一目錄下,后面都是基于此html代碼進(jìn)行分析)

text = '''
<div>
    <ul>
    <li class="item-0"><a href="link1. html">first item</a></li>
    <li class="item-1"><a href="link2. html">second item</a></li>
    <li class="item-inactive"><a href="link3. html">third item</a></li>
    <li class="item-1"><a href="link4. html">fourth item</a></li>
    <li class="item-0"><a href="link5. html">fifth item</a>
    </ul>
</div>
'''

Python代碼:

from lxml import etree
html = etree.parse('./test.html', etree.HTMLParser())
result = etree.tostring(html)
print(result.decode('utf-8'))

? ? ? ? ?此次輸出結(jié)果略有不同,多了一個(gè)DOCTYPE聲明,不過對(duì)解析無任何影響,結(jié)果如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>text = '''&#13;
</p><div>&#13;
    <ul>&#13;
    <li class="item-0"><a href="link1. html">first item</a></li>&#13;
    <li class="item-1"><a href="link2. html">second item</a></li>&#13;
    <li class="item-inactive"><a href="link3. html">third item</a></li>&#13;
    <li class="item-1"><a href="link4. html">fourth item</a></li>&#13;
    <li class="item-0"><a href="link5. html">fifth item</a>&#13;
    </li></ul>&#13;
</div>&#13;
'''</body></html>

5、所有節(jié)點(diǎn)

? ? ? ? 一般以//開頭的XPath規(guī)則,來選取所有符合要點(diǎn)的節(jié)點(diǎn)。這里還是以第一個(gè)實(shí)例中的HTML文本為例,選取其中所有節(jié)點(diǎn)。
Python代碼:

import pprint
from lxml import etree
html = etree.parse('./test.html', etree.HTMLParser())
result = html.xpath('//*')
pprint.pprint(result)

結(jié)果如下:

[<Element html at 0x2a9cf235280>,
 <Element body at 0x2a9cf4ea780>,
 <Element p at 0x2a9cf4ea7c0>,
 <Element div at 0x2a9cf4ea040>,
 <Element ul at 0x2a9cf4ea200>,
 <Element li at 0x2a9cf4ea680>,
 <Element a at 0x2a9cf4ea700>,
 <Element li at 0x2a9cf4ea740>,
 <Element a at 0x2a9cf4ea8c0>,
 <Element li at 0x2a9cf4ea540>,
 <Element a at 0x2a9cf4eaa40>,
 <Element li at 0x2a9cf4eaa00>,
 <Element a at 0x2a9cf4ea840>,
 <Element li at 0x2a9cf4eab80>,
 <Element a at 0x2a9cf4eabc0>]

????????這里使用*代表匹配所有節(jié)點(diǎn),也就是獲取整個(gè)HTML 文本中的所有節(jié)點(diǎn)。從運(yùn)行結(jié)果可以看到返回形式是一個(gè)列表,其中每個(gè)元素是Element類型,類型后面跟著節(jié)點(diǎn)的名稱,如html、body、div?ul、li、a等,所有節(jié)點(diǎn)都包含在了列表中。當(dāng)然,此處匹配也可以指定節(jié)點(diǎn)名稱。例如想獲取所有 li 節(jié)點(diǎn),實(shí)例如下:

import pprint
from lxml import etree
html = etree.parse('./test.html', etree.HTMLParser())
result = html.xpath('//li')
pprint.pprint(result)
pprint.pprint(result[0])

????????這里選取所有l(wèi)i 節(jié)點(diǎn),可以使用//,然后直接加上節(jié)點(diǎn)名稱,調(diào)用時(shí)使用xpath方法即可。

運(yùn)行結(jié)果如下:

[<Element li at 0x1c5211da700>,
 <Element li at 0x1c5211da740>,
 <Element li at 0x1c5211d9fc0>,
 <Element li at 0x1c5211da180>,
 <Element li at 0x1c5211da4c0>]
<Element li at 0x1c5211da700>

????????可以看到,提取結(jié)果也是一個(gè)列表,其中每個(gè)元素都是 Element類型。要是想取出其中一個(gè)對(duì)象可以直接用中括號(hào)加索引獲取,如[0]。

6.子節(jié)點(diǎn)

通過/ 或//即可查找元素的子節(jié)點(diǎn)或子孫節(jié)點(diǎn)。假如現(xiàn)在想選擇 li 節(jié)點(diǎn)的所有直接子節(jié)點(diǎn)a,可以這樣實(shí)現(xiàn):

import pprint
from lxml import etree
html = etree.parse('./test.html', etree.HTMLParser())
result = html.xpath('//li/a')
pprint.pprint(result)

? ? ? ? 這里通過追加/a的方式,選擇了li節(jié)點(diǎn)的所有直接子節(jié)點(diǎn)a。其中//li用于選中所有l(wèi)i節(jié)點(diǎn),/a用于選中l(wèi)i節(jié)點(diǎn)的所有直接子節(jié)點(diǎn)a。

運(yùn)行結(jié)果如下 :

[<Element a at 0x1c663e9a780>,
 <Element a at 0x1c663e9a7c0>,
 <Element a at 0x1c663e9a040>,
 <Element a at 0x1c663e9a200>,
 <Element a at 0x1c663e9a540>]

? ? ? ? 上面的/用于選取節(jié)點(diǎn)的直接子節(jié)點(diǎn),如果要獲取節(jié)點(diǎn)的所有孫子節(jié)點(diǎn),可以使用//。例如:要獲取ul節(jié)點(diǎn)下的所有子孫節(jié)點(diǎn)a,可以這樣實(shí)現(xiàn):

import pprint
from lxml import etree
html = etree.parse('./test.html', etree.HTMLParser())
result = html.xpath('//ul//a')
pprint.pprint(result)

????????運(yùn)行結(jié)果與上面相同。如果這里用//ul/a,就無法獲取結(jié)果了。因?yàn)?用于獲取直接子節(jié)點(diǎn),二ul節(jié)點(diǎn)下沒有直接的a子節(jié)點(diǎn),只有l(wèi)i子節(jié)點(diǎn)。因此要注意/和//的區(qū)別,前者用于獲取直接子節(jié)點(diǎn),后者用于獲取子孫節(jié)點(diǎn)。

7.父節(jié)點(diǎn)

????????通過連續(xù)的 /或 //可以查找子節(jié)點(diǎn)或子孫節(jié)點(diǎn),那么假如知道了子節(jié)點(diǎn),怎樣查找父節(jié)點(diǎn)呢?這可以用..實(shí)現(xiàn)。例如, 首先選中 href屬性為 link4. html的a節(jié)點(diǎn), 然后獲取其父節(jié)點(diǎn),再獲取父節(jié)點(diǎn)的 class 屬性,相關(guān)代碼如下:

import pprint
from lxml import etree
html = etree.parse('./test.html', etree.HTMLParser())
result = html.xpath('//a[@href="link4.html"]/../@class')
pprint.pprint(result)

運(yùn)行結(jié)果如下:

['item-1']

????????檢查一下結(jié)果發(fā)現(xiàn),這正是我們獲取的目標(biāo)li節(jié)點(diǎn)的 class 屬性。

也可以通過 parent::獲取父節(jié)點(diǎn),代碼如下:

import pprint
from lxml import etree
html = etree.parse('./test.html', etree.HTMLParser())
result = html.xpath('//a[@href="link4.html"]/parent::*/@class')
pprint.pprint(result)

8、屬性匹配

? ? ? ? 在選取節(jié)點(diǎn)的時(shí)候,還可以使用@符號(hào)實(shí)現(xiàn)屬性過濾。例如,要選取class屬性為item-0的li節(jié)點(diǎn),可以這樣實(shí)現(xiàn):

import pprint
from lxml import etree
html = etree.parse('./test.html', etree.HTMLParser())
result = html.xpath('//li[@class="item-0"]')
pprint.pprint(result)

結(jié)果如下:

[<Element li at 0x1cf3f68a7c0>, <Element li at 0x1cf3f68a040>]

?9、文本獲取

? ? ? ? 用XPath中的text方法可以獲取節(jié)點(diǎn)中的文本,接下來嘗試獲取前面li節(jié)點(diǎn)中的文本,代碼如下:

import pprint
from lxml import etree
html = etree.parse('./test.html', etree.HTMLParser())
result = html.xpath('//li[@class="item-0"]/text()')
pprint.pprint(result)

結(jié)果如下:

['\r\n    ']

????????奇怪的是,我們沒有獲取任何文本,只獲取了一個(gè)換行符,這是為什么呢? 因?yàn)閤path中text方法的前面是/,而/的含義是選取直接子節(jié)點(diǎn),很明顯li的直接子節(jié)點(diǎn)都是 a 節(jié)點(diǎn),文本都是在 a節(jié)點(diǎn)內(nèi)部的,所以這里匹配到的結(jié)果就是被修正的 li 節(jié)點(diǎn)內(nèi)部的換行符,因?yàn)樽詣?dòng)修正的 li 節(jié)點(diǎn)的尾標(biāo)簽換行了。

即選中的是這兩個(gè)節(jié)點(diǎn):

<li class="item-0"><a href="link1.html">first item</a></li>
 <li class="item-0"><a href="link5.html">fifth item</a>

????????其中一個(gè)節(jié)點(diǎn)因?yàn)樽詣?dòng)修正,li 節(jié)點(diǎn)的尾標(biāo)簽在添加的時(shí)候換行了,所以提取文本得到的唯一結(jié)果就是 li節(jié)點(diǎn)的尾標(biāo)簽和a節(jié)點(diǎn)的尾標(biāo)簽之間的換行符。因此,如果想獲取 li 節(jié)點(diǎn)內(nèi)部的文本,就有兩種方式,一種是先選取 a 節(jié)點(diǎn)再獲取文本,另一種是使用//。接下來,我們看下兩種方式的區(qū)別。

先選取a節(jié)點(diǎn),再獲取文本的代碼如下:

import pprint
from lxml import etree
html = etree.parse('./test.html', etree.HTMLParser())
result = html.xpath('//li[@class="item-0"]/a/text()')
pprint.pprint(result)

結(jié)果如下:

['first item', 'fifth item']

????????可以看到,這里有兩個(gè)返回值,內(nèi)容都是 class 屬性為 item-0 的 1i 節(jié)點(diǎn)的文本,這也印證了前面屬性匹配的結(jié)果是正確的。這種方式下,我們是逐層選取的,先選取li節(jié)點(diǎn),然后利用/選取其直接子節(jié)點(diǎn)a,再選取節(jié)點(diǎn)a的文本,得到的兩個(gè)結(jié)果恰好是符合我們預(yù)期的。這種方式下,我們是逐層選取的,先選li節(jié)點(diǎn),然后利用/選取其直接子節(jié)點(diǎn)a,再選取節(jié)點(diǎn)a 的文本,得到的兩個(gè)結(jié)果恰好是符合我們預(yù)期的。再來看一下使用//能夠獲取什么樣的結(jié)果,代碼如下:

import pprint
from lxml import etree
html = etree.parse('./test.html', etree.HTMLParser())
result = html.xpath('//li[@class="item-0"]//text()')
pprint.pprint(result)

運(yùn)行結(jié)果如下:

['first item', 'fifth item', '\r\n    ']

????????不出所料,這里的返回結(jié)果是三個(gè)??上攵?,這里選取的是所有子孫節(jié)點(diǎn)的文本,其中前兩個(gè)是 li 的子節(jié)點(diǎn) a 內(nèi)部的文本,另外一個(gè)是最后一個(gè) li 節(jié)點(diǎn)內(nèi)部的文本,即換行符。由此,要想獲取子孫節(jié)點(diǎn)內(nèi)部的所有文本,可以直接使用//加text 方法的方式,這樣能夠保證獲取最全面的文本信息,但是可能會(huì)夾雜一些換行符等特殊字符。如果想獲取某些特定子孫節(jié)點(diǎn)下的所有文本,則可以先選取特定的子孫節(jié)點(diǎn),再調(diào)用 text方法獲取其內(nèi)部的文本,這樣可以保證獲取的結(jié)果是整潔的。

10.屬性獲取

????????我們已經(jīng)可以用text方法獲取節(jié)點(diǎn)內(nèi)部文本,那么節(jié)點(diǎn)屬性該怎樣獲取呢? 其實(shí)依然可以用@符號(hào)。例如,通過如下代碼獲取所有 li 節(jié)點(diǎn)下所有 a 節(jié)點(diǎn)的 href屬性:

import pprint
from lxml import etree
html = etree.parse('./test.html', etree.HTMLParser())
result = html.xpath('//li/a/@href')
pprint.pprint(result)

????????這里通過@href獲取節(jié)點(diǎn)的 href屬性。注意,此處和屬性匹配的方法不同,屬性匹配是用中括號(hào)加屬性名和值來限定某個(gè)屬性, 如[@href="link1.html"], 此處的@href是指獲取節(jié)點(diǎn)的某個(gè)屬性,二者需要做好區(qū)分。結(jié)果如下:

['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']

?????????可以看到,我們成功獲取了所有 li 節(jié)點(diǎn)下 a 節(jié)點(diǎn)的 href 屬性,并以列表形式返回了它們。

11.屬性多值匹配

????????有時(shí)候,某些節(jié)點(diǎn)的某個(gè)屬性可能有多個(gè)值,例如:

from lxml import etree
text= '''
<li class="li li-first"><a href="link. html">first item</a></li>
'''
html= etree. HTML(text)
result = html.xpath('//li[@class="li"]/a/text()')
print(result)

這里?HTML?文本中?li?節(jié)點(diǎn)的?class?屬性就有兩個(gè)值:?li?和li-first。此時(shí)如果還用之前的屬性匹配獲取節(jié)點(diǎn),?就無法進(jìn)行了,?運(yùn)行結(jié)果如下:

[]

????????這種情況需要用到?contains?方法,?于是代碼可以改寫如下:

from lxml import etree
text= '''
<li class="li li-first"><a href="link. html">first item</a></li>
'''
html= etree. HTML(text)
result = html.xpath('//li[contains(@class,"li")]/a/text()')
print(result)

? ? ? ? 上面使用了contains方法,給其第一個(gè)參數(shù)傳入屬性名稱,第二個(gè)參數(shù)傳入屬性值,只要傳入的屬性包含傳入的屬性值,就可以完成匹配。

運(yùn)行結(jié)果為:

['first item']

? ? ? ? contains方法經(jīng)常在某個(gè)節(jié)點(diǎn)的某個(gè)屬性有多個(gè)值用到。

12.多屬性匹配

? ? ? ? 我們還可能遇到一種情況,?就是根據(jù)多個(gè)屬性確定一個(gè)節(jié)點(diǎn),?這時(shí)需要同時(shí)匹配多個(gè)屬性。運(yùn)算符and用于連接多個(gè)屬性,?實(shí)例如下:

from lxml import etree

text = '''
<li class="li li-first" name="item"><a href="link.html">first item</a></li>
'''
html = etree.HTML(text)
result = html.xpath('//li[contains(@class,"li") and @name="item"]/a/text()')
print(result)

????????這里的?li?節(jié)點(diǎn)又增加了一個(gè)屬性name。因此要確定?li?節(jié)點(diǎn),?需要同時(shí)考察?class?和?name?屬性,一個(gè)條件是class?屬性里面包含li字符串,?另一個(gè)條件是?name?屬性為item字符串,?這二者同時(shí)得到滿足,?才是?li?節(jié)點(diǎn)。class?和?name?屬性需要用?and?運(yùn)算符相連,?相連之后置于中括號(hào)內(nèi)進(jìn)行條件篩選。運(yùn)行結(jié)果如下:

['first item']

????????這里的 and其實(shí)是 XPath中的運(yùn)算符。除了它,還有很多其他運(yùn)算符,如or、mod等,在此總結(jié)為下表。

運(yùn)??

描述

實(shí)例

返 回 值

or

age=19 or age=20

如果 age 是 19, 則返回true。

and

age>19 and age<21

如果 age 是 20, 則返回true。如果age 是18, 則返回false

mod

計(jì)算除法的余數(shù)

5 mod 2

1

|

計(jì)算兩個(gè)節(jié)點(diǎn)集

//book|//cd

返回所有擁有 book 和cd元素的節(jié)點(diǎn)集

+

加法

6 + 4

10

-

減法

6 - 4

2

*

乘法

6

* 4

24

div

除法

8 div

4

2

=

等于

age=19

如果 age 是 19, 則返回true。

!=

不等于

age!=19

如果 age 是 18, 則返回true。如果age 是 19, 則返回false

<

小于

age<19

如果 age 是 18, 則返回 true。如果age 是 19, 則返回 false

<=

小于或等于

<=19

如果 age 是 19, 則返回 true。如果age 是 20, 則返回false

>

大于

age>19

如果 age 是 20, 則返回true。如果age 是 19, 則返回 false

>=

大于或等于

age>=19

如果age 是 19, 則返回true。如果age 是18, 則返回false

13.按序選擇

? ? ? ? 在選擇節(jié)點(diǎn)時(shí),?某些屬性可能同時(shí)匹配了多個(gè)節(jié)點(diǎn),?但我們只想要其中的某一個(gè),如第二個(gè)或者最后一個(gè),?這時(shí)該怎么辦呢?可以使用往中括號(hào)中傳入索引的方法獲取特定次序的節(jié)點(diǎn),?實(shí)例如下:

from lxml import etree
text= '''
<div>
<ul>
    <li class="item-0"><a href="link1.html">first item</a></li>
    <li class="item-1">< a href="link2.html">second item</a></li>
    <li class="item-inactive"><a href="link3.html">third item</a></li>
    <li class="item-1">< a href="link4.html">fourth item</a></li>
    <li class="item-0"><a href="link5.html">fifth item</a>
</ul>
</div>
'''
html= etree. HTML(text)
result = html.xpath('//li[1]/a/text()')
print(result)
result = html.xpath('//li[last()]/a/text()')
print(result)
result = html.xpath('//li[position()<3]/a/text()')
print(result)
result = html.xpath('//li[last()-2]/a/text()')
print(result)

????????上述代碼中,?第一次選擇時(shí)選取了第一個(gè)?li?節(jié)點(diǎn),?往中括號(hào)中傳入數(shù)字1?即可實(shí)現(xiàn)。注意,這里和寫代碼不同,?序號(hào)以1開頭,?而非0。第二次選擇時(shí),?選取了最后一個(gè)?li?節(jié)點(diǎn),?在中括號(hào)中調(diào)用last?方法即可實(shí)現(xiàn)。第三次選擇時(shí),?選取了位置小于3?的?li?節(jié)點(diǎn),?也就是位置序號(hào)為1?和2?的節(jié)點(diǎn),?得到的結(jié)果就是前兩個(gè)?li節(jié)點(diǎn)。第四次選擇時(shí),?選取了倒數(shù)第三個(gè)?li?節(jié)點(diǎn),?在中括號(hào)中調(diào)用last?方法再減去2即可實(shí)現(xiàn)。因?yàn)閘ast?方法代表最后一個(gè),?在此基礎(chǔ)上減2?得到的就是倒數(shù)第三個(gè)。
運(yùn)行結(jié)果如下:

['first item']
['fifth item']
['first item',?'second item']
['third item']

????????在這個(gè)實(shí)例中,?我們使用了?last、position等方法。XPath?提供了?100多個(gè)方法,?包括存取、數(shù)值、字符串、邏輯、節(jié)點(diǎn)、序列等處理功能。

? ? ? ? XPath還有一個(gè)節(jié)點(diǎn)軸的選擇方法,但由于很少使用,故在此不在介紹?。?!

注:今天,又是深愛Python的一天?。。?/strong>文章來源地址http://www.zghlxwxcb.cn/news/detail-834903.html

到了這里,關(guān)于網(wǎng)頁數(shù)據(jù)的解析提?。╔Path的使用----lxml庫詳解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • python---------xpath提取數(shù)據(jù)------打破局限

    python---------xpath提取數(shù)據(jù)------打破局限

    ?歡迎小可愛們前來借鑒我的gtiee秦老大大 (qin-laoda) - Gitee.com 為什么要學(xué)習(xí)XPATH和LXML類庫 什么是XPATH 認(rèn)識(shí)XML XML的節(jié)點(diǎn)關(guān)系 常?節(jié)點(diǎn)選擇?具 節(jié)點(diǎn)選擇語法 節(jié)點(diǎn)修飾語法 選擇未知節(jié)點(diǎn) lxml庫 _____________________________________________________________ 可以利? Xpath 來快速的定位特定元素

    2024年02月09日
    瀏覽(18)
  • XPath:學(xué)習(xí)使用XPath語法提取HTML/XML文檔中的數(shù)據(jù)使用語法

    以下是一些XPath語法示例,用于提取HTML/XML文檔中的數(shù)據(jù): 選擇元素: 選擇所有p元素: //p 選擇根元素: / 屬性匹配: 選擇class屬性為\\\"example\\\"的div元素: //div[@class=\\\'example\\\'] 文本內(nèi)容提?。?提取所有a元素的文本內(nèi)容: //a/text() 提取第一個(gè)p元素的文本內(nèi)容: //p[1]/text() 使用邏輯

    2024年02月11日
    瀏覽(29)
  • 超實(shí)用的 Python 庫之lxml使用詳解

    超實(shí)用的 Python 庫之lxml使用詳解

    XML(可擴(kuò)展標(biāo)記語言)和HTML(超文本標(biāo)記語言)是廣泛用于數(shù)據(jù)交換和網(wǎng)頁構(gòu)建的標(biāo)記語言。在Python中,有許多庫可以用來解析和處理XML和HTML文檔,其中最強(qiáng)大和常用的之一是lxml。lxml是一個(gè)高性能、功能豐富的庫,它提供了強(qiáng)大的XML和HTML處理功能。本文將深入介紹Python

    2024年02月03日
    瀏覽(24)
  • Python beautifulsoup4解析 數(shù)據(jù)提取 基本使用

    Beautiful Soup是Python的一個(gè)網(wǎng)頁解析庫,處理快捷; 支持多種解析器,功能強(qiáng)大。教程細(xì)致講解Beautiful Soup的深入使用、節(jié)點(diǎn)選擇器、CSS選擇器、Beautiful Soup4的方法選擇器等重要知識(shí)點(diǎn),是學(xué)好爬蟲的基礎(chǔ)課程。 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 建議把代碼復(fù)

    2023年04月08日
    瀏覽(17)
  • python爬蟲數(shù)據(jù)解析xpath

    python爬蟲數(shù)據(jù)解析xpath

    下載地址:百度網(wǎng)盤 請(qǐng)輸入提取碼 第一步: 下載好文件后會(huì)得到一個(gè)沒有擴(kuò)展名的文件,重命名該文件將其改為.rar或者.zip等壓縮文件,解壓之后會(huì)得到一個(gè).crx文件和一個(gè).pem文件。新建一個(gè)文件夾,將這兩個(gè)文件放在該文件夾(本人將其命名為xpath-helper)內(nèi)。 第二步: 將

    2024年02月10日
    瀏覽(16)
  • lxml&xpath一站式教學(xué)

    lxml&xpath一站式教學(xué)

    XPath 是一門在 XML 文檔中查找信息的語言。XPath 可用來在 XML 文檔中對(duì)元素和屬性進(jìn)行遍歷。它最初是用來搜尋 XML 文檔的,現(xiàn)在它同樣適用于 HTML 文檔的搜索 XPath 的選擇功能十分強(qiáng)大,它提供了非常簡(jiǎn)潔明了的路徑選擇表達(dá)式 。 另外,它還提供了超過100 個(gè)內(nèi)建函數(shù),用于字

    2023年04月21日
    瀏覽(33)
  • Python爬蟲——解析插件xpath的安裝及使用

    Python爬蟲——解析插件xpath的安裝及使用

    目錄 1.安裝xpath 2.安裝lxml的庫 3.xpath基本語法 4.案例一:獲取百度網(wǎng)站的百度一下字樣 5.案例二:爬取站長(zhǎng)素材網(wǎng)上的前十頁照片 打開谷歌瀏覽器 --?點(diǎn)擊右上角小圓點(diǎn) --?更多工具 --?擴(kuò)展程序 ?下載xpath壓縮包,下載地址:阿里云盤分享 把壓縮包解壓到指定目錄 --?選擇加

    2024年02月02日
    瀏覽(26)
  • python爬蟲數(shù)據(jù)解析xpath、jsonpath,bs4

    python爬蟲數(shù)據(jù)解析xpath、jsonpath,bs4

    解析數(shù)據(jù)的方式大概有三種 xpath JsonPath BeautifulSoup 打開谷歌瀏覽器擴(kuò)展程序,打開開發(fā)者模式,拖入插件,重啟瀏覽器,ctrl+shift+x,打開插件頁面 安裝在python環(huán)境中的Scripts下邊,這里就是python庫的位置,例如我的地址為:E:pythonpython3.10.11Scripts 解析本地文件etree.parse( \\\'xx.

    2024年02月13日
    瀏覽(36)
  • Python使用XPath解析HTML:從入門到精通

    Python使用XPath解析HTML:從入門到精通

    XPath是一種用于選擇XML文檔中節(jié)點(diǎn)的語言,它可以通過路徑表達(dá)式來定位節(jié)點(diǎn)。由于HTML文檔的結(jié)構(gòu)與XML文檔類似,XPath也可以用于解析HTML文檔。Python是一種非常流行的編程語言,它提供了許多庫用于解析HTML文檔。本文將介紹Python中使用XPath解析HTML文檔的方法和技巧。 XPath表達(dá)

    2024年02月03日
    瀏覽(24)
  • Python網(wǎng)絡(luò)爬蟲庫:輕松提取網(wǎng)頁數(shù)據(jù)的利器

    Python網(wǎng)絡(luò)爬蟲庫:輕松提取網(wǎng)頁數(shù)據(jù)的利器

    ? ? ? 網(wǎng)絡(luò)爬蟲是一種自動(dòng)化程序,它可以通過訪問網(wǎng)頁并提取所需的數(shù)據(jù)。Python是一種流行的編程語言,擁有許多強(qiáng)大的網(wǎng)絡(luò)爬蟲庫。在本文中,我們將介紹幾個(gè)常用的Python網(wǎng)絡(luò)爬蟲庫以及它們的使用。 Requests庫 Requests是一個(gè)簡(jiǎn)單而優(yōu)雅的HTTP庫,可以輕松地發(fā)送HTTP請(qǐng)求。

    2024年02月09日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包