導航:首頁 > 編程語言 > pythonlxml教程

pythonlxml教程

發布時間:2023-06-09 16:29:28

python LXML模塊死活安裝不了怎麼辦

1、首先請確認安裝了xcode commond line tool 也就是xcode的命令行工具,因為編譯lxml需要用到cc 等命令
所以先在命令行輸入

xcode-select --install

2、安裝完命令行工具 用pip來安裝你所需要的lxml
這時候如果提示頭文件未找到的話 用locate命令定位一下頭文件的位置

locate xmlversion.h

3、初次使用locate命令會提示安裝

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

4、安裝一下就好了
之後定位到了locate之後 設置一下環境變數

export C_INCLUDE_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/

5、那麼在編譯lxml的時候 就自動會到這個路徑下搜索頭文件
然後pip install 就可以啦。

6、另外如果系統裝了幾個版本的xcode 那麼列印看好xcode的路徑

sudo xcode-select -p

7、如果想切換到另一個xcode路徑下 可以考慮在bash.profile進行全局的設置
或者在終端設置變數

sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer/

或者

export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer

8、如果這些安裝完了之後,最後引用Scrapy包得時候報錯
請嘗試刪除
cd /Library/Python/2.7/site-packages/
sudo rm -rf six*

9、如果是Mac OSX 10.11 有可能會報錯 因為mac系統多了sip 關閉sip就OK了
具體關閉方法請網路
基本我就踩到了這些坑。

⑵ 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包下面的xpath基本用法

對於網頁數據抓取,有BeautifulSoup、lxml以及正則表達式三種方法,其中正則表達式過於復雜,而beautifulsoup和lxml使用起來較為方便。以前簡單使用過beautifulsoup(美味湯),後面為了擴展一下,熟悉一下lxml進行數據抓取。

先貼一個lxml的簡仿早單框架:

其中,最主要的在於xpath路徑的獲取和解析,而XPath就是地址,具體地,就是需要知道所要尋找的內容處在哪個地址下。一般而言,我們可以根據開發者工具來定位我們需要的元素,然後右擊選擇其所在xpath,選擇初步的路徑,如下圖所示,

這只是一種簡單的方法,更重要的,需要掌握xpath的語法規則,下面分別論述。

使用xpath獲取信息,主要包括獲取本文和獲取屬性,基本用法為

對比可以看出,一個是採用text()獲取文本,一個是採用@屬性獲取屬性值。而前面標簽後面方括弧就是來對標簽進行篩選的。一般而言,通過選擇器可以獲取諸如/html/body/div[@class="useful"]/ul/li/text()的信息,但是開頭的信息沒有標志性,採用//div[@class="useful"]/ul/li/text()即可。

這個地方即涉及到了xpath的語法選擇,主要包括以下幾點:

而在選擇器方備緩雀面,包括以下幾個

除此之外,在獲取了一個元素之後,我們需要獲取其下面元素的屬性,即要對基於xpath獲取的元素再次採用xpath,此時的獲取方式為:

另外,我們也可以獲取節點下面所有的字元串,方法為string(.),示例為:

懶得打字了,下面的截圖來自W3Cschool, https://www.w3cschool.cn/lxml/_lxml-98h23fk0.html

主要的Xpath運算符包括以下:

按順序選擇等進一步的內容可以移步 https://www.w3cschool.cn/lxml/_lxml-eh1k3fk6.html

具體到不同的網頁上,需要的其他哪陸知識就更多了,慢慢補充吧。不過似乎還是beautifulsoup好用一些,哈哈。

參考資料:
https://blog.csdn.net/weixin_39851008/article/details/109960957
https://www.w3cschool.cn/lxml/_lxml-98h23fk0.html

⑷ python lxml庫怎麼安裝

lxml是Python中與XML及HTML相關功能中最豐富和最容易使用的庫。lxml並不是Python自帶的包,而是為libxml2和libxslt庫的一個Python化的綁定。它與眾不同的地方是它兼顧了這些庫的速度和功能完整性,以及純Python API的簡潔性,與大家熟知的ElementTree API兼容但比之更優越!但安裝lxml卻又有點麻煩,因為存在依賴,直接安裝的話用easy_install, pip都不能成功,會報gcc錯誤。下面列出來Windows、Linux下面的安裝方法:
【Windows系統】
先確保Python已經安裝好,環境變數也配置好了,相應的的easy_install、pip也安裝好了.
1. 執行 pip install virtualenv
[python] view plain print?
C:\>pip install virtualenv
Requirement already satisfied (use --upgrade to upgrade): virtualenv in c:\python27\lib\site-package
s\virtualenv-12.0.4-py2.7.egg
2. 從官方網站下載與系統,Python版本匹配的lxml文件:
http //pypi.python.org/pypi/lxml/2.3/
NOTE:
比如說我的電腦是Python 2.7.4, 64位操作系統,那麼我就可以下載
[python] view plain print?
lxml-2.3-py2.7-win-amd64.egg (md5) # Python Egg

