解析庫的學習小結 1 XPath學習

2021-09-10 08:34:48 字數 4566 閱讀 1959

常用匹配規則

表示式描述nodename選取此節點的所有子節點

/從當前節點擊取直接子節點

//從當前節點擊取子孫節點

.選取當前節點

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

@選取屬性

//title[@lang='eng']

# 代表選擇所有名稱為title,同時lang的值為eng的節點

from lxml import etree

# etree 模組可以自動修正html 文字

text = '''

'''# 一、使用html 類進行初始化,呼叫tostring()方法即可輸出修正後html**

# html = etree.html(text)

# result = etree.tostring(html)

# print(result.decode('utf-8'))

# 二、直接讀取文字檔案進行解析

html = etree.parse('./test.html', etree.htmlparser())

result = etree.tostring(html)

print(result.decode('utf-8'))

from lxml import etree

# 匹配所有節點,使用*代表所有節點

html = etree.parse('./test.html', etree.htmlparser())

result = html.xpath('//*')

print(result)

# 匹配指定節點,返回結果為乙個element物件

html = etree.parse('./test.html', etree.htmlparser())

result = html.xpath('//li')

print(result)

print(result[0])

from lxml import etree

# 獲取標籤裡面的a子節點,用 / 選取 直接 子節點

html = etree.parse('./test.html', etree.htmlparser())

result = html.xpath('//li/a')

print(result)

# 獲取ul節點下的所有子孫節點

html = etree.parse('./test.html', etree.htmlparser())

result = html.xpath('//ul//a')

print(result)

from lxml import etree

# 用..來查詢父節點

# 先選中href屬性為link4.html的a節點,然後再獲取其父節點,然後再獲取其class屬性

html = etree.parse('./test.html', etree.htmlparser())

result = html.xpath('//a[@href="link4.html"]/../@class')

print(result)

# 也可以通過parent::來獲取父節點

html = etree.parse('./test.html', etree.htmlparser())

result = html.xpath('//a[@href="link4.html"]/parent::*/@class')

print(result)

# 利用@符號進行屬性過濾

from lxml import etree

html = etree.parse('./test.html', etree.htmlparser())

result = html.xpath('//li[@class="item-0"]')

print(result)

from lxml import etree

# 1.選取a標籤再獲取文字,精準選取

html = etree.parse('./test.html', etree.htmlparser())

result = html.xpath('//li[@class="item-0"]/a/text()')

print(result)

# 2.直接選取li節點的子孫節點文字,模糊選取

html = etree.parse('./test.html', etree.htmlparser())

result = html.xpath('//li[@class="item-0"]//text()')

print(result)

from lxml import etree

text = '''first item

'''html = etree.parse('./test.html', etree.htmlparser())

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

print(result)

from lxml import etree

# 用and運算子匹配多個屬性值

text = '''first item

'''html = etree.parse('./test.html', etree.htmlparser())

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

print(result)

運算子

描述or

and

mod取餘

|節點集

+加法

-減法

*乘法

div除法

=等於

!=不等於

<小於

<=小於或等於

>大於

>=大於或等於

from lxml import etree

html = etree.parse('./test.html', etree.htmlparser())

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)

from lxml import etree

html = etree.parse('./test.html', etree.htmlparser())

result = html.xpath('//li[1]/ancestor::*')

print(result) # ancestor軸,獲取所有祖先節點,跟兩個冒號,用*匹配所有節點

result = html.xpath('//li[1]/ancestor::div')

print(result) # 同上,但節點擊擇器選擇div

result = html.xpath('//li[1]/attribute::*')

print(result) # attribute軸,獲取所有的屬性值

result = html.xpath('//li[1]/child::a[@href="link1.html"]')

print(result) # child軸,選取href屬性為link1.html的a節點

result = html.xpath('//li[1]/descendant::span')

print(result) # descendant軸,所有子孫節點,選取span

result = html.xpath('//li[1]/following::*[2]')

print(result) # following軸,當前節點後的所有節點

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

print(result) # following-sibling當前節點同級節點

P20 資料解析 1 xpath簡介以及工具安裝

什麼是xpath?xpath xml path language 是一門xml 和html文件中查詢資訊的語言,可以用來在xml和html中對元素和屬性進行遍歷 xpath開發工具 chrome外掛程式 xpath helper firefox外掛程式 xpath checker xpath 使用路...

資料的查詢和提取 2 xpath解析庫的使用

在上一節,我們介紹了正規表示式的使用,但是當我們提取資料的限制條件增多的時候,正規表示式會變的十分的複雜,出一丁點錯就提取不出來東西了。但python已經為我們提供了許多用於解析資料的庫,接 下來幾篇部落格就給大家簡單介紹一下xpath beautiful soup以及pyquery的使用。今天首先...

CSS學習半程小結(學CSS需要考慮的問題)

使用css需要牢記的幾點 目前總結了這麼幾點,若有新的,再新增 1.跨瀏覽器訪問的問題 cross browser個人認為這個是最重要的問題 有一本書 重構 可以看看。2.用作不同位置時,應選用不同的css檔案,以呈現不同的效果。media screen,print or other。因為顯示與不同...