Eu quero uma expressão regular para extrair o título de uma página HTML. Atualmente eu tenho isso:
title = re.search('<title>.*</title>', html, re.IGNORECASE).group()
if title:
title = title.replace('<title>', '').replace('</title>', '')
Existe uma expressão regular para extrair apenas o conteúdo de <title>, para que eu não precise remover as tags?
Respostas:
Use
(
)
no regexp egroup(1)
no python para recuperar a string capturada (re.search
retornaráNone
se não encontrar o resultado, portanto , não usegroup()
diretamente ):fonte
import re
ou então você teráNameError: name 're' is not defined
Observe que o início
Python 3.8
e a introdução de expressões de atribuição (PEP 572) (:=
operador), é possível melhorar um pouco a solução de Krzysztof Krasoń capturando o resultado da partida diretamente dentro da condição if como uma variável e reutilizá-lo no corpo da condição :fonte
Tente usar grupos de captura:
fonte
fonte
Posso recomendar-lhe a sopa bonita. Soup é uma lib muito boa para analisar todo o seu documento html.
fonte
Experimentar:
fonte
.*?
lo caso haja vários</title>
no documento (improvável, mas você nunca sabe).Os trechos de código fornecidos não lidam com
Exceptions
Posso sugerirIsso retorna uma sequência vazia por padrão, se o padrão não foi encontrado ou a primeira correspondência.
fonte
Eu acho que isso deve ser suficiente:
... assumindo que seu texto (HTML) esteja em uma variável chamada "texto".
Isso também pressupõe que não há outras tags HTML que possam ser legalmente incorporadas dentro de uma tag HTML TITLE e que não há maneira de incorporar legalmente qualquer outro caractere <dentro desse contêiner / bloco.
No entanto ...
Não use expressões regulares para análise de HTML no Python. Use um analisador de HTML! (A menos que você escreva um analisador completo, o que seria um trabalho extra quando vários analisadores de HTML, SGML e XML já estiverem nas bibliotecas padrão.
Se você manipular o HTML de sopa de tags do "mundo real" (que geralmente não está em conformidade com qualquer validador SGML / XML), use o pacote BeautifulSoup . Ainda não está nas bibliotecas padrão, mas é amplamente recomendado para esse fim.
Outra opção é: lxml ... que é escrito para HTML adequadamente estruturado (conforme os padrões). Mas tem uma opção para usar o BeautifulSoup como um analisador: ElementSoup .
fonte