lxml-2.3.win-amd64-py2.7.exe (md5) # MS Windows installer
3. 執行 easy_install lxml-2.3-py2.7-win-amd64.egg
[python] view plain print?
D:\Downloads>easy_install lxml-2.3-py2.7-win-amd64.egg # 進入該文件所在目錄執行該命令
Processing lxml-2.3-py2.7-win-amd64.egg
creating c:\python27\lib\site-packages\lxml-2.3-py2.7-win-amd64.egg
Extracting lxml-2.3-py2.7-win-amd64.egg to c:\python27\lib\site-packages
Adding lxml 2.3 to easy-install.pth file
Installed c:\python27\lib\site-packages\lxml-2.3-py2.7-win-amd64.egg
Processing dependencies for lxml==2.3
Finished processing dependencies for lxml==2.3
NOTE:
1. 可用exe可執行文件,方法更簡單直接安裝就可以
2. 可用easy_install安裝方式,也可以用pip的方式
[python] view plain print?
#再執行下,就安裝成功了!
>>> import lxml
>>>
3. 如用pip安裝,常用命令就是:
pip install simplejson # 安裝Python包
pip install --upgrade simplejson # 升級Python包
pip uninstall simplejson # 卸載Python包
4. 如用Eclipse+Pydev的開發方式,需要移除舊包,重新載入一次
Window --> Preferences --> PyDev --> Interperter-python # 否則導包的時候會報錯
【Linux系統】
因為lxml依賴的包如下:
libxml2, libxml2-devel, libxlst, libxlst-devel, python-libxml2, python-libxslt
所以安裝步驟如下:
第一步: 安裝 libxml2
$ sudo apt-get install libxml2 libxml2-dev
第二步: 安裝 libxslt
$ sudo apt-get install libxlst libxslt-dev
第三步: 安裝 python-libxml2 和 python-libxslt
$ sudo apt-get install python-libxml2 python-libxslt
第四步: 安裝 lxml
$ sudo easy_install lxml

⑸ 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')]

⑹ python中lxml模塊怎麼導入

這個模塊是第三方模塊,需要先安裝再導入。

安裝:終端命令界面下,pip install lxml(安裝過程中如果提示需要其他哪個庫,需要先裝提示的庫,再裝lxml)。
如果使用pip安裝失敗,到pypi社區官網下載壓縮解壓,終端界面進入其目錄(當前目錄有個叫「setup.py」就對了),用命令 python setup install 就行。

導入:import lxml 即可

⑺ python使用xpath(超詳細)

使用時先安裝 lxml 包

開始使用 #

和beautifulsoup類似,首先我們需要得到一個文檔樹

把文本轉換成一個文檔樹對象

from lxml import etreeif __name__ == '__main__':doc='''

把文件轉換成一個文檔樹對象

fromlxmlimportetree# 讀取外部文件 index.htmlhtml = etree.parse('./index.html')result = etree.tostring(html, pretty_print=True)#pretty_print=True 會格式化輸出print(result)

均會列印出文碧態檔內容

節點、元素、屬性、內容 #

xpath 的思想是通過 路徑表達 去尋找節點。節點包括元素,屬性,和內容

元素舉例

html --->...div --->

這里我們可以看到,這里的元素和html中的標簽一個意思。單獨的元素是無法表達一個路徑的,所以單獨的元素不能獨立使用

路徑表達式 #

/  根節點,節點分隔符,//  任意位置.  當前節點..  父級節點@  屬性

通配符 #

*  任意元素@*  任意屬性node()  任意子節點(元素,屬性,內悔老源容)

謂語 #

使用中括弧來限定元素,稱為謂語

//a[n] n為大於零的整數,代表子元素排在第n個位置的 元素//a[last()]  last()  代表子元素排在最後個位置的 元素//a[last()-]  和上面同理,代表倒數第二個//a[position()<3] 位置序號小於3,也就是前兩個,這里我們可以看出xpath中的序列是從1開始//a[@href]    擁有href的 元素//a[@href='www..com']    href屬性值為'www..com'的 元素//book[@price>2]  price值大於2的元素

多個路含蠢徑 #

用| 連接兩個表達式,可以進行 或匹配

//book/title | //book/price

函數 #

xpath內置很多函數。更多函數查看 https://www.w3school.com.cn/xpath/xpath_functions.asp

contains(string1,string2)

starts-with(string1,string2)

ends-with(string1,string2) #不支持

upper-case(string) #不支持

text()

last()

position()

node()

可以看到last()也是個函數,在前面我們在謂語中已經提到過了

案例 #

定位元素 #

匹配多個元素,返回列表

fromlxmlimportetreeif__name__ =='__main__':doc='''

