更新
我的代码在大多数希伯来语页面上工作正常,但是在10%的页面上失败了。我不幸的是从两个“坏”开始
以下是“好”页面的示例:http://m.sport5.co.il/Pages/Article.aspx?articleId=154765,
这是一个“坏”的:http://www.havoda.org.il/Web/Default.aspx
我仍然需要处理坏的问题,我仍然不知道如何...
原始问题:
我正在使用 lxml.html 来解析HTML,并仅提取文本(稍后用于文本分类)。我无法妥善处理unicode(希伯来文,在我的情况下)。
树元素似乎没有正确编码:
当我查看element[i].text
type(element[i].text) = UnicodeType
时,我看到类似这样的内容:“ u'\ xd7 \ x9e \ xd7 \ xa9 \ xd7 \ x94 \ xd7 \ xa9 \ xd7 \ xa8 \ xd7 \ xaa(1955-1954)'“,这不对 - 这个实体无法编码或解码! (或者我还没有找到......)打印它当然会带来这样的东西:“×ש×שרת(1955-1954)”,那就是不是希伯来语...
可行的文本字符串应如下所示:
1. u'\ u05de \ u05e9 \ u05d4 \ u05e9 \ u05e8 \ u05ea(1955-1954)' - 正确的 unicode字符串;或:
2. '\ xd7 \ x9e \ xd7 \ xa9 \ xd7 \ xa8 \ xd7 \ xa9 \ xd7 \ xa8 \ xd7 \ xaa(1955-1954)' - 将unicode编码为常规文本串;但不是:
3. u'\ xd7 \ x9e \ xd7 \ xa9 \ xd7 \ xa8 \ xd7 \ xd7 \ xa8 \ xd7 \ xaa(1955-1954)' - 一个无用的混合实体('ascii'编解码器无法解码字节...)
我该怎么做才能解决它?我究竟做错了什么?这是我正在使用的代码:
import lxml.html as lh
from types import *
f = urlopen(url)
html = f.read()
root = lh.fromstring(html)
all_elements = root.cssselect('*')
all_text = ''
for i in range(len(all_elements)):
if all_elements[i].tag not in ['script','style']:
if type(all_elements[i].text) in [StringType, UnicodeType]:
all_text = all_text + all_elements[i].text.strip() + ' '
使用纯英语(非unicode)html,一切正常。
这里几乎所有的答案都是指 lxml.etree ,而不是我正在使用的 lxml.html 。我需要切换吗? (我不想......)
答案 0 :(得分:1)
可能(但很难确定没有数据),页面是UTF-8编码的,但HTML解析器默认为iso-8859-1(而不是默认为UTF-8的XML解析器)