{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Webcrawling\n", "Crawlen beschreibt den Prozess, bei dem Daten aus einer Webseite extrahiert werden. Das Vorgehen ist meist wie folgt:
\n", "\n", "1. Seite als HTML-Code herunterladen\n", "2. HTML-Code einlesen und Elemente suchen\n", "3. Aus gefundenen Element(en) werden Informationen extrahiert.\n", "\n", "\n", "## 1.: HTML-Code herunterladen \n", "mit **requests**-Paket" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "import requests # requests importieren\n", "url = \"http://www.beispiel.de\"\"\n", "r = requests.get(url) # das 'r' steht für 'Response', kann aber durch jedes beliebiges Zeichen ersetzt werden" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Die Anfrage wurde an den Server gestellt. Der Statuscode der Webseite kann genauer betrachtet werden. Wichtige HTTP Status-Codes sind:\n", "- 500: Internal Server Error\n", "- 404: Seite nicht gefunden\n", "- 200: Alles Okay" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "200\n" ] } ], "source": [ "print(r.status_code)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. HTML-Code einlesen und Elemente suchen" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "from bs4 import BeautifulSoup # BeautifulSoup importieren\n", "doc = BeautifulSoup(r.text, \"html.parser\") # HTML-Datei mit BeautifulSoup Einlesen" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Mit dem heruntergeladenen und eingelesenen HTML-Code können Elemente extrahiert werden. Dafür bieten sich CSS-Selektroen an.\n", "Beispiel:\n", "\n", "- `
Hallo
`: mit Hilfe von `.test` finden, der Punkt steht hierbei für eine Klasse\n", "- `
Hallo
`: mit Hilfe von `#test` finden, die Raute steht hierbei für einID-Attribut" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[

Diese Domain ist für illustrative Beispiele in Dokumenten eingerichtet.
Sie können diese Domain ohne Erlaubnis als Beispiel verwenden und verlinken.

,

Mehr Infos\n", "

]\n" ] } ], "source": [ "print(doc.find_all(\"p\"))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Aus gefundenen Element(en) werden Informationen extrahiert." ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0. Diese Domain ist für illustrative Beispiele in Dokumenten eingerichtet. Sie können diese Domain ohne Erlaubnis als Beispiel verwenden und verlinken.\n", "1. Mehr Infos\n", "\n" ] } ], "source": [ "i = 0\n", "for p in doc.find_all(\"p\"): # im Dokument alle

-Konstruktoren finden\n", " print(str(i) + \". \" + p.text) # für alle

dessen Text ausgeben\n", " i = i + 1" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.8" } }, "nbformat": 4, "nbformat_minor": 2 }