【結果為】

[<Element li at 0x2b41b749848>, <Element li at 0x2b41b749808>, <Element li at 0x2b41b749908>, <Element li at 0x2b41b749948>, <Element li at 0x2b41b749988>][]  #沒找到p元素

html = etree.HTML(doc)print(etree.tostring(html.xpath("//li[@class='item-inactive']")[0]))print(html.xpath("//li[@class='item-inactive']")[0].text)print(html.xpath("//li[@class='item-inactive']/a")[0].text)print(html.xpath("//li[@class='item-inactive']/a/text()"))print(html.xpath("//li[@class='item-inactive']/.."))print(html.xpath("//li[@class='item-inactive']/../li[@class='item-0']"))

【結果為】

b' third item \n                'None    #因為第三個li下面沒有直接text,Nonethird item  #['third item'][<Element ul at 0x19cd8c4c848>][<Element li at 0x15ea3c5b848>, <Element li at 0x15ea3c5b6c8>]

使用函數 #

contains #

有的時候,class作為選擇條件的時候不合適@class='....' 這個是完全匹配,當王爺樣式發生變化時,class或許會增加或減少像active的class。用contains就能很方便

from lxml import etreeif __name__ == '__main__':doc='''

【結果為】

[<Element p at 0x23f4a9d12c8>, <Element li at 0x23f4a9d13c8>, <Element li at 0x23f4a9d1408>, <Element li at 0x23f4a9d1448>, <Element li at 0x23f4a9d1488>]

starts-with #

from lxml import etreeif __name__ == '__main__':doc='''

【結果為】

[<Element ul at 0x23384e51148>, <Element p at 0x23384e51248>, <Element li at 0x23384e51288>, <Element li at 0x23384e512c8>, <Element li at 0x23384e51308>, <Element li at 0x23384e51388>][<Element ul at 0x23384e51148>]

ends-with #

print(html.xpath("//*[ends-with(@class,'ul')]"))

【結果為】

Traceback (most recent call last):File"F:/OneDrive/pprojects/shoes-show-spider/test/xp5_test.py",line18,inprint(html.xpath("//*[ends-with(@class,'ul')]"))File"src\lxml\etree.pyx",line1582,inlxml.etree._Element.xpathFile"src\lxml\xpath.pxi",line305,inlxml.etree.XPathElementEvaluator.__call__File"src\lxml\xpath.pxi",line225,inlxml.etree._XPathEvaluatorBase._handle_resultlxml.etree.XPathEvalError: Unregisteredfunction

看來python的lxml並不支持有的xpath函數列表

upper-case #

和ends-with函數一樣,也不支持。同樣報錯lxml.etree.XPathEvalError: Unregistered function

print(html.xpath("//a[contains(upper-case(@class),'ITEM-INACTIVE')]"))

text、last #

#最後一個li被限定了print(html.xpath("//li[last()]/a/text()"))#會得到所有的`<a>`元素的內容,因為每個<a>標簽都是各自父元素的最後一個元素。#本來每個li就只有一個<a>子元素,所以都是最後一個print(html.xpath("//li/a[last()]/text()"))print(html.xpath("//li/a[contains(text(),'third')]"))

【結果為】

['fifth item']['second item', 'third item', 'fourth item', 'fifth item'][<Element a at 0x26ab7bd1308>]

position #

print(html.xpath("//li[position()=2]/a/text()"))#結果為['third item']

上面這個例子我們之前以及講解過了

* 這里有個疑問,就是position()函數能不能像text()那樣用呢

print(html.xpath("//li[last()]/a/position()"))#結果  lxml.etree.XPathEvalError: Unregisteredfunction

這里我們得到一個結論,函數不是隨意放在哪裡都能得到自己想要的結果

node #

返回所有子節點,不管這個子節點是什麼類型(熟悉,元素,內容)

