Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 27, 2008 13:54:03

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

BeautifulSoup, urllib2 - фокусы с кодировками

# -*- 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.



Офлайн

#2 Апрель 27, 2008 15:17:37

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup, urllib2 - фокусы с кодировками

ну. если ты делаешь abcde = f.read(),
то весь файл f считывается целиком, и супу остается пустая строка. Соотвественно ругаться ему не на что =)



Отредактировано (Апрель 27, 2008 15:19:19)

Офлайн

#3 Апрель 27, 2008 15:46:46

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

BeautifulSoup, urllib2 - фокусы с кодировками

Спасибо!
Что надо сказать супу, чтобы прочитал? Файл в кодировке cp1251 сервером отдаётся, вроде.



Офлайн

#4 Апрель 27, 2008 17:23:08

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

BeautifulSoup, urllib2 - фокусы с кодировками

Сдругими URL того же сайта работает, вроде.
Например, с http://www.elitestatus.ru/mebel.php?id_cat=6&id_fab=62.
Не могу понять, в чём разница…



Офлайн

#5 Апрель 27, 2008 19:18:30

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

BeautifulSoup, urllib2 - фокусы с кодировками

Поставил ActivePython 2.5.2.2 - не помогло.
http://mail.python.org/pipermail/python-bugs-list/2007-February/037082.html
Помогло. Вроде заработало.



Офлайн

#6 Апрель 28, 2008 14:58:43

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup, urllib2 - фокусы с кодировками

У меня все работает =)
Ошибок не пишет. Попробуй или просто декодировать в юникод или перекодировать в utf-8.

data = f.read()
data = data.decode('cp1251')
#или так
data = data.decode('cp1251').encode('UTF8')
soupLin = BeautifulSoup(data)



Офлайн

#7 Апрель 28, 2008 21:30:02

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

BeautifulSoup, urllib2 - фокусы с кодировками

Нет, без патча в посте #5 у меня не работает. Ни с decode, ни с encode.
С патчем же работает во всех ситуациях.
shiza, у тебя WinXP?



Офлайн

#8 Апрель 28, 2008 22:49:20

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup, urllib2 - фокусы с кодировками

да. winxp
может ошибка вылезает не при импорте в суп.
а при выводе на коносль после супа?
а ведь консоль имеет кодировку cp866



Офлайн

#9 Апрель 28, 2008 23:04:40

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

BeautifulSoup, urllib2 - фокусы с кодировками

Нет, при импорте в суп. Ошибка ведь имеет номер строки :).



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version