Python自學 爬蟲(4)xpath

2022-01-16 03:50:49 字數 4118 閱讀 5414

pip install lxml

獲取根目錄下的html標籤物件:

import

requests

from lxml import

etree

res = requests.get("

")html = etree.html(res.content.decode('

utf-8'))

html_data = html.xpath('

/html

') #

獲取根目錄下的html標籤

print(html_data) #

是乙個列表,包含乙個html標籤物件

表示式描述

nodename

選取此節點的所有子節點。

/從根節點擊取。

//從匹配選擇的當前節點擊擇文件中的節點,而不考慮它們的位置。

.選取當前節點。

..選取當前節點的父節點。

@選取屬性。

例子:

html_data = html.xpath('

/html

') #

選擇根目錄下的html標籤

html_data = html.xpath('

/html/body

') #

選擇html標籤下的body標籤

html_data = html.xpath('

//div

') #

選擇所有div標籤(不關心位置)

html_data = html.xpath('

/html//div

') #

選擇html標籤下的所有div標籤(不關心位置)

html_data = html.xpath('

//@src

') #

選擇所有src屬性的值

注意,返回的結果都是列表,要注意判斷列表中元素的個數是否為0。

路徑表示式

結果/bookstore/book[1]

選取屬於 bookstore 子元素的第乙個 book 元素。

/bookstore/book[last()]

選取屬於 bookstore 子元素的最後乙個 book 元素。

/bookstore/book[last()-1]

選取屬於 bookstore 子元素的倒數第二個 book 元素。

/bookstore/book[position()<3]

選取最前面的兩個屬於 bookstore 元素的子元素的 book 元素。

//title[@lang]

選取所有擁有名為 lang 的屬性的 title 元素。

//title[@lang='eng']

選取所有 title 元素,且這些元素擁有值為 eng 的 lang 屬性。

/bookstore/book[price>35.00]

選取 bookstore 元素的所有 book 元素,且其中的 price 元素的值須大於 35.00。

/bookstore/book[price>35.00]//title

選取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值須大於 35.00。

例子:

html_data = html.xpath('

/html/body/div[1]

') #

獲取body標籤下子標籤中第乙個div標籤(注意index從1開始)

html_data = html.xpath('

/html/body/div[last()]

') #

獲取body標籤下子標籤中最後乙個div標籤

html_data = html.xpath('

/html/body/div[last()-1]

') #

獲取body標籤下子標籤中倒數第二個div標籤

html_data = html.xpath('

/html/body/div[position()<3]

') #

獲取body標籤下子標籤中idx小於3的兩個div標籤

html_data = html.xpath('

/html/body/div[@class]

') #

獲取body標籤下子標籤中所有擁有class屬性的div標籤

html_data = html.xpath('

') #

萬用字元描述

*匹配任何元素節點。

@*匹配任何屬性節點。

node()

匹配任何型別的節點。

路徑表示式

結果/bookstore/*

選取 bookstore 元素的所有子元素。

//*選取文件中的所有元素。

//title[@*]

選取所有帶有屬性的 title 元素。

路徑表示式

結果//book/title | //book/price

選取 book 元素的所有 title 和 price 元素。

//title | //price

選取文件中的所有 title 和 price 元素。

/bookstore/book/title | //price

選取屬於 bookstore 元素的 book 元素的所有 title 元素,以及文件中所有的 price 元素。

軸可定義相對於當前節點的節點集。

軸名稱結果

ancestor

選取當前節點的所有先輩(父、祖父等)。

ancestor-or-self

選取當前節點的所有先輩(父、祖父等)以及當前節點本身。

attribute

選取當前節點的所有屬性。

child

選取當前節點的所有子元素。

descendant

選取當前節點的所有後代元素(子、孫等)。

descendant-or-self

選取當前節點的所有後代元素(子、孫等)以及當前節點本身。

following

選取文件中當前節點的結束標籤之後的所有節點。

following-sibling

選取當前節點之後的所有兄弟節點

namespace

選取當前節點的所有命名空間節點。

parent

選取當前節點的父節點。

preceding

選取文件中當前節點的開始標籤之前的所有節點。

preceding-sibling

選取當前節點之前的所有同級節點。

self

選取當前節點。

xpath中的軸是跟在"/"後的乙個表述字元,預設的"/"相當於"/child":

/html/body/div

#相當於

/html/body/child::div

我們預設使用"/"獲取的都是子節點。也可以使用其他的軸來獲取不同關係的節點。例如:

html_data = html.xpath('

/html/body/div/ancestor::*

') #

獲取/html/body/div節點的所有先輩節點,[, ]

html_data = html.xpath('

/html/body/div/ancestor-or-self::*

') #

獲取/html/body/div節點的所有先輩節點以及自己(這裡有3個div)

#[, , , , ]

其他軸的使用方法以此類推。

html_data = html.xpath('

//div[starts-with(@class,"international")]

') #

class屬性以international開頭

html_data = html.xpath('

') #

html_data = html.xpath('

') #

在使用這些字串處理函式時,要注意支援的xpath版本,有可能這些函式會報錯,例如python在使用lxml時,ends-with不工作。

Python自學爬蟲

解除安裝前面 這是乙個半自動爬蟲,也就是手動的比較多 也是個人學習效果展示 如果對看到的人有幫助 那再好不過了 匯入正規表示式模組和csv模組 import re import csv 讀取檔案 with open source.txt r encoding gbk as f all str f.r...

杭州自學python爬蟲 自學PYTHON爬蟲

response urllib2.urlopen urlopen url,data,timeout 第乙個引數url即為url,第二個引數data是訪問url時要傳送的資料,第三個timeout是設定超時時間。第二三個引數是可以不傳送的,data預設為空none,timeout預設為 socket....

python免費自學爬蟲 python爬蟲學習

近日,學習爬蟲基礎,自己寫了乙個小指令碼。目標 每天晚上定時傳送第二天的工作專案到qq郵箱。目的 頭天晚上得到第二天的工作計畫,好決定頭天晚上是否能喝酒過量 是否能麻將通宵等等等等。哈哈!思路 1 從停電申請系統,統計出第二日的工作專案。2 每天晚上定時傳送該專案到qq郵箱。要解決的主要問題 1 從...