python怎么安装lxml html 解析器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python怎么安装lxml html 解析器相关的知识,希望对你有一定的参考价值。

  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 copy 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 copy 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 copy 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 copy 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
参考技术A (一) 首先安装wheel
命令行执行
pip install wheel

(二)下载相应版本的lxml后缀为.whl的文件
www.lfd.uci.edu/~gohlke/pythonlibs/
(三)安装lxml
进入lxml下载的根目录,按住shift然后鼠标右键选择在此处打开命令行窗口

pip install lxml_文件名.whl

(四)检验安装成功与否
任意处打开命令行窗口
python 回车

import lxml

如果没有报错就安装成功了!

---河南新华网络运营协会为您解答

Python 之lxml解析模块

lxml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML 数据。

一、lxml示例

1、初步

# 使用 lxml 的 etree 库
from lxml import etree 

text = ‘‘‘
<div>
    <ul>
         <li class="item-0"><a href="link1.html">first item</a></li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-inactive"><a href="link3.html">third item</a></li>
         <li class="item-1"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a> # 注意,此处缺少一个 </li> 闭合标签
     </ul>
 </div>
‘‘‘

#利用etree.HTML,将字符串解析为HTML文档
html = etree.HTML(text) 

# 按字符串序列化HTML文档
result = etree.tostring(html) 

print(result)

结果

<html><body>
<div>
    <ul>
         <li class="item-0"><a href="link1.html">first item</a></li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-inactive"><a href="link3.html">third item</a></li>
         <li class="item-1"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
 </div>
</body></html>

2、从文件里读取内容

from lxml import etree

# 读取外部文件 hello.html
html = etree.parse(./hello.html)
result = etree.tostring(html, pretty_print=True)

print(result)

3、html内容

<html><body>
<div>
    <ul>
         <li class="item-0"><a href="link1.html">first item</a></li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-inactive"><a href="link3.html">third item</a></li>
         <li class="item-1"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
 </div>
</body></html>

@1、获取所有的 <li> 标签

from lxml import etree

html = etree.parse(hello.html)
print type(html)  # 显示etree.parse() 返回类型

result = html.xpath(//li)

print result  # 打印<li>标签的元素集合
print len(result)
print type(result)
print type(result[0])


结果是
<type lxml.etree._ElementTree>
[<Element li at 0x1014e0e18>, <Element li at 0x1014e0ef0>, <Element li at 0x1014e0f38>, <Element li at 0x1014e0f80>, <Element li at 0x1014e0fc8>]
5
<type list>
<type lxml.etree._Element>

@2、继续获取<li> 标签的所有 class属性

from lxml import etree

html = etree.parse(hello.html)
result = html.xpath(//li/@class)

print result

结果是
[item-0, item-1, item-inactive, item-1, item-0]

@3、继续获取<li>标签下href为 link1.html 的 <a> 标签

from lxml import etree

html = etree.parse(hello.html)
result = html.xpath(//li/a[@href="link1.html"])

print result

运行结果

[<Element a at 0x10ffaae18>]

 @4、获取<li> 标签下的所有 <span> 标签

from lxml import etree

html = etree.parse(hello.html)

#result = html.xpath(‘//li/span‘)
#注意这么写是不对的:
#因为 / 是用来获取子元素的,而 <span> 并不是 <li> 的子元素,所以,要用双斜杠

result = html.xpath(//li//span)

print result

运行结果

[<Element span at 0x10d698e18>]

@5、获取 <li> 标签下的<a>标签里的所有 class

from lxml import etree

html = etree.parse(hello.html)
result = html.xpath(//li/a//@class)

print result

运行结果

[blod]

@6、获取最后一个 <li> 的 <a> 的 href

from lxml import etree

html = etree.parse(hello.html)

result = html.xpath(//li[last()]/a/@href)
# 谓语 [last()] 可以找到最后一个元素

print result

运行结果

[link5.html]

@7、获取倒数第二个元素的内容

from lxml import etree

html = etree.parse(hello.html)
result = html.xpath(//li[last()-1]/a)

# text 方法可以获取元素内容
print result[0].text

运行结果

fourth item

@8、获取 class 值为 bold 的标签名

from lxml import etree

html = etree.parse(hello.html)

result = html.xpath(//*[@class="bold"])

# tag方法可以获取标签名
print result[0].tag

运行结果

span

 

以上是关于python怎么安装lxml html 解析器的主要内容,如果未能解决你的问题,请参考以下文章

python模块--BeautifulSoup4 和 lxml

python的lxml解析器

网页解析器

Python操作XML和HTML,LXML类库的使用

Python+requests 爬取网站遇到中文乱码怎么办?

python lxml库怎么安装