2015-04-02 1 views
0

Я хотел бы написать сценарий, который удалит все изображения из простого html-файла в Python и сохранит файл на месте.Python strip document of images tags

Вот моя попытка:

from bs4 import BeautifulSoup, NavigableString 

def strip_tags(html, invalid_tags): 
    soup = BeautifulSoup(html) 

    for tag in soup.findAll(True): 
     if tag.name in invalid_tags: 
      s = "" 

      for c in tag.contents: 
       if not isinstance(c, NavigableString): 
        c = strip_tags(unicode(c), invalid_tags) 
       s += unicode(c) 

      tag.replaceWith(s) 

    return soup 

data ="C:\\Users\\ADMIN\\Documents\\webpage 1.htm" 
with open(data) as orig_f: 
     html = BeautifulSoup(orig_f.read()) 
     invalid_tags = ['img'] 
     print orig_f 
     print strip_tags(orig_f, invalid_tags) 

Есть две вещи, которые я борюсь с, прежде всего кода работает без ошибок, но в последней строке, печать, печатает ничего, и линии до который печатает адрес памяти. Я попытался найти свою проблему/прочитать документы, чтобы понять, что я делаю неправильно здесь, но боюсь.

Как я могу сделать этот код удалением всех тегов изображений из моего HTML-файла и какова наилучшая практика для его сохранения?

ответ

1

"orig_f" - это файловый объект. Если вы хотите распечатать контент, одним из способов было бы сделать orig_f.read() или выполнить цикл над f и распечатать каждую строку. Я думаю, именно поэтому функции strip_tags возвращают None. Я не использовал BeautifulSoap, поэтому не могу сказать, что он вернет.

Для сохранения inplace я всегда делал копию файла во временном расположении и открывал временный файл для чтения перед перезаписью текущего файла. Это файлы причин, которые могут быть огромными для хранения в памяти, я имею дело с большими файлами ascii, которые могут вылетать, если весь контент загружается за один раз.