In diesem Kapitel werden die technischen Grundlagen erläutert, die für das Verständnis der Implementierung der automatisierten Konkurrenzpreisbeschaffung (Kapitel 4.4) be-nötigt werden. Im ersten Unterkapitel werden verschiedene Aspekte der Internet-Kom-munikation thematisiert. Im zweiten Unterkapitel wird auf den Aufbau von Webseiten eingegangen.
Hypertext Transfer Protocol, Web-Server und Web-Klienten
Die Kommunikation zwischen Web-Klienten und Web-Servern im World Wide Web wird durch das Hypertext-Transfer-Protokoll (kurz: HTTP) realisiert (W3Schools e o. J.). Im Rahmen einer einzelnen Kommunikation fordert der Web-Klient eine Ressource von dem Web-Server an, indem er eine sogenannte HTTP-Anfrage (engl.: HTTP-Request) an den Web-Server schickt (W3Schools e o. J.). Der Web-Server empfängt die HTTP-Anfrage, verarbeitet sie durch seine Anwendungslogik und sendet eine sogenannte HTTP-Antwort (engl.: HTTP-Response) an den Web-Klienten zurück (W3Schools e o. J.). Die HTTP Kommunikation ist zustandslos, d. h. für eine identische HTTP-Anfrage eines Klienten bleibt die Verarbeitung und die HTTP-Antwort des Servers immer gleich (Munzert et al. 2015, S. 103).
Die Struktur von HTTP-Anfragen und HTTP-Antworten sind klar vorgegeben (Munzert et al. 2015, S. 106). Beide Nachrichtentypen weisen eine Aufteilung in die drei Teile Start-Line, Header und Body auf (Munzert et al. 2015, S. 106). Die folgenden Tabellen zeigen die Struktur von HTTP-Anfragen und HTTP-Antworten in Anlehnung an Munzert et al. (2015, S. 107). Auf der linken Seite der Tabellen ist das abstrakte Schema dargestellt, während auf der rechten Seite ein konkretes Beispiel dargestellt ist.
In Anlehnung an (Munzert et al. 2015, S. 106).
In Anlehnung an (Munzert et al. 2015, S. 106).
Die Start-Line einer HTTP-Anfrage umfasst die sogenannte Anfragemethode, den Uni-form-Resource-Identifier (kurz: URL) und die HTTP-Version (Munzert et al. 2015, S. 106f). Durch die Anfragemethode wird festgelegt, welche Art von Aktion für die Res-source des Servers ausgeführt werden soll (W3Schools f o. J.). Die wichtigsten Metho-den sind GET und POST (W3Schools f o. J.). GET wird genutzt, wenn die Daten einer bestimmten Ressource angefragt werden sollen, wobei die Daten auf dem Server selbst nicht verändert werden (W3Schools f o. J.). POST wird genutzt, um Daten an den Server zu senden, die die bestehenden Ressourcen auf dem Server aktualisieren oder neue Ressourcen auf dem Server anlegen sollen (W3Schools f o. J.). Die URL der Anfrage gibt den Pfad der Ressource an (Munzert et al. 2015, S. 106f). Die Version gibt die höchste HTTP-Version an, die vom Klienten verarbeitet werden kann (Munzert et al. 2015, S. 107).
Die Start-Line einer HTTP-Antwort umfasst die HTTP-Version, einen Status-Code und eine Phrase (Munzert et al. 2015, S. 107). Die Version gibt die höchste HTTP-Version an, die vom Server verarbeitet werden kann (Munzert et al. 2015, S. 107). Mit dem Status-Code teilt der Server dem Klienten mit, ob die Anfrage erfolgreich war (Status-Code: 200), oder ob Probleme bei der Verarbeitung aufgetreten sind (Munzert et al. 2015, S. 107). Die einzelnen Fehlercodes werden hier nicht erklärt. Die Phrase ist eine für den menschlichen Benutzer nachvollziehbare Erklärung des Status-Codes (Munzert et al. 2015, S. 107). Der Status-Code 200 entspricht der Phrase „OK“.
Der Header wird bei beiden Nachrichtentypen genutzt, um dem gegenüberliegenden Empfänger Metainformationen mitzuteilen (Munzert et al. 2015, S. 107). Die Metainfor-mationen werden durch Name-Wert-Paare (engl.: name-value-pairs) definiert (Munzert et al. 2015, S. 107). Im Rahmen der HTTP-Anfrage muss immer ein Host angegeben werden. Auf weitere mögliche Name-Wert-Paare der Anfrage wird hier nicht weiter ein-gegangen. Eine wichtige Metainformation einer HTTP-Antwort ist der Content-type, der angibt, was für ein Typ von Inhalt vom Server zurückgegeben wird. Der Wert „text/html“ gibt beispielsweise an, dass ein HTML-Dokument zurückgegeben wird.
Der Body einer HTTP-Nachricht enthält die Daten (Munzert et al. 2015, S. 107). Es kann sich dabei um normalen Text (engl.: plain text), aber auch um Binärdaten handeln (Munzert et al. 2015, S. 107). Bei der HTTP-Antwort in dem Beispiel handelt es sich um ein HTML-Dokument, das als normaler Text angegeben ist. In einer HTTP-Anfrage könn-ten im Body beispielsweise Parameter angegeben werden, die bei der Verarbeitung der Anfrage durch den Server berücksichtigt werden sollen.
Aufbau von HTML-Webseiten
Webseiten werden durch die sogenannte HyperText-Markup-Language (kurz: HTML) de-finiert (Munzert et al. 2015, S. 17). HTML definiert die Struktur einer Webseite durch eine Folge von sogenannten Markup-Tags, die wiederum definieren, wie ein Browser die Webseite interpretiert und darstellt (W3Schools a). Markup-Tags bestehen aus einem Start-Tag und einem End-Tag, sodass der durch sie eingeschlossene Inhalt als dem Tag zugehörig interpretiert werden kann (Munzert et al. 2015, S. 20). Das Start-Tag hat die Form <Tag – Name> und das End-Tag die Form <Tag – Name/>(Munzert et al. 2015, S. 20). Es existieren auch Abkürzungen, die beispielsweise das End-Tag überflüssig ma-chen (Munzert et al. 2015, S. 20), auf die hier aber nicht explizit eingegangen wird. Die folgende Abbildung illustriert eine einfache HTML-Webseite und deren Strukturierung mit den grundlegendsten Markup-Tags.
Das html-Tag repräsentiert und umfasst das HTML-Dokument in seiner Gesamtheit (W3Schools a). Im Rahmen des head-Tags können Metainformationen für das HTML-Dokument definiert werden (W3Schools a). Als Metainformation kann bzw. sollte bei-spielsweise der Titel der Webseite definiert werden, der durch das title-Tag definiert wird (W3Schools a). Der body definiert, im Gegensatz zum head, den sichtbaren Inhalt der HTML-Webseite (W3Schools a). Durch das h1-Tag wird die erste Überschrift der Webseite definiert (W3Schools a). Das p-Tag definiert hingegen die Absätze der Web-seite (W3Schools a). Es ist ferner zu ergänzen, dass um das äußere html-Tag immer ein !DOCTYPE-Tag definiert werden muss, das den Dokumententyp angibt (W3Schools a). Im Fall von HTML5 hätte das Start-Tag die Form < !DOCTYPE html > (W3Schools a).
(W3Schools a o. J.)
Für das Web-Scraping ist zudem wichtig, dass die Struktur eines HTML-Dokuments als Baumstruktur beschrieben werden kann (Munzert et al. 2015, S. 20). Betrachtet man die letzte Abbildung, kann das html-Tag als gemeinsame Wurzel interpretiert werden, die sich in zwei Äste, das head-Tag und body-Tag, verzweigt. Der body-Tag-Ast ver-zweigt sich wiederum in drei Äste. Im Kontext dieser Baumstruktur werden die Äste, die sich aus einem Element, beispielsweise dem body-Element verzweigen, als die Kinder (engl.: children) des body-Elements bezeichnet (W3Schools b). Aus Sicht dieser child-ren, beispielsweise dem h1-Tag, kann das body-Element wiederum als Vorgänger (engl.: parent) bezeichnet werden (W3Schools b). Die Elemente mit einem identischen Vorgänger werden als Geschwister (engl.: siblings) bezeichnet.
Die einzelnen Tags eines HTML-Dokuments können über sogenannte Attribute verfügen, wobei die möglichen Attribute vom Tag abhängen (Munzert et al. 2015, S. 20). Attribute spezifizieren die Bedeutung und den Kontext vom Inhalt eines Tags (W3Schools c). At-tribute werden im Start-Tag definiert, in der Form attributname=“attributwert“, wobei verschiedene Attributdefinitionen durch ein Leerzeichen getrennt werden können (Mun-zert et al. 2015, S. 20). Von besonderer Wichtigkeit für die Implementierung im Rahmen dieser Arbeit ist das class-Attribut, das zu den sogenannten globalen Attributen zählt, die jedem Tag zugewiesen werden können (W3Schools c). Das class-Attribut weist ei-nem Tag-Element einen Klassennamen zu (W3Schools d). Durch diese Zuordnung zu einer Klasse wird es möglich, das Element zu einem späteren Zeitpunkt zu referenzieren (W3Schools d). Beispielsweise könnte die Präsentation aller Elemente mit einer be-stimmten Klasse zentral geändert werden. Einem Element können beliebig viele ver-schiedene Klassen zugeordnet werden (W3Schools d).
Recent Comments