Ich versuche zu lernen, wie man automatisch URLs von einer Seite abruft. Im folgenden Code versuche ich, den Titel der Webseite zu erhalten:
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()
title = re.findall(pattern, html)
print(title)
Und ich bekomme diesen unerwarteten Fehler:
Traceback (most recent call last):
File "path\to\file\Crawler.py", line 11, in <module>
title = re.findall(pattern, html)
File "C:\Python33\lib\re.py", line 201, in findall
return _compile(pattern, flags).findall(string)
TypeError: can't use a string pattern on a bytes-like object
Was mache ich falsch?
python
python-3.x
web-crawler
Inspired_Blue
quelle
quelle
Antworten:
Sie möchten HTML (ein byteähnliches Objekt) in eine Zeichenfolge konvertieren, indem Sie
.decode
zhtml = response.read().decode('utf-8')
.Siehe Konvertieren von Bytes in einen Python-String
quelle
Das Problem ist , dass Ihre Regex ein String ist, aber
html
ist Bytes :Da Python nicht weiß, wie diese Bytes codiert sind, wird eine Ausnahme ausgelöst, wenn Sie versuchen, eine reguläre Zeichenfolge für sie zu verwenden.
Sie können entweder
decode
die Bytes zu einer Zeichenfolge:Oder verwenden Sie einen regulären Byte-Ausdruck:
In diesem speziellen Kontext können Sie die Codierung aus den Antwortheadern abrufen:
Weitere Informationen finden Sie in der
urlopen
Dokumentation .quelle