Heim > Artikel > Backend-Entwicklung > Warum wirft „re.findall()“ beim Extrahieren von URLs einen „TypeError: Can\'t Use a String Pattern on a Bytes-Like Object“ aus?
TypeError: Ein Zeichenfolgenmuster kann nicht für ein Byte-ähnliches Objekt in re.findall() verwendet werden
Beim Versuch, automatisch abzurufen Bei URLs von einer Webseite kann der folgende Fehler auftreten:
TypeError: can't use a string pattern on a bytes-like object in re.findall()
In Ihrem Code verwenden Sie re.findall(), um Übereinstimmungen für einen regulären Ausdruck zu finden. Wenn Sie jedoch versuchen, den regulären Ausdruck auf den abgerufenen HTML-Inhalt anzuwenden, erhalten Sie die Fehlermeldung.
Grundlegende Ursache:
Das Problem ist darauf zurückzuführen Tatsache ist, dass der HTML-Inhalt, mit dem Sie arbeiten, im Byte-Format vorliegt, während der von Ihnen verwendete reguläre Ausdruck im String-Format vorliegt. Der reguläre Ausdruck kann nicht direkt auf ein byteartiges Objekt angewendet werden.
Lösung:
Um dieses Problem zu beheben, müssen Sie den HTML-Inhalt in eine Zeichenfolge konvertieren:
html = response.read().decode('utf-8')
Dadurch wird der byteartige HTML-Inhalt in einen String dekodiert, sodass der reguläre Ausdruck erfolgreich angewendet werden kann.
Sobald Sie die Konvertierung durchgeführt haben, können Sie mit der Verwendung fortfahren Der reguläre Ausdruck, um den Titel der Webseite zu finden. Der korrigierte Code sollte so aussehen:
import urllib.request import re url = "http://www.google.com" regex = r'<title>(,+?)</title>' pattern = re.compile(regex) with urllib.request.urlopen(url) as response: html = response.read().decode('utf-8') title = re.findall(pattern, html) print(title)
Das obige ist der detaillierte Inhalt vonWarum wirft „re.findall()“ beim Extrahieren von URLs einen „TypeError: Can\'t Use a String Pattern on a Bytes-Like Object“ aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!