資料提取之XPATH

2021-10-01 06:24:49 字數 2205 閱讀 2096

#2.資料提取

#xpath語法和 lxml模組

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

原本設計適用於xml的,但xml和html兩者的語法極為相似,所以也可以使用html

谷歌瀏覽器下是xpath

火狐瀏覽器下是try xpath

360瀏覽器下也相容xpath,使用時需要開啟開發者模式

#xpath語法

name 選取name下所有子節點

/ 指定路徑,獲取子節點

// 所有路徑,獲取子孫節點

@ 選取節點屬性

謂詞 放在中的內容,用於查詢某個特定值的節點

例如:div[1] 第乙個子元素

div[last()] 最後乙個子元素

div[position() < 3] 選取節點順序小於3三的節點,也就是前兩個節點

//div[@price] 因為屬性沒有設定返回,所以是選取所有擁有price屬性的節點

//div[@price=10] 選取所有price屬性等於10的div節點

萬用字元

運算子| 可以選取多個路徑 /a | //b 返回a路徑和所有b路徑下的節點集

注意謂詞下標是從1開始的。

#lxml庫

lxml和正則一樣,也是用c語言實現的,是一款html/xml解析器,可以通過之前的xpath語法,來快速定位特定元素以及節點資訊

安裝 pip install lxml

官方文件:

from lxml import etree

text = """

周深驚豔了青春的時光

深深卻溫柔了我的歲月

――來自乙個生公尺入坑的感言

"""#將字串轉換成乙個element物件,可以窒息感xpath語法,此時不是html文字

html = etree.html(text)

#列印資料型別,可以檢視

print(type(html))

print(etree.tostring(html, encoding = 'utf-8').decode('utf-8'))

字符集:為每乙個「字元」分配乙個唯一的 id(學名為碼位 / 碼點 / code point)

編碼規則:將「碼位」轉換為位元組序列的規則(編碼/解碼 可以理解為 加密/解密 的過程)

utf-8是乙個編碼規則,unicode是字符集,注意不要混淆

直接tostring後發現亂碼,設定以utf-8規則解析成byte型別,然後decode成unicode字串型別,這裡不指定使用的也是utf-8規則,但一般還是為了規範進行指定

列印出來的時候,發現將html文字進行了規範化

#解析html檔案

etree.parse(』.html』)

//將檔案轉換成element物件,但預設是以xml解析器,如果遇到不規範的html**,就會出錯,此時需要指定為html解析器

parser = etree.htmlparse(encoding = 『utf-8』)

etree.parse(』.html』, parser = parser)

//如果要指定轉換型別,則需使用指定解析器

from lxml import etree

parser = etree.htmlparser(encoding = 'utf-8')

html = etree.parse("123.html", parser = parser)

trs = html.xpath("//div [@class = 'recruit-list']")

for tr in trs:

zw = tr.xpath("./a/h4/text()")[0]

dj = tr.xpath("./a/p[1]/span[1]/text()")[0]

wz = tr.xpath("./a/p[1]/span[2]/text()")[0]

lx = tr.xpath("./a/p[1]/span[3]/text()")[0]

sj = tr.xpath("./a/p[1]/span[4]/text()")[0]

xq = tr.xpath("./a/p[2]/text()")[0]

id = tr.xpath(".//div/div[3]/@id")[0]

url = "" + id

gw =

print(gw)

資料提取之 lxml

xpath資料提取時 先分組 再提取 2.1 lxml模組入門 1.匯入lxml 的 etree 庫 匯入沒有提示不代表不能用 from lxml import etree2.利用etree.html 將字串轉化為element物件,element物件具有xpath的方法,該方法返回結果為列表。中t...

資料提取之re

貪婪模式 匹配任意字元 非貪婪模式 以.開頭 以.結尾 轉義str hello ret re.match h str print ret.group 結果為h group 會輸出完成的匹配結果 group 1 會輸出完整匹配中 用第1個 括起來的字串 分組 使用 的方式 1 group 和group...

Linux文字資料提取之head,tail例項詳解

提取開頭或結尾數行 顯示標準輸入前n 條記錄,或者命令列檔案列表的每乙個的前n 條記錄 head n n file s head n file s awk fnr n file s sed e nq file s sed nq file s 例項 gz fieldyang test awk fnr ...