Форум сайта python.su
0
Добрый день. Решил переписать код с 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'): ...
Офлайн
103
1) хранить страницу в переменной с названием URL не совсем логично
2)
URL=urllib.request.urlopen(now).read().decode('utf-8') URL=URL.encode('utf-8')
>>> a = b + 3 >>> a = a - 3
URL=URL.replace('','')
Офлайн
.
Отредактировано J.R. (Фев. 27, 2016 16:11:57)
Офлайн
0
terabayt
хранить страницу в переменной с названием URL не совсем логично
terabaytДа согласен просмотрел но на 2-м работало нормально. Исправлю
перед тем как файл открывать его нужно закрыть
используйте или with или close
Офлайн
.
Отредактировано J.R. (Фев. 27, 2016 16:12:31)
Офлайн
0
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 будет только "<"
Офлайн
.
Отредактировано J.R. (Фев. 27, 2016 16:13:30)
Офлайн
0
J.R.
Офлайн
857
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)
Офлайн
.
Отредактировано J.R. (Фев. 27, 2016 16:14:14)
Офлайн