print(html.xpath("//ul/li[@class='item-inactive']/node()"))print(html.xpath("//ul/node()"))

【結果為】

[]['\n                ', , '\n                ', , '\n                ', , '\n                ', , '\n                ', , ' 閉合標簽\n            ']

獲取內容 #

**剛剛已經提到過,可以使用.text和text()的方式來獲取元素的內容

from lxml import etreeif __name__ == '__main__':doc='''

【結果為】

['first item','second item','third item','fourth item','fifth item']first item18['\n                ','\n                ','\n                ','\n                ','\n                ',' 閉合標簽\n            ']

看到這里,我們觀察到text()和.text的區別。自己總結吧。不太好表達,就不表達了

獲取屬性 #

print(html.xpath("//a/@href"))print(html.xpath("//li/@class"))

【結果為】

['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']['item-0active', 'item-1', 'item-inactive', 'item-1', 'item-0']

自定義函數 #

我們從使用函數的過程中得到結論,就是有的函數不支持,有的支持,那問題來了,到底那些方法支持呢。我們在lxml官網找到了答案。 https://lxml.de/xpathxslt.html 。lxml 支持XPath 1.0 ,想使用其他擴展,使用libxml2,和libxslt的標准兼容的方式。 XPath 1.0官方文檔  以及其他版本的XPath文檔  https://www.w3.org/TR/xpath/

lxml supports XPath1.0, XSLT1.0andthe EXSLT extensions through libxml2andlibxsltina standards compliant way.

除此之外,lxml還提供了自定義函數的方式來擴展xpath的支持度  https://lxml.de/extensions.html

from lxml import etree#定義函數def ends_with(context,s1,s2):return s1[0].endswith(s2)if __name__ == '__main__':doc='''

【結果為】

[<Element li at 0x2816ed30548>, <Element li at 0x2816ed30508>]['first item', 'third item']

形參s1會傳入xpath中的第一個參數@class,但這里注意@class是個列表

形參s2會傳入xpath中的第二個參數'active','active'是個字元串

官網例子 https://lxml.de/extensions.html

defhello(context, a):return"Hello %s"% afromlxmlimportetreens = etree.FunctionNamespace(None)ns['hello'] = helloroot = etree.XML('<a><b>Haegar</b></a>')print(root.xpath("hello('Dr. Falken')"))# 結果為 Hello Dr. Falken

⑻ Python3.10版 Win1064位無法安裝lxml庫

在練習xpath時,需要安裝lxml模塊,報錯需要 Microsoft Visual C++ 14.0 吐槽一些教程:pip install wheel,安裝無效果的 環境 window 10 python3 重裝系統後,安裝了最新的Python3.8.1,當使用pip安裝lxml庫的時候報錯Microsoft Visual C++ 14.0 is required,

前提是:1.已安裝python,2. 已安裝好pip,3.已將python安裝目錄下的scripts目錄(如D:\Python35\Scripts)添加到系統環境變數path里。

方法一:打開cmd,輸入pip install lxml。如果安裝成功的話,可以不用往下看了,人品太好了。通常呢,都會遇到各種錯誤,不是這不對,就是那裡錯,反正就是各種安裝不了。

方絕螞含法二:基本上,進到這里來看的人,應該都是已經掉到坑裡的,所以直接從這里看起就可以。推並笑薦通過物宴lxml的.whl文件來進行安裝。

閱讀全文

與pythonlxml教程相關的資料

熱點內容
java控制項位置 瀏覽:84
怎麼衡量程序員知道不知道違法 瀏覽:983
封閉式安卓系統是什麼意思 瀏覽:838
登錄mysql的命令是什麼 瀏覽:642
linux判斷是否為目錄 瀏覽:947
美的中央空調用什麼壓縮機 瀏覽:466
cisco交換機密碼加密 瀏覽:73
手機解壓7zip用什麼軟體 瀏覽:189
滑鼠指針壓縮包 瀏覽:266
加密區塊鏈交易中心 瀏覽:603
高二信息技術編程教學反思 瀏覽:545
phython開發的軟體要帶編譯器嗎 瀏覽:8
軟體壓縮文件解壓完能直接用嗎 瀏覽:857
java軟體編程課程 瀏覽:649
深圳哪裡可以租自行車app 瀏覽:342
linux空格換行 瀏覽:20
雲伺服器可以共享嗎 瀏覽:865
android強制編譯 瀏覽:488
linux內存管理原理 瀏覽:566
綉球pdf 瀏覽:498