更新:
我的代码在大多数希伯来语页面上都可以正常工作,但在其中 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
, wheretype(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\x94 \xd7\xa9\xd7\xa8\xd7\xaa (1955-1954)' - Unicode 编码为常规文本字符串;但不是:
3. u'\xd7\x9e\xd7\xa9\xd7\x94 \xd7\xa9\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 。我必须切换吗?(我不想……)