Python: Как удалить html-объекты из элементов списка? [Дубликат]

После того, как принятый ответ Гильермо был написан, переход CSS-перехода от 3 апреля 2012 года изменил поведение перехода видимости, и теперь можно решить эту проблему короче, без использования задержки перехода:

.myclass > div { 
                   transition:visibility 1s, opacity 1s; 
                   visibility:hidden;  opacity:0
               }
.myclass:hover > div 
               {   visibility:visible; opacity:1 }

Время выполнения, указанное для обоих переходов, должно быть, как правило, одинаковым (хотя немного более длительное время для видимости не является проблемой). Для текущей версии см. Мой блог http://www.taccgl.org/blog/css-transition-visibility.html#visibility-opacity .

W.r.t. название вопроса «Переходы на дисплее: свойство» и в ответ на комментарии Rui Marques и josh к принятому ответу: это решение работает в тех случаях, когда это не имеет значения, если свойство отображения или видимости (как это, вероятно, имело место в этом вопросе). Он не будет полностью удалять элемент как отображение: none, просто сделать его невидимым, но он все еще остается в потоке документа и влияет на положение следующих элементов. Переходы, которые полностью удаляют элемент, похожий на отображение: ни один не может быть выполнен с использованием высоты (как указано другими ответами и комментариями), максимальной высотой или краем-сверху / снизу, но также см. . Как я могу перейти на высоту: 0 ; высота: авто; используя CSS? и мой блог http://www.taccgl.org/blog/css_transition_display.html .

В ответ на комментарий GeorgeMillo: как свойства, так и необходимы оба перехода: свойство opacity используется для создания анимации затухания и затухания и свойства видимости, чтобы элемент не реагировал на события мыши. Переходы необходимы для непрозрачности визуального эффекта и видимости, чтобы задержать скрытие до тех пор, пока исчезновение не завершится.

202
задан Mark Amery 28 November 2015 в 21:18
поделиться

5 ответов

Python 3.4 +

HTMLParser.unescape устарел, а должен был быть удален в 3.5 , хотя он был оставлен по ошибке. Он скоро будет удален с языка. Вместо этого используйте html.unescape():

import html
print(html.unescape('£682m'))

см. https://docs.python.org/3/library/html.html#html.unescape


Python 2.6-3.3

Вы можете использовать парсер HTML из стандартной библиотеки:

>>> try:
...     # Python 2.6-2.7 
...     from HTMLParser import HTMLParser
... except ImportError:
...     # Python 3
...     from html.parser import HTMLParser
... 
>>> h = HTMLParser()
>>> print(h.unescape('£682m'))
£682m

См. http: //docs.python. org / 2 / library / htmlparser.html

Вы также можете использовать библиотеку совместимости six для упрощения импорта:

>>> from six.moves.html_parser import HTMLParser
>>> h = HTMLParser()
>>> print(h.unescape('£682m'))
£682m
392
ответ дан Adam Nelson 24 August 2018 в 19:14
поделиться

Это, вероятно, не актуально. Но для устранения этих html-entites из целого документа вы можете сделать что-то вроде этого: (предположим, что document = page и прошу простить неаккуратный код, но если у вас есть идеи о том, как сделать его лучше, Im all ears - Im new to это).

import re
import HTMLParser

regexp = "&.+?;" 
list_of_html = re.findall(regexp, page) #finds all html entites in page
for e in list_of_html:
    h = HTMLParser.HTMLParser()
    unescaped = h.unescape(e) #finds the unescaped value of the html entity
    page = page.replace(e, unescaped) #replaces html entity with unescaped value
-2
ответ дан Ashwini Chaudhary 24 August 2018 в 19:14
поделиться

Вы можете использовать replace_entities из библиотеки w3lib.html

In [202]: from w3lib.html import replace_entities

In [203]: replace_entities("£682m")
Out[203]: u'\xa3682m'

In [204]: print replace_entities("£682m")
£682m
8
ответ дан Corvax 24 August 2018 в 19:14
поделиться

Beautiful Soup 4 позволяет вам установить форматтер для вашего вывода

Если вы перейдете в formatter=None, Beautiful Soup не будет изменять строки вообще на выходе , Это самый быстрый вариант, но это может привести к тому, что Beautiful Soup генерирует неверный HTML / XML, как в этих примерах:

print(soup.prettify(formatter=None))
# <html>
#  <body>
#   <p>
#    Il a dit <<Sacré bleu!>>
#   </p>
#  </body>
# </html>

link_soup = BeautifulSoup('<a href="http://example.com/?foo=val1&bar=val2">A link</a>')
print(link_soup.a.encode(formatter=None))
# <a href="http://example.com/?foo=val1&bar=val2">A link</a>
2
ответ дан LoicUV 24 August 2018 в 19:14
поделиться

Beautiful Soup обрабатывает преобразование объектов. В Beautiful Soup 3 вам нужно указать аргумент convertEntities для конструктора BeautifulSoup (см. Раздел «Преобразование сущности» архивных документов). В Beautiful Soup 4 сущности автоматически декодируются.

Beautiful Soup 3

>>> from BeautifulSoup import BeautifulSoup
>>> BeautifulSoup("<p>&pound;682m</p>", 
...               convertEntities=BeautifulSoup.HTML_ENTITIES)
<p>£682m</p>

Beautiful Soup 4

>>> from bs4 import BeautifulSoup
>>> BeautifulSoup("<p>&pound;682m</p>")
<html><body><p>£682m</p></body></html>
59
ответ дан Mark Amery 24 August 2018 в 19:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: