更新:
我的代码在大多数希伯来语页面上都可以正常工作,但在其中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 \ 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。我需要切换吗? (我不想...)
最佳答案
可能(但是很难确定,没有数据)页面是UTF-8编码的,但是HTML解析器默认为iso-8859-1(而XML解析器默认为UTF-8)
关于python - lxml:从HTML提取Unicode文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18383840/