Ich möchte, dass ein regulärer Ausdruck den Titel aus einer HTML-Seite extrahiert. Derzeit habe ich Folgendes:
title = re.search('<title>.*</title>', html, re.IGNORECASE).group()
if title:
title = title.replace('<title>', '').replace('</title>', '')
Gibt es einen regulären Ausdruck, um nur den Inhalt von <title> zu extrahieren, damit ich die Tags nicht entfernen muss?
Antworten:
Verwenden Sie
(
)
in regexp undgroup(1)
in Python, um die erfasste Zeichenfolge abzurufen (re.search
wird zurückgegeben,None
wenn das Ergebnis nicht gefunden wird, verwenden Sie sie also nichtgroup()
direkt ):quelle
import re
sonst bekommst duNameError: name 're' is not defined
Beachten Sie, dass durch das Starten
Python 3.8
und die Einführung von Zuweisungsausdrücken (PEP 572) (:=
Operator) die Lösung von Krzysztof Krasoń ein wenig verbessert werden kann, indem das Übereinstimmungsergebnis direkt in der if-Bedingung als Variable erfasst und im Hauptteil der Bedingung wiederverwendet wird ::quelle
Versuchen Sie es mit Erfassungsgruppen:
quelle
quelle
Darf ich Sie zu Beautiful Soup empfehlen. Suppe ist eine sehr gute Bibliothek, um Ihr gesamtes HTML-Dokument zu analysieren.
quelle
Versuchen:
quelle
.*?
, falls</title>
das Dokument mehrere enthält (unwahrscheinlich, aber Sie wissen es nie).Die bereitgestellten Codeteile entsprechen nicht
Exceptions
den von mir vorgeschlagenenDies gibt standardmäßig eine leere Zeichenfolge zurück, wenn das Muster nicht gefunden wurde oder die erste Übereinstimmung vorliegt.
quelle
Ich würde denken, das sollte ausreichen:
... vorausgesetzt, Ihr Text (HTML) befindet sich in einer Variablen namens "Text".
Dies setzt auch voraus, dass es keine anderen HTML-Tags gibt, die legal in ein HTML-TITLE-Tag eingebettet werden können, und dass kein anderes <-Zeichen legal in einen solchen Container / Block eingebettet werden kann.
Jedoch ...
Verwenden Sie keine regulären Ausdrücke für die HTML-Analyse in Python. Verwenden Sie einen HTML-Parser! (Es sei denn, Sie schreiben einen vollständigen Parser. Dies wäre eine zusätzliche Arbeit, wenn verschiedene HTML-, SGML- und XML-Parser bereits in den Standardbibliotheken enthalten sind.
Verwenden Sie das BeautifulSoup- Paket, wenn Sie mit "real world" -Tagsuppen- HTML umgehen (das häufig nicht mit einem SGML / XML-Validator übereinstimmt) . Es ist (noch) nicht in den Standardbibliotheken enthalten, wird jedoch zu diesem Zweck allgemein empfohlen.
Eine weitere Option ist: lxml ..., das für ordnungsgemäß strukturiertes (standardkonformes) HTML geschrieben wurde. Es besteht jedoch die Möglichkeit, auf die Verwendung von BeautifulSoup als Parser zurückzugreifen: ElementSoup .
quelle