#python #encoding
#питон #кодирование
Вопрос:
Новичок в Python, поэтому я уверен, что на этот вопрос есть мучительно очевидный ответ, но я не могу его найти.
Я пишу webscraper. Я получаю идеальный HTML обратно, когда я читаю файл вживую, вот так:
user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7'
headers={'User-Agent':user_agent,}
request=urllib.request.Request(URL,None,headers)
response = urllib.request.urlopen(request)
page_data = response.read()
Но если я сохраню этот HTML-код локально и попытаюсь открыть его с помощью file.open, я получу обратно <_io.TextIOWrapper name=’metacritic_main_html/0.html ‘mode=’r’ encoding=’US-ASCII’> вместо HTML. Я проверил сам файл, и HTML-код совершенно не поврежден, что заставляет меня думать, что я делаю что-то глупое, читая его обратно.
Вот этот код:
files = os.listdir(file_dir)
for f in files:
file_loc = file_dir f
print(file_loc)
with open(file_loc) as html:
print(html)
Результат этого последнего оператора печати — <_io.TextIOWrapper name=’metacritic_main_html/0.html ‘mode=’r’ encoding=’US-ASCII’>
, а не HTML, как я ожидал.
Что я упускаю из виду? Я успешно открывал файлы раньше, когда путь был более явным.
Комментарии:
1. Вы никогда не читали досье. Вызов переменной
html
не означает, что она волшебным образом будет содержать HTML-код, хранящийся в файле.2. Конечно, я так не думал, я просто руководствовался контекстом. Как же мне тогда на самом деле читать содержимое файла?
3.
html
Переменная содержитio.TextIOWrapper
(который является открытым файлом). Для чтения файла используйтеhtml.read()
. Смотрите документацию .4. Hooboy. Спасибо @JohnAnderson — ранее я использовал синтаксический анализатор HTML, который обработал этот бит для меня. Исправлено!