2014-12-02 8 views
12

У меня есть html-файл с именем test.html у него есть одно слово בדיקה.Как открыть html-файл?

Я открываю test.html и распечатать его содержимое с помощью этого блока кода:

file = open("test.html", "r") 
print file.read() 

но печатает ??????, почему это произошло, и как я могу это исправить?

BTW. когда я открываю текстовый файл, он работает хорошо.

Edit: я попытался это:

>>> import codecs 
>>> f = codecs.open("test.html",'r') 
>>> print f.read() 
????? 
+2

Подробнее о unicode, UTF-8 – vks

+1

Вам необходимо открыть файл в формате UTF-8. http://stackoverflow.com/questions/491921/unicode-utf8-reading-and-writing-to-files-in-python –

+0

Если он все еще не работает, просто разместите свою страницу, которую вы пытаетесь обработать. – wenzul

ответ

19
import codecs 
f=codecs.open("test.html", 'r') 
print f.read() 

Попробуйте что-то вроде этого.

+0

не работает, я получил ???? – david

+1

также я пытаюсь использовать codecs.open ("test.html", 'r', 'utf-8'), но когда я печатаю f.read(), я получаю unicode decode error! – david

+0

я использую терминал !! – david

6

Вы можете прочитать HTML-страницы с помощью 'URLLIB'.

#python 2.x 

    import urllib 

    page = urllib.urlopen("your path ").read() 
    print page 
+0

У меня есть ???? ! – david

+0

Как я могу выполнять операции на 'странице'. ? как чтение определенных слов из него и т. д. Могу ли я использовать 'page' как строку? –

4

Используйте параметр codecs.open с параметром кодирования.

import codecs 
f = codecs.open("test.html", 'r', 'utf-8') 
3

вы можете использовать следующий код:

from __future__ import division, unicode_literals 
import codecs 
from bs4 import BeautifulSoup 

f=codecs.open("test.html", 'r', 'utf-8') 
document= BeautifulSoup(f.read()).get_text() 
print document 

Если вы хотите удалить все пустые строки между ними и получить все слова в виде строки (также избегать специальных символов, цифр) затем также включают в себя:

import nltk 
from nltk.tokenize import word_tokenize 
docwords=word_tokenize(document) 
for line in docwords: 
    line = (line.rstrip()) 
    if line: 
     if re.match("^[A-Za-z]*$",line): 
      if (line not in stop and len(line)>1): 
       st=st+" "+line 
print st 

* определяют st как string первоначально, как st=""

-2

вы можете использовать 'URLLIB' в Python3 же, как

https://stackoverflow.com/a/27243244/4815313 с некоторыми изменениями.

#python3 

    import urllib 

    page = urllib.request.urlopen("/path/").read() 
    print(page) 
+0

'AttributeError: объект 'module' не имеет атрибута 'request'' –

+0

@ tommy.carstensen может быть, вы должны взглянуть на это [urllib python3] (https://docs.python.org/ 3/library/urllib.request.html # module-urllib.request) – Suresh2692

+1

Спасибо. Я хорошо знаком с этим документом. Отступ неправильный, и он должен быть «import urllib.request». –

Смежные вопросы