Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 8, 2015 20:09:38

Snowman8526
Зарегистрирован: 2015-06-26
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с urllib.request

Добрый день. Решил переписать код с 2-го питона на 3-й и столкнулся с проблемой.
Было

#!/usr/bin/env python
#-*- coding: utf-8 -*-
import urllib2
try:
    URL=urllib2.urlopen(now)
except urllib2.URLError:
    pass
except urllib2.HTTPError :
    pass
fail=open('musor.txt', 'w')
URL=URL.replace('','')
fail.write(URL)
for line in open ('musor.txt'):
...

сейчас переделал в такой вид.

#!/usr/bin/env python
#-*- coding: utf-8 -*-
import urllib.request
try:
    URL=urllib.request.urlopen(now).read().decode('utf-8')
except urllib.request.URLError:
    pass
except urllib.request.HTTPError :
    pass
URL=URL.encode('utf-8')
fail=open('musor.txt', 'w', encoding='utf-8')
URL=URL.replace('','')
fail.write(URL)
for line in open ('musor.txt'):
...

что Я делаю не правильно? notpad пишет что кодировка (musor.txt) macintosh и replace не срабатывает корректно.
Написал только проблемную часть кода.
ошибка возникает на строчке (for line in open ('musor.txt')

File “C:\Python34\lib\encodings\cp1251.py”, line 23 in decode
UnicodeDecodeError: ‘charmap’ codec can't decode byte 0x98 in position 1539: character maps to <unicodefined>

Офлайн

#2 Авг. 9, 2015 05:15:15

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

проблема с urllib.request

1) хранить страницу в переменной с названием URL не совсем логично
2)

URL=urllib.request.urlopen(now).read().decode('utf-8')
URL=URL.encode('utf-8')
эт тоже самое что
>>> a = b + 3
>>> a = a - 3
3)
URL=URL.replace('','')
эмм… :| даже не знаю что и сказать
4) перед тем как файл открывать его нужно закрыть
используйте или with или close
5) проблема с кодировкой
когда все это исправите попробуйте читать файл с указанием кодировки



————————————————
-*- Simple is better than complex -*-

Офлайн

#3 Авг. 9, 2015 07:38:39

J.R.
Зарегистрирован: 2015-07-18
Сообщения: 147
Репутация: +  16  -
Профиль  

проблема с urllib.request

.

Отредактировано J.R. (Фев. 27, 2016 16:11:57)

Офлайн

#4 Авг. 9, 2015 13:37:52

Snowman8526
Зарегистрирован: 2015-06-26
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с urllib.request

terabayt
хранить страницу в переменной с названием URL не совсем логично

В моём понимании эта информация временная записывать её в файл бессмысленно. Хочу как можно меньше хранить на диске а работать с памятью

В python 2 urllib записывался как строка а в 3-м как файл? как с ним работать? Есть ли способ преобразовать его в строку? Этим проблема будет решена.

terabayt
перед тем как файл открывать его нужно закрыть
используйте или with или close
Да согласен просмотрел но на 2-м работало нормально. Исправлю

Офлайн

#5 Авг. 9, 2015 14:02:37

J.R.
Зарегистрирован: 2015-07-18
Сообщения: 147
Репутация: +  16  -
Профиль  

проблема с urllib.request

.

Отредактировано J.R. (Фев. 27, 2016 16:12:31)

Офлайн

#6 Авг. 9, 2015 15:04:20

Snowman8526
Зарегистрирован: 2015-06-26
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с urllib.request

J.R.

Тогда Я совсем не чего не понимаю вот код собрал для тестирования
import urllib.request
try:
    URL=urllib.request.urlopen('http://www.yandex.ru').read().decode('utf-8')
except urllib.request.URLError:
    pass
except urllib.request.HTTPError :
    pass    
    #очистка от лишнего мусора файлы
fail=open('musor.txt', 'w', encoding='utf-8')
fail2=open('musor2.txt', 'w', encoding='utf-8')
    #приходит страница
for line in URL:        
    #ищем http и https и заменяем его на тоже самое только с переносом строки
    line=line.replace('"http:','\n http:')
    line=line.replace('"https:','\n https:')
    #записываем в фаил для следуещего цикла (по другому не получилось)
    fail.writelines(line)    
    #читаем из файла построчно    
    for line in open ('musor.txt'):
        #ищем место где заканчиваетс¤ http
        dobl=line.find('"')
        #очищаем всЄ что не ¤вл¤етс¤ ссылкой
        line=line[:dobl] + '\n'
        #записываю в файл
        fail2.writelines(line)    
fail.close()
fail2.close()
    #Если раньше закрою то в файле musot.txt будет только "<"

Офлайн

#7 Авг. 9, 2015 15:37:33

J.R.
Зарегистрирован: 2015-07-18
Сообщения: 147
Репутация: +  16  -
Профиль  

проблема с urllib.request

.

Отредактировано J.R. (Фев. 27, 2016 16:13:30)

Офлайн

#8 Авг. 9, 2015 16:02:00

Snowman8526
Зарегистрирован: 2015-06-26
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с urllib.request

J.R.

Если бы на 2-м питоне у меня это не работало Я бы копался в коде. Может Я делал всё не правильно но он работал стабильно много дней подряд. 3-ий питон недоработан. urllib работает с огромным фризам в секунду. Приходится много лишней работы делать (перекодировать в разные форматы) раньше было логичнее.

Офлайн

#9 Авг. 9, 2015 16:03:26

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

проблема с urllib.request

Snowman8526
URL=urllib.request.urlopen(now).read().decode('utf-8')
Кодировку надо брать из ответа:
>>> import urllib.request
>>> 
>>> url = 'http://www.yandex.ru'
>>> 
>>> with urllib.request.urlopen(url) as data:
...     enc = data.info().get_content_charset('latin1')
...     text = data.read().decode(enc)
...     print(text[:100])
... 
<!DOCTYPE html><html class="i-ua_js_no i-ua_css_standart i-ua_browser_ i-ua_pseudo_yes" lang="ru"><h
>>>

Snowman8526
3-ий питон недоработан. urllib работает с огромным фризам в секунду. Приходится много лишней работы делать (перекодировать в разные форматы) раньше было логичнее.
Наоборот, второй питон - это каша-малаша в плане кодировок.

Snowman8526
Приходится много лишней работы делать (перекодировать в разные форматы) раньше было логичнее.
Ну, и не переходил бы, сидел бы там с сотней лишних функций типа range() и xrange(), input() и raw_input(), map() и itertools.imap(), zip() и itertools.izip(), регулярки там тоже через одно место. (А это всё же ещё надо учить и помнить наизусть.)
В общем, из третьего много всяких пережитков прошлого века выкинули.



Отредактировано py.user.next (Авг. 10, 2015 02:43:00)

Офлайн

#10 Авг. 9, 2015 16:22:56

J.R.
Зарегистрирован: 2015-07-18
Сообщения: 147
Репутация: +  16  -
Профиль  

проблема с urllib.request

.

Отредактировано J.R. (Фев. 27, 2016 16:14:14)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version