Форум сайта python.su
1
Здравствуйте!
Вот есть небольшая проблемка с записью html кода web сайта в текстовый файл…
Программка запрашивает у пользователя url, затем спрашивает его о дальнейших действиях(функциях), одна из которых - запись html в текстовый файл
Ну вот собственно…
from urllib.request import urlopen def page(url): ''' Читает исходник из переданного аргумента(адреса) ''' return urlopen(url).read() # Вернуть исходник def printer(): ''' Выводит весь исходный код в командную строку ''' print(get_url) def record_file(): ''' Записывает исходник в файл ''' f_url = open("%s %s" % (just,".txt"), "w") # Открыть текстовый файл для записи f_url.write(get_url) # Записать в файл исходник(из get_url) f_url.close # Закрыть l_demo = [] # Создать пустой словарь while 1: # Бесконечный цикл... try: ent_url = input("Введите url адрес, в виде www.python.org...") # Запрос адреса just = ent_url # Запомнить введенный адрес в переменной just l_demo.append(ent_url) # Добавить его в словарь print(l_demo, "Минутку...") # Вывести содержимое словаря и сообщение if l_demo[0][:7] == 'http://': # Если протокол введен... get_url = page(l_demo[0]) # Передать адрес функции page() и создать объект функции print("Все верно!!!!!!!") else: fixed = "http://" + l_demo[0] # Если не введен, добавить путем создания новой переменной get_url = page(fixed) # Так же передать адрес функции page() print("Ага!..") l_demo.remove(ent_url) # Удалить адрес из словаря except: # Адрес введен неверно print("Адрес не действителен!") rec_out = input("Записать исходник в файл или вывести тут? \nВведите для выбора: R/O") if rec_out == 'R': printer() else: record_file()
TypeError: must be str, not bytes
Офлайн
173
Нужно или открыть файл в бинарном режиме (опция “wb”) и записывать в него “байты” (bytes) . Или открывать файл в текстовом режиме (“w”), но с указанием кодировки
open(filename, 'w', encoding='some-encoding')
f.write(s.decode('utf8'))
Офлайн
1
reclosedev
Нужно или открыть файл в бинарном режиме (опция “wb”) и записывать в него “байты” (bytes) . Или открывать файл в текстовом режиме (“w”), но с указанием кодировки
open(filename, ‘w’, encoding='some-encoding')
и записывать сроку (str)
f.write(s.decode('utf8'))
Но в этом случае нужно знать кодировку страницы.

#!/usr/bin/env python3 from urllib.request import urlopen def page(url): ''' Читает исходник из переданного аргумента(адреса) ''' return urlopen(url).read() # Вернуть исходник def printer(): ''' Выводит весь исходный код в командную строку ''' print(get_url) def record_file(): ''' Записывает исходник в файл ''' f_url = open("%s %s" % (just,".txt"), "w", encoding='UTF-8') # Открыть текстовый файл для записи f_url.write(get_url.decode('utf-8')) # Записать в файл исходник(из get_url) f_url.close # Закрыть l_demo = [] # Создать пустой словарь while 1: # Бесконечный цикл... try: ent_url = input("Введите url адрес, в виде www.python.org...") # Запрос адреса just = ent_url # Запомнить введенный адрес в переменной just l_demo.append(ent_url) # Добавить его в словарь print(l_demo, "Минутку...") # Вывести содержимое словаря и сообщение if l_demo[0][:7] == 'http://': # Если протокол введен... get_url = page(l_demo[0]) # Передать адрес функции page() и создать объект функции print("Все верно!!!!!!!") else: fixed = "http://" + l_demo[0] # Если не введен, добавить путем создания новой переменной get_url = page(fixed) # Так же передать адрес функции page() print("Ага!..") l_demo.remove(ent_url) # Удалить адрес из словаря except: # Адрес введен неверно print("Адрес не действителен! Проверьте правильность ввода") l_demo.remove(ent_url) continue rec_out = input("Записать исходник в файл или вывести тут? \nВведите для выбора: R/O") if rec_out == 'R': printer() else: record_file()
Отредактировано zipsetic (Май 3, 2012 19:48:33)
Офлайн