爬蟲之xpath選擇器的使用

2022-09-16 16:09:12 字數 3199 閱讀 7022

xpath 是一門在 xml 文件中查詢資訊的語言。

#

xpath: xpath 是一門在 xml 文件中查詢資訊的語言

#/ :從根節點擊取。

#// :不管位置,直接找

#/@屬性名

#/text()

#會複製()

#

pip3 install lxml

doc = '''

name: my image 1

name: my image 2

name: my image 3

name: my image 4

name: my image 5

test

name: my image 6

'''from lxml import

etree

html =etree.html(doc)

#html=etree.parse('search.html',etree.htmlparser())

#1 所有節點

#a=html.xpath('//*') # 乙個物件列表

#2 指定節點(結果為列表)

#a=html.xpath('//head')

#3 子節點,子孫節點

#a = html.xpath('//div/a')

#a = html.xpath('//body/a') # 無資料

#a = html.xpath('//body//a')

#4 父節點(..表示父節點)

#a = html.xpath('//body//a[@href="image1.html"]/..')

#a = html.xpath('//body//a[1]/..')

#也可以這樣

#a = html.xpath('//body//a[1]/parent::*')

#5 屬性匹配

#a = html.xpath('//body//a[@href="image1.html"]')

#6 文字獲取(重要) /text() 取當前標籤的文字

#a = html.xpath('//body//a[@href="image1.html"]/text()')

#a = html.xpath('//body//a/text()')

#7 屬性獲取 @href 取當前標籤的屬性

#a = html.xpath('//body//a/@href')

## 注意從1 開始取(不是從0)

#a = html.xpath('//body//a[1]/@href')

#8 屬性多值匹配

#a 標籤有多個class類,直接匹配就不可以了,需要用contains

#a = html.xpath('//body//a[@class="li"]') # class有多個類,xpath這樣寫就取不到了,得像下面兩個

#a = html.xpath('//body//a[contains(@class,"li")]')

#a = html.xpath('//body//a[contains(@class,"li")]/text()')

#9 多屬性匹配

#a = html.xpath('//body//a[contains(@class,"li") or @name="items"]')

#a = html.xpath('//body//a[contains(@class,"li") and @name="items"]/text()')

#a = html.xpath('//body//a[contains(@class,"li")]/text()')

#10 按序選擇

#a = html.xpath('//a[2]/text()')

#a = html.xpath('//a[2]/@href')

#取最後乙個

#a = html.xpath('//a[last()]/@href')

#位置小於3的

#a = html.xpath('//a[position()<3]/@href')

#倒數第二個

#a = html.xpath('//a[last()-2]/@href')

#11 節點軸選擇

#ancestor:祖先節點

#使用了* 獲取所有祖先節點

#a = html.xpath('//a/ancestor::*')

## 獲取祖先節點中的div

#a = html.xpath('//a/ancestor::div')

#attribute:屬性值

#a = html.xpath('//a[1]/attribute::*')

#a = html.xpath('//a[1]/@aa')

#child:直接子節點

#a = html.xpath('//a[1]/child::*')

#a = html.xpath('//a[1]/child::img/@src')

#descendant:所有子孫節點

#a = html.xpath('//a[6]/descendant::*')

#a = html.xpath('//a[6]/descendant::h5/text()')

#following:當前節點之後所有節點(兄弟節點和兄弟內部的節點)

#a = html.xpath('//a[1]/following::*')

#a = html.xpath('//a[1]/following::*[1]/@href')

#following-sibling:當前節點之後同級節點(只找兄弟)

#a = html.xpath('//a[1]/following-sibling::*')

#a = html.xpath('//a[1]/following-sibling::a')

#a = html.xpath('//a[1]/following-sibling::*[2]')

#a = html.xpath('//a[1]/following-sibling::*[2]/@href')

#print(a)

總結:

#/#

//#/@屬性名

#/text()

以後去查詢標籤,bs4的find, css,xpath(通用的)

關於節點的路徑

爬蟲 css選擇器 和 xpath選擇器

ret soup.select my p ret soup.select body p 子子孫孫 ret soup.select body p 直接子節點 兒子 ret soup.select body p 0 text 直接子節點 兒子 xpath xpath 是一門在 xml 文件中查詢資訊的語...

XPATH選擇器介紹

xpath全文叫 xml path language xml路徑語言 從xpath的視角來看,xml 或html文件就是檔案系統結構,元素節點可以看做其中某乙個檔案 在html文件中,以html標籤作為根節點,整個文件的形式可以看成是乙個樹形結構 xpath比css多一點功能,比如前向兄弟選擇器,父...

Xpath 轉 JQuery 選擇器

最近在寫採集時使用 php querylist 發現選擇器可以這樣的步驟生成 使用瀏覽器工具 檢視 採集節點的 xpath 值 例如 id form1 div 3 table 3 tbody tr td 2 table 2 tbody tr td table tbody tr td table 2 ...