lxml:从HTML中提取unicode文本



更新:
我的代码在大多数希伯来语页面上运行良好,但在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\xd\xa8\xd7_xaa(1955-1954)'",这是不对的-这个实体无法编码或解码!(或者我还不知道怎么…)印刷它当然会带来这样的东西:"××××)××ת(1955-1954)",这不是希伯来语。。。

一个可行的文本字符串应该如下所示:
1.u'\u05de\u05e9\u05d4\u05e9 \u05e8\u05ea(1955-1954)'-一个适当的unicode字符串;或:
2.'\xd7\x9e\xd7\xa9\xd7\\x94\xd7\\xa9\xdon\xa8\xd7\\ xaa(1955-1954)'-编码为规则文本字符串的unicode;但不是:
3.u'\xd7\x9e\xd7\xa9\xd7\\x94\xd7\\xa9\xd7\xa8\xd7_xaa(1955-1954)'-一个无用的混合实体("scii"编解码器无法解码字节…)

我该怎么解决它?我做错了什么?这是我正在使用的代码:

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。我必须转换吗?(我不想…)

可能(但如果没有数据,很难确定),页面是UTF-8编码的,但HTML解析器默认为iso-8859-1(与默认为UTF-8的XML解析器相反)

最新更新