导航:首页 > 编程语言 > 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算法是什么 浏览:630
程序员cc发展方向 浏览:987
智慧黑板在哪里下载app 浏览:311
男生穿衣搭配app哪个好 浏览:596
光大信用卡年费在app哪里可以看 浏览:211
如何在找机平台下载app 浏览:395
西安php工作好找吗 浏览:927
outlook命令 浏览:229
程序员那么可爱主角介绍 浏览:934
银行卡短信消息如何加密 浏览:246
文件夹怎么不重名 浏览:406
linuxyum安装java 浏览:250
java数字计算 浏览:286
java按钮文字 浏览:641
python列表互换位置 浏览:337
sw怎么删除定向命令 浏览:757
php包含数组元素 浏览:666
安卓系统开发app需要什么 浏览:730
ssh2项目源码 浏览:288
三星提供了什么服务器地址 浏览:903