После того, как принятый ответ Гильермо был написан, переход 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 используется для создания анимации затухания и затухания и свойства видимости, чтобы элемент не реагировал на события мыши. Переходы необходимы для непрозрачности визуального эффекта и видимости, чтобы задержать скрытие до тех пор, пока исчезновение не завершится.
HTMLParser.unescape
устарел, а должен был быть удален в 3.5 , хотя он был оставлен по ошибке. Он скоро будет удален с языка. Вместо этого используйте html.unescape()
:
import html
print(html.unescape('£682m'))
см. https://docs.python.org/3/library/html.html#html.unescape
Вы можете использовать парсер 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
Это, вероятно, не актуально. Но для устранения этих 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
Вы можете использовать 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
Beautiful Soup 4 позволяет вам установить форматтер для вашего вывода
Если вы перейдете в
blockquote>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>
Beautiful Soup обрабатывает преобразование объектов. В Beautiful Soup 3 вам нужно указать аргумент convertEntities
для конструктора BeautifulSoup
(см. Раздел «Преобразование сущности» архивных документов). В Beautiful Soup 4 сущности автоматически декодируются.
>>> from BeautifulSoup import BeautifulSoup
>>> BeautifulSoup("<p>£682m</p>",
... convertEntities=BeautifulSoup.HTML_ENTITIES)
<p>£682m</p>
>>> from bs4 import BeautifulSoup
>>> BeautifulSoup("<p>£682m</p>")
<html><body><p>£682m</p></body></html>