Web Crawler Methodik. Breitensuche in Python mit Scrapy Framework


Projektarbeit, 2016

31 Seiten, Note: 1


Leseprobe

Inhaltsverzeichnis

Abbildungs- & Skizzenverzeichnis

1 Einleitung

2 Konzeption

3 Breitensuche

4 Tiefensuche

5 Voraussetzungen
5.1 Installation

6 Praktische Untersuchung
6.1 Erstellung eines Scrapy Projekts
6.2 Items.py
6.3 Pipelines.py
6.4 Settings.py
6.5 Middlewares.py
6.6 Spiders
6.7 Konfiguration in RoboMongo

7 Python & Data Mining
7.1 Bekannte Python Bibliotheken

8 Fazit

Literaturverzeichnis

Abbildungs- & Skizzenverzeichnis

Abbildungen

Abbildung 1 - Screenshot Ubuntu Terminal (Command Line)

Abbildung 2 - Screenshot über installierte Python Packages

Abbildung 3 - Screenshot MongoDB Connection Settings 1

Abbildung 4 - Screenshot MongoDB Connection Settings 2

Skizzen

Skizze 1 - Prozessablauf

Skizze 2 - Vorgang bei der Breitensuche

Skizze 3 - Vorgang bei der Tiefensuche

Skizze 4 - Erklärung des Prozesses insbesondere Pipeline Funktion

1 Einleitung

Während des Studiums im Gebiet der Informationswissenschaften an der Hochschule Darmstadt habe ich in Informatik umfangreiche Erkenntnisse gewinnen können. Das damit verbundene Interesse am Programmieren erweckte ein enormes Interesse an der Programmiersprache Python. Denn Python ist eine sehr effiziente und einflussreiche Programmiersprache, welches ich bereits in vergangenen Hausarbeiten mit Versuchen hinterlegen konnte. In diesem Kolloquium möchte ich mich erneut mit der Durchsuchung des World Wide Web beschäftigen. Jedoch diesmal, möchte ich herausfinden, ob man mit der Programmiersprache Python Linkquellen aus unterschiedlichen Webseiten analysieren kann. Ich möchte den Versuch starten mithilfe von Python, einem Python-Framework namens Scrapy und einer Datenbank namens MongoDB Linkquellen zu untersuchen. Untersuchte Linkquellen sollen zunächst in einer Datenbank abgelegt werden und sobald der erste Durchlauf vollendet ist, soll der Crawler die nächste gespeicherte Linkquelle aus der Datenbank entnehmen und diese Linkquelle nach weiteren Linkquellen untersuchen. Dabei ist es wichtig, dass bei den gespeicherten Linkquellen keine Duplikate enthalten sind und die bereits untersuchten Webseiten nicht erneut untersucht werden.

Die Effizienz dieser Programmiersprache und dessen einflussreiche Möglichkeiten waren der Anlass sich mit diesen Thema näher zu beschäftigen. Daher habe ich mich gefragt, ob diese Programmiersprache einfach und schnell eine hohe Anzahl an Linkquellen unterschiedlicher Webseiten aufspüren kann. In meinem Kolloquium möchte ich zuerst auf die beiden Suchalgorithmen der Breiten- und Tiefensuche eingehen. Im Anschluss möchte ich auf die Konzeption, Voraussetzungen und Installation eingehen, die man für einen solchen Versuch braucht und darauffolgend den Versuch starten. Ziel des Kolloquiums soll es sein dem Leser einen Eindruck zu verschaffen wie effizient und umfangreich die Programmiersprache Python sein kann.

2 Konzeption

Das Konzept ist es einen vollkommen eigenständigen bzw. automatisch nach Verlinkungen suchenden Web Crawler zu entwickeln. Der Crawler soll bei einer vorgegebenen URL anfangen und nach <a href=““> - Tags suchen. Anschließend sollen alle gefundenen Links mit den jeweiligen Linktexten in eine Datenbank (MongoDB) abgelegt werden. In dieser Form sollen die Daten beispielsweise strukturiert abgelegt werden:

