Найти - Пользователи
Полная версия: BeautifulSoup, urllib2 - фокусы с кодировками
Начало » Python для экспертов » BeautifulSoup, urllib2 - фокусы с кодировками
1
Все ники заняты
# -*- coding: utf-8 -*-
import codecs, sys, os
import tempfile
import subprocess
import glob
from BeautifulSoup import BeautifulSoup
import datetime
import urllib2
import re
sys.stdout = codecs.getwriter('cp866')(sys.stdout, errors='replace')
f = urllib2.urlopen(urllib2.Request('http://www.elitestatus.ru/mebel.php?id_cat=6&id_fab=94'))
abcde = f.read()
soupLin = BeautifulSoup(f.read())
Приведённый код отрабатывает без ошибок. Если же убрать строку
abcde = f.read()
возникает ошибка на строке “soupLin = BeautifulSoup(f.read())”:
UnicodeDecodeError: ‘ascii’ codec can't decode byte 0xf2 in position 0: ordinal not in range(128)
Не могу понять, что происходит, крыша съехала полностью :(.
WinXP, ActivePython 2.5.1.1.
shiza
ну. если ты делаешь abcde = f.read(),
то весь файл f считывается целиком, и супу остается пустая строка. Соотвественно ругаться ему не на что =)
Все ники заняты
Спасибо!
Что надо сказать супу, чтобы прочитал? Файл в кодировке cp1251 сервером отдаётся, вроде.
Все ники заняты
Сдругими URL того же сайта работает, вроде.
Например, с http://www.elitestatus.ru/mebel.php?id_cat=6&id_fab=62.
Не могу понять, в чём разница…
Все ники заняты
Поставил ActivePython 2.5.2.2 - не помогло.
http://mail.python.org/pipermail/python-bugs-list/2007-February/037082.html
Помогло. Вроде заработало.
shiza
У меня все работает =)
Ошибок не пишет. Попробуй или просто декодировать в юникод или перекодировать в utf-8.
data = f.read()
data = data.decode('cp1251')
#или так
data = data.decode('cp1251').encode('UTF8')
soupLin = BeautifulSoup(data)
Все ники заняты
Нет, без патча в посте #5 у меня не работает. Ни с decode, ни с encode.
С патчем же работает во всех ситуациях.
shiza, у тебя WinXP?
shiza
да. winxp
может ошибка вылезает не при импорте в суп.
а при выводе на коносль после супа?
а ведь консоль имеет кодировку cp866
Все ники заняты
Нет, при импорте в суп. Ошибка ведь имеет номер строки :).
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB