Ошибка Python: lxml + tidylib / Я хотел бы решить grabled персонажа
Каждый.
Пожалуйста, позвольте мне задать следующий вопрос.
Я использую Python 2.6, и я написал этот скрипт.
Но я получил ошибку.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import cchardet, urllib2
import lxml.html
from tidylib import tidy_document
class ParseHTML(object):
def __init__(self, html):
self.charset = cchardet.detect(html)['encoding']
self.html = html
self.html = self.html.decode(self.charset) # lineA
self.document, self.errors = tidy_document(self.html)
self.dom = lxml.html.fromstring(self.document)
def getTitle(self):
self.title = self.dom.xpath('//title')[0].text
return self.title.strip()
url = r'http://www.asahi.com/articles/ASG2B5T0ZG2BUHBI131.html?iref=comtop_6_01'
response = urllib2.urlopen(url)
html = response.read()
parse = ParseHTML(html)
title = parse.getTitle()
print title
Тогда у меня есть ошибка.
ValueError: Unicode strings with encoding declaration are not supported.
Если я закомментирую строку A, сценарий работает, однако, последствия искажаются.
Меня беспокоит искаженный характер.
Я хотел бы решить проблему характера с помощью HTML Tidy.
Как мне изменить этот скрипт?
Любой совет?
Спасибо.
1 ответ
Это использует только lxml
>>> from lxml import etree
>>> with open('out.html', 'w') as f:
... root = etree.parse(url, etree.HTMLParser())
... title = root.xpath('//title/text()')[0]
... f.write(title.encode("utf-8"))
загрузка out.html в браузере показывает:
中国・台湾、窓口役の担当閣僚が会談 49年の分断後初:朝日新聞デジタル