日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > HTML >内容正文

HTML

xml语言与html,XML与HTML的分析处理

發(fā)布時(shí)間:2023/12/19 HTML 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 xml语言与html,XML与HTML的分析处理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、python處理XML

XML指可擴(kuò)展標(biāo)記語(yǔ)言(eXtensible Markup Language)。XML被設(shè)計(jì)用來傳輸和存儲(chǔ)數(shù)據(jù)。XML是一套定義語(yǔ)義標(biāo)記的規(guī)則,這些標(biāo)記將文檔分成許多部件并對(duì)這些部件加以標(biāo)識(shí)。它也是元標(biāo)記語(yǔ)言,即定義了用于定義其他與特定領(lǐng)域有關(guān)的、語(yǔ)義的、結(jié)構(gòu)化的標(biāo)記語(yǔ)言的句法語(yǔ)言。

Python對(duì)XML的解析:常見的XML編程接口有DOM和SAX,這兩種接口處理XML文件的方式不同,當(dāng)然使用場(chǎng)合也不同。

1.SAX (simple API for XML )

python標(biāo)準(zhǔn)庫(kù)包含SAX解析器,SAX用事件驅(qū)動(dòng)模型,通過在解析XML的過程中觸發(fā)一個(gè)個(gè)的事件并調(diào)用用戶定義的回調(diào)函數(shù)來處理XML文件。

2.DOM(Document Object Model)

將XML數(shù)據(jù)在內(nèi)存中解析成一個(gè)樹,通過對(duì)樹的操作來操作XML。

注:因DOM需要將XML數(shù)據(jù)映射到內(nèi)存中的樹,一是比較慢,二是比較耗內(nèi)存,而SAX流式讀取XML文件,比較快,占用內(nèi)存少,但需要用戶實(shí)現(xiàn)回調(diào)函數(shù)(handler)。

例:

cat book.xml<?xml ?version="1.0"?encoding="ISO-8859-1"?>

Harry?Potter

29.99

Learning?XML

39.95

使用python處理的相關(guān)代碼如下:import?string

from?xml.parsers.expat?import?ParserCreate

class?DefaultSaxHandler(object):

def?start_element(self,name,attrs):

self.name=name

#print('element:%s,?attrs:%s'?%?(name,str(attrs)))

print("")

def?end_element(self,name):

#print('end?element:%s'?%?name)

print(""+name+">")

def?char_data(self,text):

if?text.strip():

print("%s's?text?is?%s"?%?(self.name,text))

handler?=?DefaultSaxHandler()

parser?=?ParserCreate()

parser.StartElementHandler=handler.start_element

parser.EndElementHandler=handler.end_element

parser.CharacterDataHandler=handler.char_data

with?open('book.xml')?as?f:

parser.Parse(f.read())

抓取全國(guó)各省郵編的實(shí)例:

import?requests

from?xml.parsers.expat?import?ParserCreate

class?DefaultSaxHandler(object):

def?__init__(self,provinces):

self.provinces=provinces

def?start_element(self,name,attrs):

if?name?!=?'map':

name?=?attrs['title']

number?=?attrs['href']

self.provinces.append((name,number))

def?end_element(self,name):

pass

def?char_data(self,text):

pass

def?get_province_entry(url):

content=requests.get(url).content.decode('gb2312')

start=content.find('')

end=content.find('')

content=content[start:end+len('')].strip()

#print(content)

provinces?=?[]

handler?=?DefaultSaxHandler(provinces)

parser?=?ParserCreate()

parser.StartElementHandler?=?handler.start_element

parser.EndElementHandler?=?handler.end_element

parser.CharacterDataHandler?=?handler.char_data

parser.Parse(content)

return?provinces

provinces=get_province_entry('http://www.ip138.com/post')

print(provinces)

DOM的一個(gè)小例子:from?xml.dom?import?minidom

doc?=?minidom.parse('book.xml')

root?=?doc.documentElement

print(root.nodeName)

books?=?root.getElementsByTagName('book')

for?book?in?books:

titles?=?book.getElementsByTagName('title')

prices?=?book.getElementsByTagName('price')

print(titles[0].childNodes[0].nodeValue?+?":"?+?prices[0].childNodes[0].nodeValue)

二、HTMLParser

html.parser的核心是HTMLParser類。工作的流程是:當(dāng)feed給它一個(gè)類似HTML格式的字符串時(shí),它會(huì)調(diào)用goahead方法向前迭代各個(gè)標(biāo)簽,并調(diào)用對(duì)應(yīng)的parse_xxxx方法提取start_tag, tag, data, comment?和end_tag?等標(biāo)簽信息和數(shù)據(jù),然后調(diào)用對(duì)應(yīng)的方法對(duì)這些抽取出來的內(nèi)容進(jìn)行處理

handle_startendtag? #處理開始標(biāo)簽和結(jié)束標(biāo)簽

handle_starttag ? ? ? #處理開始標(biāo)簽,比如

handle_endtag ? ? ? ?#處理結(jié)束標(biāo)簽,比如或者

handle_charref? ? ? ? #處理特殊字符串,就是以開頭的,一般是內(nèi)碼表示的字符

handle_entityref? ? ? #處理一些特殊字符,以&開頭的,比如 ?

handle_data ? ? ? ? ? #處理data中間的那些數(shù)據(jù)

handle_comment? ? #處理注釋

handle_decl ? ? ? ? ? #處理

handle_pi ? ? ? ? ? ? ?#處理形如<?instruction>的

markupbase安裝方法: 直接'pip install'無法安裝成功,嘗試命令'pip search markupbase'得到包名'micropython-markupbase’,然后直接在網(wǎng)頁(yè)上下載這個(gè)包,下載后里面有一個(gè)'_markupbase.py'文件,將文件名前綴去掉后文件復(fù)制到python安裝目錄'\lib\site-packages'下。例:cp markupbase.py /usr/local/lib/python3.6/site-packages/

下例:處理指定的html文件#coding=utf-8

from?HTMLParser?import?HTMLParser

class?MyParser(HTMLParser):

"""一個(gè)簡(jiǎn)單的HTMLparser的例子"""

def?handle_decl(self,?decl):

"""處理頭文檔"""

HTMLParser.handle_decl(self,?decl)

print(decl)

def?handle_starttag(self,?tag,?attrs):

"""處理起始標(biāo)簽"""

HTMLParser.handle_starttag(self,?tag,?attrs)

if?not?HTMLParser.get_starttag_text(self).endswith("/>"):

print("")

def?handle_data(self,?data):

"""處理文本元素"""

HTMLParser.handle_data(self,?data)

print(data)

def?handle_endtag(self,?tag):

"""處理結(jié)束標(biāo)簽"""

HTMLParser.handle_endtag(self,?tag)

if?not?HTMLParser.get_starttag_text(self).endswith("/>"):

print(""+tag+">")

def?handle_startendtag(self,?tag,?attrs):

"""處理自閉標(biāo)簽"""

HTMLParser.handle_startendtag(self,?tag,?attrs)

print(HTMLParser.get_starttag_text(self))

def?handle_comment(self,?data):

"""處理注釋"""

HTMLParser.handle_comment(self,?data)

print(data)

def?close(self):

HTMLParser.close(self)

print("parser?over")

demo=MyParser()

demo.feed(open("test.html").read())

demo.close()

總結(jié)

以上是生活随笔為你收集整理的xml语言与html,XML与HTML的分析处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。