spider 頁面解析 XML

2021-08-30 06:25:01 字數 2936 閱讀 1262

xml

什麼是xml

什麼是xpath?

xpath (xml path language) 是一門在 xml 文件中查詢資訊的語言,可用來在 xml 文件中對元素和屬性進行遍歷。

xpath 開發工具

示例文件

<?xml version="1.0" encoding="utf-8"?>

everyday italian

giada de laurentiis

2005

30.00

harry potter

j k. rowling

2005

29.99

xquery kick start

james mcgovern

per bothner

kurt cagle

james linn

vaidyanathan nagarajan

2003

49.99

learning xml

erik t. ray

2003

39.95

安裝lxml

pip install lxml

常用方法

etree.parse()

讀取xml檔案,結果為xml物件(不是字串)

etree.html(string_html)

將字串形勢的html檔案轉換為xml物件

etree.tostring(htmlelement, encoding=「utf-8」).decode(「utf-8」)

etree.tostring(html,encoding="utf-8", pretty_print=true).decode()
按字串序列化html文件

選擇器表示式

描述nodename

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

/從根節點擊取。

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

.選取當前節點。

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

@選取屬性。

範例

bookstore 選取 bookstore 元素的所有子節點(如果只有乙個的話)。

/bookstore 選取根元素 bookstore。注釋:假如路徑起始於正斜槓( / ),則此路徑始終代表到某元素的絕對路徑!

bookstore/book 選取屬於 bookstore 的直接子元素的所有 book 元素。

//book 選取所有 book 子元素,而不管它們在文件中的位置。

bookstore//book 選擇屬於 bookstore 元素的後代的所有 book 元素,而不管它們位於 bookstore 之下的什麼位置。

bookstore//book/@lang 選取book元素的lang屬性值。

bookstore//book[@class="book-css"]/title 選取class屬性值為「book-css」的book元素的title。

//*[@class="bold"] 獲取 class 值為 bold 的標籤名

**使用屬性時,不要忘記@符號**

> /表示直接子元素,//表示所有子孫元素

讀取案例-xml

#from lxml import etree #這樣寫後面會出現紅色波浪線

import lxml.html

etree = lxml.html.etree

# 讀取檔案:這個時候只時候讀取xml格式的檔案,顯然侷限性太強!!!!!

html = etree.parse('data.xml')

# 轉化為位元組字串

# result = etree.tostring(html, pretty_print=true)

# print(type(html)) # 顯示etree.parse() 返回型別

# print(result)

titles = html.xpath('/bookstore/book/title')

for tt in titles:

print(tt.text)

# 如果不是直接子元素就要用//

titles = html.xpath('/bookstore//title')

for tt in titles:

print(tt.text)

6. lxml讀取html檔案

​ 自己建立html解析器,增加parser引數

import lxml.html

etree = lxml.html.etree

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

htmlelement = etree.parse("liepin.html", parser=parser)

print(htmlelement)

html_string=etree.tostring(htmlelement, encoding="utf-8").decode("utf-8")

#讀取innertext

links=htmlelement.xpath('//div/div/span/a')

for link in links:

print(link.text)

#讀取屬性的值

with open('liepin.html','r+') as fp:

content=fp.read()

html=etree.html(content)

links = html.xpath('//div/div/span/@title')

for title in titles:

print(title)

解析XML檔案(SAX方式解析XML)

解析xml檔案 sax方式解析xml 對xml檔案解析有四種方法 dom sax jdom dom4j 現著重講一下sax解析xml檔案。1 通過一定的方式獲取檔名 獲得檔案路徑 string xmlfilepath ticanserviceaccess.getsystemsupportservic...

解析XML檔案(SAX方式解析XML)

解析xml檔案 sax方式解析xml 對xml檔案解析有四種方法 dom sax jdom dom4j 現著重講一下sax解析xml檔案。1 通過一定的方式獲取檔名 獲得檔案路徑 string xmlfilepath ticanserviceaccess.getsystemsupportservic...

JSON解析 XML解析

json解析 1大括號代表字典 2中括號 小括號 代表陣列 3冒號的左右兩邊分別為鍵和值 key value 4資料和資料之間 用逗號隔開 我們在本機上建立乙個file.xml,進行解析,並取出年齡35 json解析 本地讀取student.xm l檔案nsstring jstr nsstring ...