Потеря кодификации при разделении строки - PullRequest
1 голос
/ 26 февраля 2012

[EDITED]

Я использую Google App Engine и пытаюсь проанализировать HTML-контент, чтобы извлечь некоторую информацию.Код, который я использую:

from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from google.appengine.api import urlfetch
import BeautifulSoup

class MainHandler(webapp.RequestHandler):
    def get(self):
        url = 'http://ascodevida.com/ultimos'
        result = urlfetch.fetch(url=url)
        # ADVS de esta página.
        res = BeautifulSoup.BeautifulSoup(result.content).findAll('div', {'class' : 'box story'})
        ADVList = []
        for i in res:
            story = i.find('a', {'class' : 'advlink'}).string
            link = i.find('a', {'class' : 'advlink'})['href']
            ADVData = {
                'adv' : story,
                'link' : link
            }
            ADVList.append(ADVData)

        self.response.headers['Content-Type'] = 'text/html; charset=UTF-8'
        self.response.out.write(ADVList)

И этот код вызывает ответ со странными символами.Я пытался использовать методы prettify () и renderContent () библиотеки BeautifulSoup, но это неэффективно.

Какие-нибудь решения?Еще раз спасибо.

Ответы [ 2 ]

2 голосов
/ 26 февраля 2012

Я разработчик java и использую jsoup для разбора HTML.Я нашел аналогичный для Python.Это может помочь вам и сэкономить ваше время.

http://www.crummy.com/software/BeautifulSoup/

Пища для мозга: Регулярное выражение Python для разбора HTML (BeautifulSoup)

0 голосов
/ 27 февраля 2012

Я думаю, что вы печатаете список напрямую, что вызывает repr , вывод по умолчанию в шестнадцатеричном формате (например, \ xe1).

вы можете попробовать это:

>>> s = u"Leer más"
>>> repr(s)
"'Leer m\\xc3\\xa1s'"

но оператор print попытается декодировать строку:

>>> print s
Leer más

, если вы хотите получить правильный результат, просто избегайте поведения по умолчанию для списка и обрабатывайте каждый элемент самостоятельно.

...