Найти - Пользователи
Полная версия: Print и проблема с кодировкой
Начало » Центр помощи » Print и проблема с кодировкой
1
Madcap
Здравствуйте, я только начал изучение 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]) но я не понял ничего из примеров найденных мне в рунете, также не понял как это работает по английским мануалам. Помогите на примерчике плиз ?
Madcap
Спасибо за оперативность, сам разобрался на примере

myString = 'Hello there madcap !'
mySubString = myString[myString.find("there")+5:myString.find("!")]
print mySubString
Madcap
#!/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
но вот в таком виде не работает
py.user.next
Madcap
Команда ‘print a’ выдаёт мне код странички, которая стянулась, однако русские символы пишутся кракозябрами.
a = response.read().decode('cp1251')
Madcap
Спасибо за оперативность, сам разобрался на примере
это не по теме
Madcap
Решил использовать BeautifulSoup. Подскажите как можно реализовать следующее: пробежались по переменной, содержащей код страницы, выдернули все что находилось между тегами <span>чойтотам</span> и положили в массив.
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