Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 13, 2009 16:04:24

Cover Story
От:
Зарегистрирован: 2008-08-26
Сообщения: 192
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup и кодировка

Всем доброго!
Пытаюсь испробовать супа и натыкаюсь на грабли. А именно, есть код:

# -*- utf-8 -*-

import urllib2, webbrowser
from BeautifulSoup import BeautifulSoup

select_list_page = 'http://www.notary.ru/notary/bd.php'

page = urllib2.urlopen(select_list_page)

soup = BeautifulSoup(page)
soup.originalEncoding

select = soup.find('ul')
option_tags = select.findAll('a')

option_tags = option_tags[0:]
for option in option_tags:
s1 = str(option)
print option
Который мне выдает не правильную кодировку текст в неправильной кодировке. Где ошибка? Причем перекодироваться он нехочет ни с помощью decode, ни с encode, ни с unicode. По крайней мере у меня. Блин целый день потратил. Мозг сломал.



Python 2.7.3
Pyside 1.1.2

Офлайн

#2 Ноя. 13, 2009 16:50:06

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

BeautifulSoup и кодировка

Cover Story
Который мне выдает не правильную кодировку текст в неправильной кодировке.
Что это такое?



Офлайн

#3 Ноя. 13, 2009 17:38:56

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

BeautifulSoup и кодировка

Куда “выдаёт”?

Офлайн

#4 Ноя. 13, 2009 17:49:17

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

BeautifulSoup и кодировка

Cover Story
возможно страница в кодировке cp1251, при этом нужно перевести её в родную кодировку:
page = urllib2.urlopen(select_list_page).decode('cp1251')

Офлайн

#5 Ноя. 14, 2009 07:33:27

Cover Story
От:
Зарегистрирован: 2008-08-26
Сообщения: 192
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup и кодировка

Спасибо lorien!
Все заработало. chardet я скачал, но что-то пока не могу установить, позже разберусь. Мне пока этого хватает



Python 2.7.3
Pyside 1.1.2

Офлайн

#6 Ноя. 21, 2009 23:15:10

rabbi
От:
Зарегистрирован: 2009-11-21
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup и кодировка

Возникла похожая проблема:

    page = urllib2.urlopen("http://irr.ru/jobs-education/education/languages/").read()
soup = BeautifulSoup(page)
print soup #выдает русские символы в кривом виде
пробую делать:

page = urllib2.urlopen("http://irr.ru/jobs-education/education/languages/").read().decode('utf-8')
выходит исключение “'utf8' codec can't decode bytes in position 94520-94521: invalid data”

chardet установил - не помогает, подскажите что не так?



Офлайн

#7 Ноя. 22, 2009 13:09:01

rabbi
От:
Зарегистрирован: 2009-11-21
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup и кодировка

Спасибо, работает)



Офлайн

#8 Фев. 1, 2010 01:30:42

sonniy
От:
Зарегистрирован: 2009-12-18
Сообщения: 84
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup и кодировка

и у меня тут танци с бубном

# -*- coding: utf-8 -*-
import urllib2
import codecs
import csv
import sys
from BeautifulSoup import BeautifulSoup



site_url = 'http://hotline.ua'
search_word = u'g900'
query_string = 'http://hotline.ua/sr/?q=%s&x=0&y=0'%search_word
page = urllib2.urlopen(query_string)
soup = BeautifulSoup(page)

i = soup.__str__()
print i
родная кодировка страници cp1251
как только я не мучал encode / decode ниче не выходит



Офлайн

#9 Фев. 1, 2010 12:49:47

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

BeautifulSoup и кодировка

А что не так? Мой хрустальный шар молчит.

PS. Один вопрос - одна тема.

Офлайн

#10 Фев. 1, 2010 14:23:13

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

BeautifulSoup и кодировка

Я решал вопросы кодировки чуть сложнее, но надежнее.
1. пытаемся получить кодировку из тега meta

META_ENCODING = re.compile( "<meta[^>]*charset=([^;\"\']*)[^>]*?>", re.I )
2. есть не удалось, определяем через chardet
3. конвертим в unicode строку используя полученную кодировку
4. подсовываем BeautifulSoup'у



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version