常用匹配規則
表示式描述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。因為顯示與不同...