pythonlxmlxml
㈠ python中function沒有xpath屬性什麼意思
在Python中,函數(function)是一種對象,它可以被調用以執行特定的任務。與其他對象一樣,函數也有一些屬性,例如__name__、__doc__等。隱山但是,函數對象沒有xpath屬性,因為xpath是一種用於在XML文檔中定位元素的語言,與Python函指坦數沒有直接關系。如果您需要在Python中使用xpath,可以使用lxml庫或者xml.etree.ElementTree庫。這些庫提供了一些函數和類,可以幫灶逗中助您解析XML文檔並使用xpath表達式來定位元素。
㈡ python解析xml降低內存
1. 使用ElementTree模塊,它是Python標准庫中提供的歷賀虛一個XML解析模塊,它使用簡單,非常容易拍凳使用,可以降低內存佔用。
2. 使用lxml模塊,它是一個高性能的XML和HTML解析器,可以有效的降低內存佔用。
3. 使用iterparse()函數,它可以遍歷XML文檔,可以降低內存佔用。
4. 使用xml.sax模塊,肢燃它是一個基於事件驅動的XML解析器,可以有效的降低內存佔用。
㈢ python之lxml 解析問題總結
(1)解租蔽滾析xml報錯 ValueError: Unicode strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration.
得到上述的xml的類, 需並棗要轉化為string,要加參數弊余 encoding='unicode'
㈣ 在Python中如何獲取xml中的同級標簽
fromlxmlimportetree
doc=etree.fromstring(html)
titles=doc.xpath('//title')
fortitleintitles:
print(title.text)
ps=[t.getnext()fortintitles]
forpinps:
print(p.text)
使用的是lxml包,
只獲取了title元素相鄰的哪一兄余個p元素,根據你的需要滑盯修改吧羨讓滾
㈤ python中lxml這個庫主要是干什麼的
1、lxml是XML和HTML的解析器,
2、其主要功能是解析和喚芹提取和輪畢XML和HTML中的數據;
3、lxml和正則一樣,也是用C語言實現的,是一款高性能的python HTML、XML解析器,也可以利用XPath語法,來定位特定的元素桐滑及節點信息
㈥ python按層級找出xml文件的差異
使用Python可以按層級比較XML文件的差異,可以使用lxml包中的diff函數,允許指定差異深度,而深度需要根據兩個XML文件的差異而定。另外還可以使用difflib庫中的diff()函數,它返回XML文件樹形結構差異,可以輕松實現層級比對。
㈦ Python解析庫lxml與xpath用法總結
本文主要圍繞以xpath和lxml庫進行展開:
一、xpath 概念、xpath節點、xpath語法、xpath軸、xpath運算符
二、lxml的安裝、lxml的使用、lxml案例
一、xpath
1.xpath概念
XPath 是一門在 XML 文檔中查找信息的語言。XPath 使用路徑表達式在 XML 文檔中進行導航 。XPath 包含一個標准函數庫 。XPath 是 XSLT 中的主要元素 。XPath 是一個 W3C 標准 。
2.xpath節點
xpath有七種類型的節點:元素、屬性、文本、命名空間、處理指令、注釋以及文檔(根)節點。
節點關系:父、子、兄弟、先輩、後輩。
3.xpath語法
xpath語法在W3c網站上有詳細的介紹,這里截取部分知識,供大家學習。
XPath 使用路徑表達式在 XML 文檔中選取節點。節點是通過沿著路徑或者 step 來選取的。下面列出了最有用的路徑表達式:
在下面的表格中,我們已列出了一些路徑表達式以及表達式的結果:
謂語用來查找某個特定的節點或者包含某個指定的值的節點。
謂語被嵌在方括弧中。
在下面的表格中,我們列出了帶有謂語的一些路徑表達式,以及表達式的結果:
XPath 通配符可用來選取未知的 XML 元素。
在下面的表格中,我們列出了一些路徑表達式,以及這些表達式的結果:
通過在路徑表達式中使用"|"運算符,您可以選取若干個路徑。
在下面的表格中,我們列出了一些路徑表達式,以及這些表達式的結果:
4.xpath 軸
軸可定義相對於當前節點的節點集。
5.xpath運算符
下面列出了可用在 XPath 表達式中的運算符:
好了,xpath的內容就這么多了。接下來我們要介紹一個神器lxml,他的速度很快,曾經一直是我使用beautifulsoup時最鍾愛的解析器,沒有之一,因為他的速度的確比其他的html.parser 和html5lib快了許多。
二、lxml
1.lxml安裝
lxml 是一個xpath格式解析模塊,安裝很方便,直接pip install lxml 或者easy_install lxml即可。
2.lxml 使用
lxml提供了兩種解析網頁的方式,一種是你解析自己寫的離線網頁時,另一種 則是解析線上網頁。
導入包:
1.解析離線網頁:
2.解析在線網頁:
那麼我們怎麼獲取這些標簽和標簽對應的屬性值了,很簡單,首先獲取標簽只需你這樣做:
然後我們可以,比方說,你要獲取a標簽內的文本和它的屬性href所對應的值,有兩種方法,
1.表達式內獲取
2.表達式外獲取
這樣就完成了獲取,怎麼樣,是不是很簡單了,哈哈哈。
下面再來lxml的解析規則:
3.lxml案例
為了偷懶,我決定還是採用urllib那篇文章的代碼,哈哈哈,機智如我。
㈧ 如何用python讀取xml文件
一、簡介
XML(eXtensible Markup Language)指可擴展標記語言,被設計用來傳輸和存儲數據,已經日趨成為當前許多新生技術的核心,在不同的領域都有著不同的應用。它是web發展到一定階段的必然產物,既具有SGML的核心特徵,又有著HTML的簡單特性,還具有明確和結構良好等許多新的特性。
python解析XML常見的有三種方法:一是xml.dom.*模塊,它是W3C DOM API的實現,若需要處理DOM API則該模塊很適合,注意xml.dom包裡面有許多模塊,須區分它們間的不同;二是xml.sax.*模塊,它是SAX API的實現,這個模塊犧牲了便捷性來換取速度和內存佔用,SAX是一個基於事件的API,這就意味著它可以「在空中」處理龐大數量的的文檔,不用完全載入進內存;三是xml.etree.ElementTree模塊(簡稱 ET),它提供了輕量級的Python式的API,相對於DOM來說ET 快了很多,而且有很多令人愉悅的API可以使用,相對於SAX來說ET的ET.iterparse也提供了 「在空中」 的處理方式,沒有必要載入整個文檔到內存,ET的性能的平均值和SAX差不多,但是API的效率更高一點而且使用起來很方便。
二、詳解
解析的xml文件(country.xml):
在CODE上查看代碼片派生到我的代碼片
<?xml version="1.0"?>
<data>
<country name="Singapore">
<rank>4</rank>
<year>2011</year>
<gdppc>59900</gdppc>
<neighbor name="Malaysia" direction="N"/>
</country>
<country name="Panama">
<rank>68</rank>
<year>2011</year>
<gdppc>13600</gdppc>
<neighbor name="Costa Rica" direction="W"/>
<neighbor name="Colombia" direction="E"/>
</country>
</data>
1、xml.etree.ElementTree
ElementTree生來就是為了處理XML,它在Python標准庫中有兩種實現:一種是純Python實現的,如xml.etree.ElementTree,另一種是速度快一點的xml.etree.cElementTree。注意:盡量使用C語言實現的那種,因為它速度更快,而且消耗的內存更少。
在CODE上查看代碼片派生到我的代碼片
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
這是一個讓Python不同的庫使用相同API的一個比較常用的辦法,而從Python 3.3開始ElementTree模塊會自動尋找可用的C庫來加快速度,所以只需要import xml.etree.ElementTree就可以了。
在CODE上查看代碼片派生到我的代碼片
#!/usr/bin/evn python
#coding:utf-8
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
import sys
try:
tree = ET.parse("country.xml") #打開xml文檔
#root = ET.fromstring(country_string) #從字元串傳遞xml
root = tree.getroot() #獲得root節點
except Exception, e:
print "Error:cannot parse file:country.xml."
sys.exit(1)
print root.tag, "---", root.attrib
for child in root:
print child.tag, "---", child.attrib
print "*"*10
print root[0][1].text #通過下標訪問
print root[0].tag, root[0].text
print "*"*10
for country in root.findall('country'): #找到root節點下的所有country節點
rank = country.find('rank').text #子節點下節點rank的值
name = country.get('name') #子節點下屬性name的值
print name, rank
#修改xml文件
for country in root.findall('country'):
rank = int(country.find('rank').text)
if rank > 50:
root.remove(country)
tree.write('output.xml')
運行結果:
三、總結
(1)Python中XML解析可用的類庫或模塊有xml、libxml2 、lxml 、xpath等,需要深入了解的還需參考相應的文檔。
(2)每一種解析方式都有自己的優點和缺點,選擇前可以綜合各個方面的性能考慮。
(3)若有不足,請留言,在此先感謝!
㈨ python-xml怎麼安裝啊
pip install lxml python2.7.9 自帶pip安裝工具。 看下面圖片,圖中顯示本人電腦已經安裝好了。
1.
直接
下載的模塊文件中已經有了模塊的文件,有些模塊只有一個文件,比如較早版本的BeautifulSoup,有些是一個文件夾,比如新版本BeautifulSoup就是一個叫做bs4的文件夾。
把這些文件直接到你的python路徑下的/Lib/site-packages文件夾中,比如C:/Python27/Lib/site-packages。之後就可以在程序里直接引用了:
import BeautifulSoup
或者
from bs4 import BeautifulSoup
這是根據你放置的文件位置不同而決定的。
網上有人說直接放在Lib文件夾中就可以了。的確這樣也行,但Lib文件夾中都是自帶的模塊,看一下就會發現我們用過的random、re等模塊的代碼文件。而外部模塊一般放在site-packages文件夾中。
2.
setup.py
很多模塊里都附帶了setup.py文件,有同學直接雙擊了,然後發現沒有用。
它的使用方法是從命令行去到setup.py所在的路徑下,運行
python setup.py install
仔細看一下安裝時輸出的信息可以發現,在線學習這個命令做的事情其實也就是幫你把模塊的代碼到site-packages文件夾。
3.
setuptools
使用setuptools可以直接根據模塊名稱來自動下載安裝,不需要自己再去尋找模塊的安裝文件。不過在使用之前,你得先安裝setuptools自身。
windows平台的32位python,可以直接下載setuptools的exe文件安裝。
㈩ python lxml etree怎麼甩
lxml是Python語言中處理XML和HTML功能最豐富,最易於使用的庫。
lxml是libxml2和libxslt兩個C庫的Python化綁定,它的獨特之處在於兼顧了這些庫的速度和功能完整性,同時還具有Python API的簡介。兼容ElementTree API,但是比它更優越。
用libxml2編程就像是一個異於常人的陌生人的令人驚恐的擁抱,它看上去可以滿足你一切瘋狂的夢想,但是你的內心深處一直在警告你,你有可能會以最糟糕的方式遭殃,所以就有了lxml。
這是一個用lxml.etree來處理XML的教程,它簡單的概述了ElementTree API的主要概念,同時有一些能讓你的程序生涯更輕松的簡單的提高。
首先是導入lxml.etree的方式:
fromlxmlimportetree
為了協助代碼的可移植性,本教程中的例子很明顯可以看出,一部分API是lxml.etree在ElementTree API(由Fredrik Lundh 的ElementTree庫定義)的基礎上的擴展。
Element是ElementTree API的主要容器類,大部分XML tree的功能都是通過這個類來實現的,Element的創建很容易:
root=etree.Element("root")
element的XML tag名通過tag屬性來訪問
>>>printroot.tag
root
許多Element被組織成一個XML樹狀結構,創建一個子element並添加進父element使用append方法:
>>>root.append(etree.Element("和耐child1"))
還有一個更簡短更有效的方法:the SubElement,它的參數和element一樣,但是需要父element作為第一個參數:
>>>child2=etree.SubElement(root,"child2")
>>>child3=etree.SubElement(root,"child3")
可以序列化你創建的樹:
>>>print(etree.tostring(root,pretty_print=True))
<root>
<child1/>
<child2/>
<child3/>
</root>
為了更方便直胡棚野觀的訪問這些子節點,element模仿了正常的Python鏈:
>>>child=root[0]>>>print(child.tag)
child1
>>>print(len(root))
>>>root.index(root[1])#lxml.etreeonly!
>>>children=list(root)>>>forchildinroot:...print(child.tag)child1child2
child3
>>>root.insert(0,etree.Element("child0"))>>>start褲喊=root[:1]>>>end=root[-1:]>>>print(start[0].tag)child0>>>print(end[0].tag)child3
還可以根據element的真值看其是否有孩子節點:
ifroot:#thisnolongerworks!
print("Therootelementhaschildren")
用len(element)更直觀,且不容易出錯:
>>>print(etree.iselement(root))#testifit'ssomekindofElement
True
>>>iflen(root):#testifithaschildren
...print("Therootelementhaschildren")
Therootelementhaschildren
還有一個重要的特性,原文的句子只可意會,看例子應該是能看懂什麼意思吧。
>>>forchildinroot:...print(child.tag)child0child1child2child3>>>root[0]=root[-1]#移動了element>>>forchildinroot:...print(child.tag)child3child1child2>>>l=[0,1,2,3]>>>l[0]=l[-1]>>>l[3,1,2,3]
>>>rootisroot[0].getparent()#lxml.etreeonly!.etree,'sstandardlibrary:>>>fromimportdeep>>>element=etree.Element("neu")>>>element.append(deep(root[1]))>>>print(element[0].tag)child1>>>print([c.tagforcinroot])['child3','child1','child2']
XML支持屬性,創建方式如下:
>>>root=etree.Element("root",interesting="totally")
>>>etree.tostring(root)
b'<rootinteresting="totally"/>'
屬性是無序的鍵值對,所以可以用element類似於字典介面的方式處理:
>>>print(root.get("interesting"))
totally
>>>print(root.get("hello"))
None
>>>root.set("hello","Huhu")
>>>print(root.get("hello"))
Huhu
>>>etree.tostring(root)
b'<rootinteresting="totally"hello="Huhu"/>'
>>>sorted(root.keys())
['hello','interesting']
>>>forname,valueinsorted(root.items()):
...print('%s=%r'%(name,value))
hello='Huhu'
interesting='totally'
如果需要獲得一個類似dict的對象,可以使用attrib屬性:
>>>attributes=root.attrib
>>>print(attributes["interesting"])
totally
>>>print(attributes.get("no-such-attribute"))
None
>>>attributes["hello"]="GutenTag"
>>>print(attributes["hello"])
GutenTag
>>>print(root.get("hello"))
GutenTag
既然attrib是element本身支持的類似dict的對象,這就意味著任何對element的改變都會影響attrib,反之亦然。這還意味著只要element的任何一個attrib還在使用,XML樹就一直在內存中。通過如下方法,可以獲得一個獨立於XML樹的attrib的快照:
>>>d=dict(root.attrib)
>>>sorted(d.items())
[('hello','GutenTag'),('interesting','totally')]