`
caicono
  • 浏览: 6032 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

lxml 使用试水记

阅读更多

本人python菜鸟一个,近期对python比较感兴趣,写下安装lxml包,并且在程序开发过程中的一些心得体会和原始记录,方便以后自己查看。

里面包括lxml安装相关问题,unicode编码问题。

纯为了自己记录而已,格式和顺序都比较乱。

 

  • Setuptools 和 easyInstall的关系?

setuptools是对python的package Index(CPAN PyPI distutils eggs package management)进行管理的工具,一般python安装后会自动安装setuptools,而且里面包含easyInstall脚本工具以及exe文件(windows平台上)

 

  • python工具包的后缀名是.egg,.egg 是windows平台上的二进制文件,可以直接被程序easyInstall调用。

 

 

目前的setuptools只能支持到python 2.6版本,而python3.1的setuptools没有官方版本。有网友开发出了可兼容python3的setuptools. http://regebro.wordpress.com/2009/02/01/setuptools-and-easy_install-for-python-3/

同时指出,当前支持3.1的python库还不多。不过距离当时发表时间已经过去1年了,不知目前的python 3.1的package库支持能力如何。

 

因为我只是需要lxml包的基本功能,就不在安装包版本上花费过多精力,转向2.6版本的python继续开发??

 

  1. http://codespeak.net/lxml/ ,下载lxml包。最新版本2.2.4,09年11月11日发布。
  2. 然后根据instruction进行安装:http://codespeak.net/lxml/installation.html
  3. 在此之前有两个依赖包。先不管。
  4. 获取工具(也是基于python的一个功能模块)easy_install(Easy Install is a python module (easy_install) bundled with setuptools that lets you automatically download, build, install, and manage Python packages.)windows平台上,Pyhon 2.6版本会之间附带上easy_install.exe,但在3.1版本安装目录下,没有这个安装文件。而且,pyhon3.1没有easy_install工具。那么3.1如何安装更新包呢? 不解。

 

 

Dov Reshef wrote:

> I'm trying to install lxml 2.2.2 for python 3.1. (I'm using the egg for

> python version 3, simply unpacking it to the site-packages folder). However,

> when I try to use it in my code I get "ImportError: DLL load failed", which

> if I understand it correctly, means that it can't find the etree.dll even

> though it's right there in my site-packages folder (etree.pyd).

 

3.1 isn't 3.0 compatible, I guess.

We don't currently have binary eggs for 3.1, sorry.

 

  1. 只能换到2.6平台,重新将上面的工作继续一遍.

 

C:\Documents and Settings\Administrator>easy_install

Easy_install 总是不能在其它目录下运行,明明将D:\Python26\Scripts;加入了path路径。后来发现D:\Python26\Scripts;必须在D:\Python26这个路径之后,系统才能将其识别。

 

下载lxml-2.2.4-py2.4-win32.egg,然后运行安装程序:

C:\Documents and Settings\Administrator>easy_install C:\lxml-2.2.4-py2.4-win32.egg

终于将lxml装入python2.6的库中。

在文件夹:D:\Python26\Lib\site-packages 可以看到新增了lxml-2.2.4-py2.4-win32.egg文件夹以及一些新的文件。

 

在python 2.6运行cmd中,终于可以import lxml了

Python3中显然依然不能导入lxml,因为目前无法安装。

 

 

终于用一种比较dirty的方式实现了对pdf文档加书签,但是还没有解决将中文写入xml文档。

 

因为在写入中文时出现错误:

        name = etree.SubElement(bookmark,'Name')

        name.text = ""+item[0]

ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes

 

读取中文txt文件需要指定编码方式,否则open函数不知如何对字节进行解码为相应的字符。

发现windows平台上python默认的编码格式为:cp936

print(locale.getpreferredencoding())

 

而且在IDLE编辑器中有一个默认设置:# -*- coding: cp936 -*-

这个好像就是将平台的编码格式设定为cp936的语句。不是,我将其改成utf-8, getpreferredencoding输出的依然是cp936.因为这是制定为py文件中非ascii字符的编码方式。

 

因为python2.6不支持open(‘’,encoding=’utf-8’)的语法,只好采用codecs包的open方法,但是用utf-8编码方式入读中文文件依然出现error。

import codecs

    book_file = codecs.open('bookmark-logic.txt','r')

  File "D:\Python26\lib\encodings\utf_8.py", line 16, in decode

    return codecs.utf_8_decode(input, errors, True)

UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-1: invalid data

此时很明显是因为输入文件就不是用utf-8方式编码的。解决方法,用记事本将输入文件改成utf-8编码保存后即可。

 

但是又出现新问题,生成的文档无法正常显示中文。这是为何??问题肯定出在这一句:

name.text = item[0]

item的编码方式是utf-8,直接赋值给text,text可能会是unicode或者原始字符类型str,不一样。为何显示出来的unicode会是这种编码形式呢?

 

text type is: <type 'unicode'>

item type is: <type 'unicode'>

text type is: <type 'unicode'>

item type is: <type 'unicode'>

text type is: <type 'str'>

item type is: <type 'unicode'>

 

 

<?xml version="1.0" encoding="utf-8" ?>

<Bookmarks>

  <Bookmark>

    <Name>&#65279;&#20013;&#25991;</Name>

    <page>46</page>

    <level>1&#13;

</level>

 

对item中的中文进行utf-8编码有问题。因为item[0]本身是unicode对象。

name.text = (""+item[0]).encode('utf-8')

ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes

name.text = (""+item[0]).decode('utf-8')

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

 

 

题外话,在这一次python3转2.6的过程中,发现语法差异还是不小:

比如2中不支持:  #print('list display:{} {};'.format(count,item))

在3之前的版本,print都不是一个函数。

 

分享到:
评论

相关推荐

    python lxml使用文档

    美国新墨西哥理工大学的官方教程,详细说明了如何利用python lxml模块进行xml进行解析 比lxml官方教程更清晰易懂,共56页

    python lxml使用了手册

    介绍了lxml这个xml包的使用,推荐~

    lxml-lxml-3.3.zip

    lxml3.3安装包

    Python lxml模块的基本使用方法分析

    本文实例讲述了Python lxml模块的基本使用方法。分享给大家供大家参考,具体如下: 1 lxml的安装 安装方式:pip install lxml 2 lxml的使用 2.1 lxml模块的入门使用 导入lxml 的 etree 库 (导入没有提示不代表不能用...

    Python程序设计:使用lxml库解析页面.pptx

    知识点:使用lxml库 对页面进行解析 lxml库 简介 lxml 是一种使用 Python 编写的库,可以迅速、灵活地处理 XML 和 HTML。 它支持 XML Path Language (XPath) 和 Extensible Stylesheet Language Transformation ...

    lxml win32 python

    lxml win32 python

    lxml, python的lxml工具箱.zip

    lxml, python的lxml工具箱 什么是 lxml?lxml是在 python 语言中处理XML和HTML的最丰富的特性和easy-to-use库。 它也非常快和记忆友好,只是你知道。有关介绍和进一步的文档,请参见文档/主。txt文档。有关安装信息...

    lxml 是 Python 的第三方解析库lxml-4.9.3-cp311-cp311-win-amd64

    lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 Xpath 表达式提供了良好的支持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。

    lxml安装包

    lxml.exe安装包

    python模块: lxml

    包含:libxml2-2.9.4.tar.gz libxslt-1.1.28.tar.gz lxml-3.8.0.tar.gz 步骤参考: 1)tar -zxvf libxml2-2.9.4.tar.gz cd libxml2-2.9.4 ./configure --prefix=/usr/local/libxml2/ --with-python=/usr/local/...

    lxml python2.7离线安装包

    lxml python2.7离线安装包

    python爬虫实例(使用requests、lxml、xlwt模块)

    短时间迅速学会使用python3爬虫,了解并学习使用requests、lxml、xlwt库。实列中以爬Q房网为例。

    lxml-4.5.0.tgz

    lxml 上传的积分,有几分的也可以下载,我是用积分下载我要的 python3.8 所以选择的是"lxml‑4.3.3‑cp38‑cp38m‑win32.whl

    lxml-3.6.4-win32安装包(whl).rar

    lxml-3.6.4-cp35-cp35m-win32.whl 安装进入所在目录,执行: pip install wheel pip install lxml-3.6.4-cp35-cp35m-win32.whl 因在windows10 64bit中,python3.5下安装lxml失败,报gcc错误,提示“fatal error C...

    lxml python win32安装

    lxml是一种使用 Python 编写的库,可以迅速、灵活地处理 XML。

    lxml详解.rar

    第一章 XML基础速成 第二章 彻底掌握python中的lxml (一) 第三章 彻底掌握python中的lxml (二) lxml封装 ... 代码及讲解非常全面

    Python lxml安装文件

    Python lxml安装文件,覆盖Python2.7、3.4、3.5、3.6、3.7版本,64位。

    lxml-3.7.3-win32

    lxml-3.7.3-win32

    python lxml3.8.0 源包

    官网上下载不了的,可以从这里下载。

Global site tag (gtag.js) - Google Analytics