Abbildung in dieser Leseprobe nicht enthalten

Nachdem die erste URL nach Verlinkungen untersucht wird und untersuchte Verlinkungen in die Datenbank ablegt werden, soll anschließend die nächste abgelegte URL aus der Datenbank entnommen werden. Die entnommene URL wird dann in den Web Crawler integriert, sodass die nächste Webseite nach weiteren Verlinkungen untersucht wird. Nach jeder Untersuchung soll der Web Crawler gefundene Verlinkungen immer wieder in der Datenbank speichern. Dieser Prozess soll sich ständig wiederholen bis die maximale Anzahl an

Verlinkungen erreicht wird. Die maximale Anzahl an Verlinkungen kann man im Code individuell festlegen. Außerdem sollen Webseiten nicht wiederholt gecrawlt werden und in der Datenbank sollen keine Duplikate enthalten sein.

Abbildung in dieser Leseprobe nicht enthalten

Skizze 1 - Prozessablauf

3 Breitensuche

Die Breitensuche im englischen auch breadth first search genannt, ist ein informationstechnisches Verfahren. Bei der Breitensuche fängt die Expandierung von einem bestimmten Startknoten an und dehnt sich weiter aus. Es wird nach weiteren Knoten gesucht die mit dem Startknoten in direkter bzw. erster Ebene in Verbindung stehen, bevor die Expandierung weiter in die Tiefe geht. Sobald alle Knoten der ersten Ebene erreicht werden, kommen diese in eine Warteschlange. 1

Die Knoten werden nach und nach aus der Warteschlange entnommen und abgearbeitet bzw. nach weiteren Knoten in der nächsten tieferen Ebene durchsucht. Aber hierbei ist es wichtig zu wissen, dass man von einem Knoten aus nicht sofort in die Tiefe geht, sondern zunächst alle noch nicht erreichten Nachbarn des Knotens bearbeitet. Nachdem alle Knoten der ersten Ebene bearbeitet sind, wird die nächste tiefere Ebene nach Knoten untersucht und diese werden wie zuvor in die Warteschlange aufgenommen. Anschließend werden die Knoten einzeln aus der Warteschlange selektiert und bearbeitet.2 In der unten zu sehenden Skizze 2 kann man beobachten wie die Suche vom Startknoten anfängt und in die erste Ebene expandiert. Anschließend expandiert die Suche weiter in die nächste tiefere Ebene. Der Suchvorgang ist nach alphabetischer Reihenfolge sortiert und dient zur Orientierung.

Abbildung in dieser Leseprobe nicht enthalten

Skizze 2 - Vorgang bei der Breitensuche

4 Tiefensuche

Die Tiefensuche im englischen auch depth first search genannt, ist ebenfalls wie die Breitensuche ein informationstechnisches Verfahren. Bei der Tiefensuche fängt die Expandierung beim Startknoten an und folgt dem ersten Knoten der nächsten (ersten) Ebene. Anschließend wird die Suche weitergeführt von der ersten Ebene in die nächste tiefere Ebene.3 Bei der Suche nach neuen Knoten wird bei der Tiefensuche der erste Knoten einer Ebene auf weitere Knoten in tieferen Ebenen untersucht bis der letzte Knoten erforscht wurde. Sobald der letzte Knoten erreicht ist und es keinen weiteren Knoten mehr gibt, erfolgt ein sogenanntes Backtracking, d.h. die Suche kehrt zur nächst höheren Ebene zurück und untersucht den nächsten Knoten in die Tiefe.4

In der unten zu sehenden Skizze 3 wird der Verlauf der Tiefensuche dargestellt. Vom Startknoten ausgehend wird der erste Knoten aus der ersten Ebene erreicht und nach weiteren Knoten in den tieferen Ebenen expandiert. Der Suchvorgang ist nach alphabetischer Reihenfolge sortiert und dient zur Orientierung.

