2013-09-18 4 views
0

Я использую гусь двигатель, чтобы извлечь текст статьи из URL, используя следующий код:Джанго - UnicodeDecodeError: странный характер «»

g = Goose() 
article = g.extract(url="http://www.sportingnews.com/ncaa-football/story/2013-09-17/week-4-exit-poll-johnny-manziel-alabama-oregon-texas-mack-brown-mariota") 

Он выглядит этот URL является для некоторых проблематичных, потому что я получаю следующее ошибка:

'utf8' codec can't decode byte 0xa0 in position 1: invalid start byte 
The string that could not be encoded/decoded was: � 

Я правильно указать UTF-8, как мой кодек в верхней части моего файла, как так:

# -*- coding: utf-8 -*- 

Как я могу решить эту проблему?

EDIT: Трассировка стека:

Environment: 


Request Method: GET 
Request URL: http://localhost:3000/scansources/ 

Django Version: 1.5.1 
Python Version: 2.7.2 
Installed Applications: 
('django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'summaries', 
'sources_scan') 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware') 


Traceback: 
File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in get_response 
    115.       response = callback(request, *callback_args, **callback_kwargs) 
File "/Users/yonatanoren/Documents/python/summarizer/sources_scan/views.py" in scan_sources 
    183.    article = g.extract(url="http://www.sportingnews.com/ncaa-football/story/2013-09-17/week-4-exit-poll-johnny-manziel-alabama-oregon-texas-mack-brown-mariota") 
File "/Library/Python/2.7/site-packages/goose_extractor-1.0.2-py2.7.egg/goose/__init__.py" in extract 
    53.   return self.crawl(cc) 
File "/Library/Python/2.7/site-packages/goose_extractor-1.0.2-py2.7.egg/goose/__init__.py" in crawl 
    60.   article = crawler.crawl(crawl_candiate) 
File "/Library/Python/2.7/site-packages/goose_extractor-1.0.2-py2.7.egg/goose/crawler.py" in crawl 
    90.   article.top_node = extractor.calculate_best_node(article) 
File "/Library/Python/2.7/site-packages/goose_extractor-1.0.2-py2.7.egg/goose/extractors.py" in calculate_best_node 
    248.    text_node = self.parser.getText(node) 
File "/Library/Python/2.7/site-packages/goose_extractor-1.0.2-py2.7.egg/goose/parsers.py" in getText 
    179.   txts = [i for i in node.itertext()] 

Exception Type: UnicodeDecodeError at /scansources/ 
Exception Value: 'utf8' codec can't decode byte 0xa0 in position 1: invalid start byte 

Спасибо.

EDIT: Использование оболочки питона я получаю ту же ошибку с этим кодом:

>>> g = Goose() 
>>> article = g.extract(url="http://www.sportingnews.com/ncaa-football/story/2013-09-17/week-4-exit-poll-johnny-manziel-alabama-oregon-texas-mack-brown-mariota") 

Я также обновленное все мои файлы, чтобы использовать следующую команду и все еще получаю ошибку.

#encoding=utf-8 

Я считаю, что это может быть проблемой с самой гусью. Поскольку Goose обрабатывает текст и возвращает его. Как я могу решить это в этом случае?

EDIT: следующее не делает различия ни

text = unicode(article.cleaned_text,'utf-8') 
+0

Вы уверены, что эта ошибка вызвана вызовом 'g.extract'? Или это происходит, когда вы пытаетесь преобразовать свой результат в строку позже? –

+0

Чтобы помочь с решением, пожалуйста, опубликуйте всю ошибку трассировки стека. – danihp

+0

Комментарий 'coding' в верхней части относится только к тому, как компилятор Python интерпретирует * исходный код *; данные, считываемые из других источников или отправленные в другом месте, кодируются и декодируются в соответствии с различными правилами в целом. –

ответ

0

Может быть, это помогает использовать Юникод для всех строк: Вставка from __future__ import unicode_literals в самой первой строке вашего файла питона и повторно попробовать ...

+0

Это не сработало – yonatano

+0

Вы попробовали извлечение статьи без django в простой игрушечный проект? Вы получаете ту же ошибку? – OBu

+0

да я сделал, такой же ошибка. – yonatano

0

Попробуйте добавить немного U перед строкой. Я не вижу каких-либо странных символов там, но я обычно использую иврит в моем Джанго коде и Баш на вершине не всегда достаточно

article = g.extract(url=u"http://www.sportingnews.com/ncaa-football/story/2013-09-17/week-4-exit-poll-johnny-manziel-alabama-oregon-texas-mack-brown-mariota") 
+0

Я думаю на самом деле текст извлекается, а не URL-адрес, как я могу его решить в этом случае? – yonatano

+0

Я думаю, что ты прав. несколько вещей, которые нужно изучить: 1. измените bash на django bash (вы используете python's, вы должны использовать django's: '# encoding = utf-8') 2. использовать unicode (x, 'utf- 8 ') и другие инструменты кодирования/декодирования (включая ugettext и т. Д.) И поиграть с ним, посмотреть, что произойдет – yuvi

0

Несмотря на то, что я не могу воспроизвести ошибку с этим URL, я имел аналогичные проблемы с python-goose. Попытка:

from goose.configuration import Configuration 
from goose import Goose 


config = Configuration() 
config.parser_class = 'soupparser' # this helped me 
g = Goose(config) 
article = g.extract(url="http://www.sportingnews.com/ncaa-football/story/2013-09-17/week-4-exit-poll-johnny-manziel-alabama-oregon-texas-mack-brown-mariota") 
Смежные вопросы