python lxml中文乱码问题解决方法

lxml是Python语言里和XML以及HTML工作的功能最丰富和最容易使用的库。lxml是为libxml2和libxslt库的一个Python化的绑定。它与众不同的地方是它兼顾了这些库的速度和功能完整性,以及纯Python API的简洁性,大部分与熟知的ElementTree API兼容但比之更优越。

安装lxml:

要求:需要Python2.3或更后的版本

使用easy_install工具,以超级用户或管理员的角色run下面的命令:

easy_install lxml

在windows下,最好指定版本号:easy_install lxml==2.2.6

1、要保证传给lxml的参数都是unicode

2、用 urlopen() 抓到的 file-like object ,或者用open()打开的硬盘上的 file object 不一定是unicode

3、用 unicode(file-like-object.read(),"utf-8") 能得到肯定是unicode的东西

4、这样处理之后再传给lxml的fromstring

5、xml.etree.ElementTree 也是一样

6、虽然lxml.html.parse()可以接受file-like object 作为参数,但是不要用,因为你传进去一个file-like object 你也不知道是不是unicode,万一有中文就会有乱码。

7、总是用unicode(file-like-object.read(),"utf-8") 这么转换对性能肯定是不好,但目前我也只会这种笨方法

应用到代码中如下,请大家参考:

#!/usr/bin/env python
# -*- coding: utf_8 -*-
# Date: 2016/2/14
# Created by 独自等待
import urllib2
from lxml import etree
from lxml.html.clean import Cleaner

def getText(url):
    '''
    获取指定url返回页的所有文字
    :param url: 需要抓取的url
    :return: 返回文字
    '''
    page = urllib2.urlopen(url, timeout=10).read()
    page = unicode(page, "utf-8")  # 转换编码,否则会导致输出乱码
    cleaner = Cleaner(style=True, scripts=True, page_structure=False, safe_attrs_only=False)  # 清除掉CSS等
    str = etree.HTML(cleaner.clean_html(page))
    texts = str.xpath('//*/text()')  # 获取所有文本
    for t in texts:
        print t.strip().encode('gbk', 'ignore')

getText('http://www.111cn.net/')

时间: 2024-09-02 10:36:34

python lxml中文乱码问题解决方法的相关文章

Python2.x中文乱码问题解决方法

  这篇文章主要介绍了Python2.x中文乱码问题解决方法,本文解释问题原因.给出了处理办法并讲解了编码解码的一些知识,需要的朋友可以参考下 Python中乱码问题是一个很头痛的问题. 在Python3中,对中文进行了全面的支持,但在Python2.x中需要进行相关的设置才能使用中文.否则会出现乱码 [问题原因] 在Python2.x中主要是字符编码的问题,处理不好的话,会导致乱码.Python默认采取的ASCII编码,字母.标点和其他字符只使用一个字节来表示,但对于中文字符来说,一个字节满足

jsp 中 ActionForm中文乱码问题解决方法

  jsp教程 中 actionform中文乱码问题解决方法 先我们来了解一下actionform actionform概念 actionform用于封装用户的请求参数,而请求参数是通过jsp页面的表单域传递过来的.因此应 保证actionform的参数,与表单域的名字相同. 编辑本段actionform配置 所有的actionform都被配置在struts-config.xm l文件中,该文件包括了一个form-beans的元素, 该元素内定义了所有actionform,每个actionfor

跨浏览器PHP下载文件名中的中文乱码问题解决方法

 这篇文章主要介绍了跨浏览器PHP下载文件名中的中文乱码问题解决方法,涉及php针对中文编码的转码技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了跨浏览器PHP下载文件名中的中文乱码问题解决方法.分享给大家供大家参考.具体如下:   代码如下: <?php $ua = $_SERVER["HTTP_USER_AGENT"]; $filename = "中文 文件名.txt"; $encoded_filename = urlencode(

跨浏览器PHP下载文件名中的中文乱码问题解决方法_php技巧

本文实例讲述了跨浏览器PHP下载文件名中的中文乱码问题解决方法.分享给大家供大家参考.具体如下: 复制代码 代码如下: <?php $ua = $_SERVER["HTTP_USER_AGENT"]; $filename = "中文 文件名.txt"; $encoded_filename = urlencode($filename); $encoded_filename = str_replace("+", "%20",

PHP中使用file_get_contents抓取网页中文乱码问题解决方法_php技巧

本文实例讲述了PHP中使用file_get_contents抓取网页中文乱码问题解决方法.分享给大家供大家参考.具体方法如下: file_get_contents函数本来就是一个非常优秀的php自带本地与远程文件操作函数,它可以让我们不花吹挥之力把远程数据直接下载,但我在使用它读取网页时会碰到有些页面是乱码了,这里就来给各位总结具体的解决办法. 根据网上有朋友介绍说原因可能是服务器开了GZIP压缩,下面是用firebug查看我的网站的头信息,Gzip是开了的,请求头信息原始头信息,代码如下: 复

python 写入csv乱码问题解决方法_python

需求背景 最近为公司开发了一套邮件日报程序,邮件一般就是表格,图片,然后就是附件.附件一般都是默认写到txt文件里,但是PM希望邮件里的附件能直接用Excel这种软件打开,最开始想保存为Excel,但是一想Excel的文件体积会多出好多倍,csv文件默认也是使用Excel打开的,但是根本还是文本文件,体积小,保存也方便,于是最终决定使用csv模块来保存文件. Python写csv文件 Python提供了内置模块读写csv文件,这里我只用到了写,读这里就不做介绍了,也不难,主要是解决乱码问题. d

Windows下利用Gvim写PHP产生中文乱码问题解决方法_php技巧

首先:找出乱码产生的原因. 一直以为是浏览器的原因,结果我在chrome,firefox,IE9里面都出现了乱码,所以浏览器的因素可以排除.为了验证我猜测是Gvim的原因, 我用记事本(note)简单写了一个php文件 复制代码 代码如下: <?php echo "你好"; echo "世界"; ?> 结果没有出现乱码,所以问题就出在Gvim上,这个结论水到渠成. 于是,开始研究Gvim的配置文件(_vimrc), 现在给大家看一下我产生乱码之前的配置(

读mysql中文乱码问题解决方法

一般来说,乱码的出现有2种原因,首先是由于编码(charset)设置错误,导致浏览器以错误的编码来解析,从而出现了满屏乱七八糟的"天书",其次是文件被以错误的编码打开,然后保存,比如一个文本文件原先是GB2312编码的,却以UTF-8编码打开再保存.要解决上述乱码问题,首先需要知道开发中哪些环节涉及到了编码: 1.文件编码:指的是页面文件(.html,.php等)本身是以何种编码来保存的.记事本和Dreamweaver在打开页面时候会自动识别文件编码因而不太会出问题.而ZendStud

JSP中文乱码问题解决方法小结

js|解决|问题|中文|中文乱码 在使用JSP的过程中,最使人头疼的一个问题就是中文乱码问题,以下是我在软件开发中遇到的乱码问题以及解决方法. 1.JSP页面乱码 这种乱码的原因是应为没有在页面里指定使用的字符集编码,解决方法:只要在页面开始地方用下面代码指定字符集编码即可, 2.数据库乱码 这种乱码会使你插入数据库的中文变成乱码,或者读出显示时也是乱码,解决方法如下: 在数据库连接字符串中加入编码字符集 String Url="jdbc:mysql://localhost/digitgulf?