Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 4, 2011 16:38:34

Madcap
От:
Зарегистрирован: 2011-12-04
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Print и проблема с кодировкой

Здравствуйте, я только начал изучение python. Передо мной стоит задача запарсить html по url для последующего выдергивания строк и записи их в SQL базу данных. На данный момент у меня есть следующий код:

import urllib2
request = 'http://maps.google.ru/maps/place?cid=7510474565088668412&q=%D1%8F%D0%BA%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D1%8F,+%D1%89%D0%B5%D0%BB%D0%BA%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B5+%D1%88%D0%BE%D1%81%D1%81%D0%B5+68&hl=ru&ie=UTF8&ll=55.813279,37.797496&spn=0.000012,0.000021&t=m&z=16&vpsrc=0'
response = urllib2.urlopen(request)
a = response.read()
print a
Команда ‘print a’ выдаёт мне код странички, которая стянулась, однако русские символы пишутся кракозябрами. Понятное дело, что проблема в кодировке. Сижу под 7 32bit, юзаю IronPythone 2.7.1. У брата тоже 7ка, но у него питон Cygwin и там все хорошо. Можно как-то для print кодировку выставить ? Т.к. насколько я понял в начале кода втыкать явное указание кодировки не вариант, ибо на I/O не скажется никак.

Еще объясните пожалуйста. Я понимаю так: я запрашиваю сайт, он отвечает мне в какой-то кодировке. Ответ его для питона всего лишь набор байт. Эти байты превратятся в строку в какой-то внутренней кодировке питона. А потом когда строка выводится наружу с помощью print она тоже преобразуется в какую-то кодировку ? Если да, то в какую ? Какую кодировку использует баш питона ? Как мне вывести print в нужной мне кодировке ? Заранее спасибо.

пробовал делать так

print a.encode("cp1251")
пусто, не выводит ничего, может это только для литералов ?

UPD: в интернете прочитал, что кодировка не поддерживается IronPython, поставил Cygwin, Python под него, с ним все работает.

Двигаюсь дальше. Я положил в переменную “а” код html странички, которая стянулась через urllib2, мне нужно найти в нем часть текста (комментарий пользователя на страничке), которая содержится между тегами <span></span>. Подскажите как это сделать ? Я так понимаю str.find(sub[, start]) но я не понял ничего из примеров найденных мне в рунете, также не понял как это работает по английским мануалам. Помогите на примерчике плиз ?



Отредактировано (Дек. 4, 2011 19:34:37)

Офлайн

#2 Дек. 4, 2011 21:37:50

Madcap
От:
Зарегистрирован: 2011-12-04
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Print и проблема с кодировкой

Спасибо за оперативность, сам разобрался на примере

myString = 'Hello there madcap !'
mySubString = myString[myString.find("there")+5:myString.find("!")]
print mySubString



Офлайн

#3 Дек. 4, 2011 22:28:33

Madcap
От:
Зарегистрирован: 2011-12-04
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Print и проблема с кодировкой

#!/usr/bin/python
# -*- coding: cp1251 -*-

import urllib2
request = 'http://maps.google.ru/maps/place?cid=7510474565088668412&q=%D1%8F%D0%BA%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D1%8F,+%D1%89%D0%B5%D0%BB%D0%BA%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B5+%D1%88%D0%BE%D1%81%D1%81%D0%B5+68&hl=ru&ie=UTF8&ll=55.813279,37.797496&spn=0.000012,0.000021&t=m&z=16&vpsrc=0'
response = urllib2.urlopen(request)
htmlcontent = response.read()

comment = htmlcontent[htmlcontent.find("readonly-first-n"+2:htmlcontent.find("<")]

print comment
но вот в таком виде не работает



Офлайн

#4 Дек. 5, 2011 01:11:21

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9847
Репутация: +  853  -
Профиль   Отправить e-mail  

Print и проблема с кодировкой

Madcap
Команда ‘print a’ выдаёт мне код странички, которая стянулась, однако русские символы пишутся кракозябрами.
a = response.read().decode('cp1251')
Madcap
Спасибо за оперативность, сам разобрался на примере
это не по теме



Онлайн

#5 Дек. 5, 2011 10:37:12

Madcap
От:
Зарегистрирован: 2011-12-04
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Print и проблема с кодировкой

Решил использовать BeautifulSoup. Подскажите как можно реализовать следующее: пробежались по переменной, содержащей код страницы, выдернули все что находилось между тегами <span>чойтотам</span> и положили в массив.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version