Abbildung in dieser Leseprobe nicht enthalten

Skizze 3 - Vorgang bei der Tiefensuche

5 Voraussetzungen

Die Voraussetzung für diese Untersuchung ist als aller erstes ein Rechner mit standardmäßiger Leistung. Obwohl dieser Versuch auf den meistbekannten Betriebssystemen funktioniert wird hierbei der Versuch auf einem bestimmten Betriebssystem ausgeführt. Ausgewählt wurde das Ubuntu/Linux Betriebssystem, da dieser bei Konfigurationen am unkompliziertesten ist. Des Weiteren werden die zwei Versionen 2.7 und 3.5 der Programmiersprache Python benötigt. Diese sind bereits vorinstalliert und können ggf. aktualisiert werden mit dem folgenden Befehl:

sudo apt-get install python2.7 | sudo apt-get install python3.5

Als nächstes benötigt man die Scrapy Bibliothek. Scrapy ist ein Framework um Webseiten zu durchforsten und strukturiert Daten zu ziehen. Mit Scrapy können nützliche Applikationen erstellt werden für beispielsweise Data Mining Prozesse. Außerdem ist Scrapy komplett in Python geschrieben.5

Um die Daten in MongoDB ablegen zu können braucht man anschließend PyMongo. PyMongo ist eine empfohlene Python Distribution und beinhaltet Werkzeuge um mit MongoDB arbeiten zu können.6

Als letztes benötigt man eine Datenbank mit der gearbeitet werden kann. Daher eignet sich MongoDB für diese Untersuchung. MongoDB ist ein frei verwendbares Datenbanktool und ist für hohe Datenmengen sehr gut geeignet.7

Zusammenfassung der Voraussetzungen:

- Ubuntu/Linux Rechner (Standardmäßige Leistung ausreichend)
- Python Version 2.7 & 3.5
- Scrapy
- PyMongo
- MongoDB + Robomongo

5.1 Installation

Um Installationsbefehle ausführen zu können öffnet man als erstes das Terminal oder auch Command Line genannt.

Abbildung in dieser Leseprobe nicht enthalten

Abbildung 1 - Screenshot Ubuntu Terminal (Command Line)

Nachdem öffnen des Terminals gibt man den Befehl sudo pip install scrapy ein um das Scrapy Framework zu installieren. Das Wort sudo steht für die Ausführung eines Befehls als Administrator, pip ist ein Hilfswerkzeug um Python Packages zu installieren. Die anderen beiden Eingaben sind zum einen install um eine Installation auszuführen und zum anderen das zu installierende Tool, in diesem Fall scrapy.8

Nachdem Scrapy erfolgreich installiert wurde sollte man überprüfen, ob alle nötigen Packages installiert wurden. Mit pip freeze werden im Terminal alle installierten Packages aufgelistet.9

Abbildung in dieser Leseprobe nicht enthalten

Abbildung 2 - Screenshot über installierte Python Packages

Damit gecrawlte Links und Linktexte in der MongoDB Datenbank gespeichert werden können, muss als nächstes PyMongo installiert werden.

PyMongo lässt sich durch den Befehl sudo pip install pymongo ganz einfach im Terminal installieren. In den nächsten Kapiteln wird die Verbindung zur MongoDB Datenbank genauer erläutert. Mithilfe von RoboMongo kann man die Datenbank visualisieren.

6 Praktische Untersuchung

6.1 Erstellung eines Scrapy Projekts

Bei dem praktischen Versuch erstellt man zunächst ein Scrapy Projekt mithilfe der Console bzw. des Terminals. Sobald ein neues Projekt angelegt werden soll, erstellt Scrapy einen neuen Ordner innerhalb des Scrapy Verzeichnisses und füllt den Ordner mit der Basis-Struktur. Die Basis-Struktur besteht aus unterschiedlichen Dateien mit denen man auf Anhieb loslegen kann.

Abbildung in dieser Leseprobe nicht enthalten

