Wenn Sie über Crawler sprechen, kommt es Ihnen vielleicht sehr mysteriös vor, aber tatsächlich ist es nicht so magisch, wie wir es uns vorgestellt haben (natürlich sind die Crawler von Google und Baidu komplex und leistungsstark. Ihre Leistung ist nicht die Stärke des Crawlers selbst. aber die Hintergrunddatenverarbeitungs- und Data-Mining-Algorithmen sind sehr leistungsfähig), heute werden wir sein Geheimnis lüften. Haha, Sie können ein Web-Wetter-Crawler-Programm in zwei einfachen Schritten implementieren. . .
Einfach ausgedrückt besteht der Crawler aus zwei Teilen: 1. Ermitteln Sie die Textinformationen der Webseite. 2. Datenanalyse, um die gewünschten Daten zu erhalten.
1. Erhalten Sie Webseitentextinformationen.
Python ist sehr praktisch, um HTML zu erhalten. Mit Hilfe der urllib-Bibliothek sind nur wenige Codezeilen erforderlich, um die von uns benötigten Funktionen zu erreichen.
#引入urllib库 import urllib def getHtml(url): page = urllib.urlopen(url) html = page.read() page.close() return html
Was hier zurückgegeben wird, ist der Quellcode der Webseite, also der HTML-Code.
Wie erhalten wir also die gewünschten Informationen daraus? Dann müssen Sie das am häufigsten verwendete Tool bei der Webseitenanalyse verwenden – reguläre Ausdrücke.
2. Erhalten Sie den erforderlichen Inhalt basierend auf regulären Ausdrücken usw.
Bei der Verwendung regulärer Ausdrücke müssen Sie die Struktur der Webseiteninformationen sorgfältig beobachten und korrekte reguläre Ausdrücke schreiben.
Die Verwendung von regulären Python-Ausdrücken ist ebenfalls sehr einfach:
#引入正则表达式库 import re def getWeather(html): reg = '<a title=.*?>(.*?)</a>.*?<span>(.*?)</span>.*?<b>(.*?)</b>' weatherList = re.compile(reg).findall(html) return weatherList
Erklärung:
wobei reg ein regulärer Ausdruck und html der im ersten Schritt erhaltene Text ist . Die Funktion von findall besteht darin, alle Zeichenfolgen in HTML zu finden, die mit regulären Übereinstimmungen übereinstimmen, und sie in WeatherList zu speichern. Listen Sie dann die Datenausgabe in WeathereList auf.
Es gibt hier zwei Dinge, die man bei der Registrierung regulärer Ausdrücke beachten sollte.
Eins ist „(.*?)“. Solange der Inhalt in () der Inhalt ist, den wir erhalten, enthält jedes Ergebnis von findall bei mehreren Klammern den Inhalt in diesen Klammern. Oben gibt es drei Klammern, die der Stadt, der niedrigsten Temperatur und der höchsten Temperatur entsprechen.
Das andere ist „.*?“. Das reguläre Matching von Python ist standardmäßig gierig, das heißt, es werden standardmäßig so viele Zeichenfolgen wie möglich abgeglichen. Wenn Sie am Ende ein Fragezeichen hinzufügen, bedeutet dies, dass es sich um einen nicht gierigen Modus handelt, d. h. so wenige Zeichenfolgen wie möglich übereinstimmen. Da hier mehrere Städte abgeglichen werden müssen, muss der nicht gierige Modus verwendet werden, da sonst nur noch ein passendes Ergebnis übrig bleibt und dieses falsch ist.