Mit einem Befehl ist das Anlegen eines Scrapy Projekts innerhalb von

Sekunden bereits veranlasst und erledigt. Um Scrapy Befehle nutzen zu

können muss meistens am Anfang scrapy stehen und an zweiter Stelle der auszuführende <Befehl> in diesem Fall startproject um ein neues Projekt anzulegen. An dritter Stelle steht der <Projektname> diesen kann man individuell festlegen.

Abbildung in dieser Leseprobe nicht enthalten

Innerhalb des Projekts findet man nun verschiedene Dateien wie z.B. items.py, pipelines.py oder settings.py. In einem weiteren Ordner mit dem Namen spiders, ebenfalls innerhalb des Projekts wird der Crawler im späteren Verlauf angelegt und definiert.

Items.py ist eine Datei die verwendet wird um Container zu definieren in denen gecrawlte Daten abgelegt bzw. zwischengespeichert werden.

Pipelines.py ist eine Datei um Verbindungen herzustellen beispielsweise mit einer Datenbank oder man kann hier die Art der Datenübertragung definieren und auch Aktionen definieren die bei einem bestimmten Fall auftreten sollen.

Settings.py ist eine Datei um Einstellungen vorzunehmen. Am wichtigsten ist hierbei die Konfiguration mit einer Datenbank. Wichtige Konfigurationsbedingungen wie Servername, Port oder Datenbankname müssen in der settings.py - Datei enthalten sein. Abgesehen davon gibt es viele weitere Einstellungen, wie z.B. das Erlauben von Cookies oder das Definieren von Verzögerungen beim crawlen einer nachfolgenden Webseite.

Middlewares.py ist eine Datei um das Suchverhalten des Crawlers zu steuern. Beispielsweise kann die Ladezeit bei einer Anfrage zu einer bestimmten Webseite zu lange dauern und mithilfe der Middleware kann man Definitionen einpflegen, die wiederrum bei einer nichtladenden Webseite einen Abbruch vornimmt und die nächste Webseite crawlt.

[...]


1 Vgl. (Maucher, 2010)

2 Vgl. (Goos, 2000), S. 306 ff.

3 Vgl. (Maucher, 2010)

4 Vgl. (Goos, 2000), S. 306 ff.

5 Vgl. (Developers, Scrapy documentation 1.0, 2015)

6 Vgl. (Developers M. , 2015)

7 Vgl. (Developers M. , Introduction to MongoDB, 2015)

8 Vgl. (Doenitz, 2014)

9 Vgl. (Boschetti & Massaron, 2015), S. 10, ff.

Ende der Leseprobe aus 31 Seiten

Details

Titel
Web Crawler Methodik. Breitensuche in Python mit Scrapy Framework
Hochschule
Hochschule Darmstadt  (Fachbereich Media)
Veranstaltung
Informationswissenschaftliches Kolloquium
Note
1
Autor
Jahr
2016
Seiten
31
Katalognummer
V338113
ISBN (eBook)
9783668275294
ISBN (Buch)
9783668275300
Dateigröße
858 KB
Sprache
Deutsch
Schlagworte
Python, Scrapy, Python Framework, Web Crawler, Web Scraping, Web Spider, Searchengine, Suchmaschine, MongoDB
Arbeit zitieren
Torun Ünver (Autor), 2016, Web Crawler Methodik. Breitensuche in Python mit Scrapy Framework, München, GRIN Verlag, https://www.grin.com/document/338113

Kommentare

  • Noch keine Kommentare.
Im eBook lesen
Titel: Web Crawler Methodik. Breitensuche in Python mit Scrapy Framework



Ihre Arbeit hochladen

Ihre Hausarbeit / Abschlussarbeit:

- Publikation als eBook und Buch
- Hohes Honorar auf die Verkäufe
- Für Sie komplett kostenlos – mit ISBN
- Es dauert nur 5 Minuten
- Jede Arbeit findet Leser

Kostenlos Autor werden