bsenst commited on
Commit
1203cd3
·
1 Parent(s): 3a8cc41

clean up no code low code und use cases tutorials

Browse files
src/02_basics/app_market.qmd DELETED
@@ -1,10 +0,0 @@
1
- ---
2
- title: "App Marktplatz beobachten"
3
- listing:
4
- - id: app_market
5
- contents: "app_market"
6
- type: grid
7
- ---
8
-
9
- ::: {#app_market}
10
- :::
 
 
 
 
 
 
 
 
 
 
 
src/02_basics/app_market/google-play-search.qmd CHANGED
@@ -1,27 +1,27 @@
1
  ---
2
  title: "Google-Play-App-Suche"
3
- description: "Ein Tool zur Suche nach Apps im Google Play Store basierend auf einem Suchbegriff, einschließlich der Anzeige von App-Details und direkten Links."
4
- author: "Benjamin"
5
- date: "2024-12-16"
6
- date-modified: "2024-12-16"
7
  image: _9d81d3d2-f372-476b-beb6-fe6a4841739b.jpeg
8
  ---
9
 
10
- # Google-Play-App-Suche
11
 
12
- ## Beschreibung
13
- Dieses Tool durchsucht den Google Play Store nach Apps, basierend auf einem vom Nutzer eingegebenen Suchbegriff, und liefert eine übersichtliche Ergebnisliste.
14
 
15
- ## Funktionen
16
- - **Suchfunktion**: Eingabe eines Keywords zur Suche nach Apps.
17
- - **Details zu Apps**:
18
- - App-Titel
19
- - Entwickler
20
- - Bewertung
21
- - Google Play-Link zur App
22
- - App-Icon
23
- - **URL-Ausgabe**: Separates Anzeigen der direkten Google-Play-Links zu den Apps.
24
 
25
- ## Anwendungsfall
26
- Perfekt für Nutzer, die eine schnelle Übersicht über relevante Apps im Google Play Store erhalten möchten.
27
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
  title: "Google-Play-App-Suche"
3
+ description: "Dieses Tool durchsucht den Google Play Store nach Apps durchsuchen, basierend auf einem Suchbegriff, und in einer übersichtliche Ergebnisliste darstellen."
 
 
 
4
  image: _9d81d3d2-f372-476b-beb6-fe6a4841739b.jpeg
5
  ---
6
 
7
+ ## Lernziel
8
 
9
+ * Zu mehreren Themengebieten Listen an Links zu Anwendungen im Google Play Marktplatz erstellen und vergleichen.
 
10
 
11
+ ## Anleitung zur Nutzung der Google-Play-App-Suche
 
 
 
 
 
 
 
 
12
 
13
+ ### 1. Öffnen der Anwendung
14
+ - Zur [Google-Play-App-Suche](https://huggingface.co/spaces/datenwerkzeuge/Google-Play-App-Search) auf Hugging Face navigieren.
15
 
16
+ ### 2. Suchbegriff eingeben
17
+ - Geben Sie einen Suchbegriff in das Eingabefeld **"Search Term"** ein.
18
+
19
+ ### 3. Suche starten
20
+ - Klicken Sie auf die Schaltfläche **"Search"**, um die Suche zu starten.
21
+
22
+ ### 4. Direkte Links anzeigen
23
+ - Zusätzlich werden die direkten Google-Play-Links zu den Apps separat angezeigt.
24
+
25
+ ## Fazit
26
+
27
+ Apps im Google Play Store basierend auf einem Suchbegriff identifizieren und die Ergebnisse in einer übersichtlichen Liste darstellen, ein grundlegendes Vorgehen des Webscrapings und der Datenverarbeitung.
src/02_basics/pdf.qmd CHANGED
@@ -1,10 +1,15 @@
1
  ---
2
  title: "PDFs auswerten"
 
3
  listing:
4
  - id: pdf
5
  contents: "pdf"
6
  type: grid
7
  ---
8
 
 
 
 
 
9
  ::: {#pdf}
10
  :::
 
1
  ---
2
  title: "PDFs auswerten"
3
+ description: "Webseiten oder HTML-Dateien nach PDF-Links durchsuchen und basierend auf extrahierten Schlüsselwörtern gruppieren."
4
  listing:
5
  - id: pdf
6
  contents: "pdf"
7
  type: grid
8
  ---
9
 
10
+ ## Lernziel
11
+
12
+ * Anwendung von PDF-Link-Extractor-Tools zur systematischen Sammlung von PDFs und Nutzung der PDF-Keyword-Grouping-App zur thematischen Gruppierung.
13
+
14
  ::: {#pdf}
15
  :::
src/02_basics/pdf/pdf-grouping.qmd CHANGED
@@ -1,23 +1,32 @@
1
  ---
2
  title: "PDF-Keyword-Grouping-App"
3
  description: "Eine App zur Gruppierung von hochgeladenen PDF-Dateien basierend auf semantischen Themen, einschließlich Keyword-Extraktion und themenbasierter Gruppierung."
4
- author: "Benjamin"
5
- date: "2024-12-16"
6
- date-modified: "2024-12-16"
7
  image: _5a00e9f5-52f7-4e9b-b22d-499e40257a4b.jpeg
8
  ---
9
 
10
- # PDF-Keyword-Grouping-App
11
-
12
- ## Beschreibung
13
- Die App gruppiert hochgeladene PDF-Dateien basierend auf semantischen Themen. Sie extrahiert relevante Schlüsselwörter aus den PDFs und ordnet sie automatisch den am besten passenden Themen zu.
14
-
15
  ## Funktionen
16
  - **PDF-Upload**: Mehrere PDFs gleichzeitig hochladen.
17
  - **Keyword-Extraktion**: Automatische Extraktion der wichtigsten Schlüsselwörter pro PDF.
18
  - **Themenbasierte Gruppierung**: PDFs werden mithilfe von KI-Modellen wie KeyBERT und Sentence Transformers in semantische Gruppen aufgeteilt.
19
  - **Download als ZIP**: Die gruppierten PDFs werden in einem ZIP-Archiv zum Download bereitgestellt.
20
 
21
- ## Anwendungsfall
22
- Geeignet für Nutzer, die eine große Anzahl von PDFs nach inhaltlichen Themen sortieren und effizient organisieren möchten.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
 
 
 
1
  ---
2
  title: "PDF-Keyword-Grouping-App"
3
  description: "Eine App zur Gruppierung von hochgeladenen PDF-Dateien basierend auf semantischen Themen, einschließlich Keyword-Extraktion und themenbasierter Gruppierung."
 
 
 
4
  image: _5a00e9f5-52f7-4e9b-b22d-499e40257a4b.jpeg
5
  ---
6
 
 
 
 
 
 
7
  ## Funktionen
8
  - **PDF-Upload**: Mehrere PDFs gleichzeitig hochladen.
9
  - **Keyword-Extraktion**: Automatische Extraktion der wichtigsten Schlüsselwörter pro PDF.
10
  - **Themenbasierte Gruppierung**: PDFs werden mithilfe von KI-Modellen wie KeyBERT und Sentence Transformers in semantische Gruppen aufgeteilt.
11
  - **Download als ZIP**: Die gruppierten PDFs werden in einem ZIP-Archiv zum Download bereitgestellt.
12
 
13
+ ## Anleitung zur Nutzung der PDF-Keyword-Grouping-App
14
+
15
+ ### 1. Öffnen der Anwendung
16
+ - Gehen Sie zur [PDF-Keyword-Grouping-App](https://huggingface.co/spaces/datenwerkzeuge/PDF-Keyword-Grouping-App) auf Hugging Face.
17
+
18
+ ### 2. PDF-Dateien hochladen
19
+ - Klicken Sie auf die Schaltfläche **"PDFs hochladen"**.
20
+ - Wählen Sie die PDF-Dateien aus, die Sie gruppieren möchten. Sie können mehrere PDFs gleichzeitig hochladen.
21
+
22
+ ### 3. Keyword-Extraktion und themenbasierte Gruppierung
23
+ - Die App extrahiert automatisch die wichtigsten Schlüsselwörter aus den hochgeladenen PDFs.
24
+ - Die PDFs werden mithilfe von KI-Modellen wie KeyBERT und Sentence Transformers in semantische Gruppen aufgeteilt.
25
+
26
+ ### 4. Gruppierte PDFs herunterladen
27
+ - Nachdem die PDFs gruppiert wurden, stellt die App die gruppierten PDFs in einem ZIP-Archiv bereit.
28
+ - Klicken Sie auf die Schaltfläche **"Download als ZIP"**, um das ZIP-Archiv mit den gruppierten PDFs herunterzuladen.
29
+
30
+ ## Fazit
31
 
32
+ Mit einfachen Mitteln und öffentlichen KI-Modelle wie KeyBERT und Sentence Transformers, kann man PDFs effektiv nach Themen gruppieren und so die Dokumentenverwaltung zu erleichtern.
src/02_basics/pdf/pdf-link-extractor.qmd CHANGED
@@ -1,17 +1,9 @@
1
  ---
2
  title: "PDF-Link-Extractor"
3
  description: "Eine Anwendung zur Extraktion und Organisation von PDF-Links von Webseiten oder hochgeladenen HTML-Dateien, einschließlich Download und Komprimierung."
4
- author: "Benjamin"
5
- date: "2024-12-16"
6
- date-modified: "2024-12-16"
7
  image: _30a8d023-6f69-46e3-8ae1-1d7555d04902.jpeg
8
  ---
9
 
10
- # PDF-Link-Extractor
11
-
12
- ## Beschreibung
13
- Diese Anwendung durchsucht eine angegebene Webseite oder eine hochgeladene HTML-Datei nach PDF-Links. Die gefundenen PDF-Dateien werden anschließend heruntergeladen und in einer ZIP-Datei organisiert bereitgestellt.
14
-
15
  ## Funktionen
16
  - **Eingabeoptionen**:
17
  - URL der Webseite
@@ -20,6 +12,29 @@ Diese Anwendung durchsucht eine angegebene Webseite oder eine hochgeladene HTML-
20
  - **Download & Komprimierung**: Herunterladen der PDFs und Bereitstellung in einem ZIP-Archiv.
21
  - **Übersicht der gefundenen PDFs**: Anzeige der Dateigrößen und Namen.
22
 
23
- ## Anwendungsfall
24
- Ideal für Nutzer, die alle PDFs von einer Webseite systematisch sammeln und lokal speichern möchten.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
 
 
 
1
  ---
2
  title: "PDF-Link-Extractor"
3
  description: "Eine Anwendung zur Extraktion und Organisation von PDF-Links von Webseiten oder hochgeladenen HTML-Dateien, einschließlich Download und Komprimierung."
 
 
 
4
  image: _30a8d023-6f69-46e3-8ae1-1d7555d04902.jpeg
5
  ---
6
 
 
 
 
 
 
7
  ## Funktionen
8
  - **Eingabeoptionen**:
9
  - URL der Webseite
 
12
  - **Download & Komprimierung**: Herunterladen der PDFs und Bereitstellung in einem ZIP-Archiv.
13
  - **Übersicht der gefundenen PDFs**: Anzeige der Dateigrößen und Namen.
14
 
15
+ ## Anleitung
16
+
17
+ ### 1. Google-Suche durchführen:
18
+ - Öffnen Sie Ihren Webbrowser und gehen Sie zu [Google](https://www.google.com).
19
+ - Geben Sie in die Suchleiste den folgenden Suchbegriff ein, um nach PDF-Dateien zu suchen, die zivilgesellschaftliche Themen behandeln:
20
+ ```
21
+ Digitale Gesellschaft filetype:pdf
22
+ ```
23
+ - Drücken Sie die Eingabetaste, um die Suche zu starten.
24
+
25
+ ### 2. Suchergebnisse speichern:
26
+ - Nachdem die Suchergebnisse angezeigt werden, speichern Sie die HTML-Seite der Suchergebnisse.
27
+ - Klicken Sie mit der rechten Maustaste auf die Seite und wählen Sie "Seite speichern unter..." oder eine ähnliche Option, je nach Browser.
28
+ - Speichern Sie die HTML-Datei auf Ihrem Computer.
29
+
30
+ ### 3. PDF-Links extrahieren und herunterladen:
31
+ - Verwenden Sie die Anwendung **PDF-Link-Extractor**, um die gespeicherte HTML-Datei hochzuladen und die PDF-Links zu extrahieren.
32
+ - Gehen Sie zur Anwendung [PDF-Link-Extractor](https://huggingface.co/spaces/datenwerkzeuge/pdfs-sammeln).
33
+ - Laden Sie die gespeicherte HTML-Datei hoch.
34
+ - Die Anwendung durchsucht die HTML-Datei nach PDF-Links, lädt die gefundenen PDFs herunter und stellt sie in einem ZIP-Archiv bereit.
35
+ - Laden Sie das ZIP-Archiv herunter, um die gesammelten PDF-Dateien zu erhalten.
36
+
37
+
38
+ ## Fazit
39
 
40
+ Einfacher Webscrapingprozess mit Suche und Sammlung von PDF-Dateien durch die Extraktion von PDF-Links aus Webseiten oder HTML-Dateien, gefolgt von einem praktischen Download und der Bereitstellung in einem komprimierten ZIP-Archiv.
src/02_basics/webspider.qmd CHANGED
@@ -1,10 +1,15 @@
1
  ---
2
  title: "Die erste Webspider"
 
3
  listing:
4
  - id: webspider
5
  contents: "webspider"
6
  type: grid
7
  ---
8
 
 
 
 
 
9
  ::: {#webspider}
10
  :::
 
1
  ---
2
  title: "Die erste Webspider"
3
+ description: "Den Webscraping nachvollziehen durch automatisches URL Extrahieren und durchlaufen von verlinkten Webseiten."
4
  listing:
5
  - id: webspider
6
  contents: "webspider"
7
  type: grid
8
  ---
9
 
10
+ ## Lernziel
11
+
12
+ * Einsatz von Tools wie dem Webseiten-URL-Extraktor zur automatischen Extraktion von Links zur Veranschaulichung des Webscraping Prozesses. Verwendung einer einfachen Webspider.
13
+
14
  ::: {#webspider}
15
  :::
src/02_basics/webspider/website-url-extractor.qmd CHANGED
@@ -1,22 +1,37 @@
1
  ---
2
  title: "Webseiten-URL-Extraktor"
3
  description: "Ein Tool zur Extraktion und Darstellung aller Links von einer angegebenen Webseite, einschließlich Filterung und übersichtlicher Darstellung."
4
- author: "Benjamin"
5
- date: "2024-12-16"
6
- date-modified: "2024-12-16"
7
  image: _1fca0884-d58a-4271-b90f-90afcb2c4be9.jpeg
8
  ---
9
 
10
- # Webseiten-URL-Extraktor
11
-
12
- ## Beschreibung
13
- Dieses Tool extrahiert alle Links von einer angegebenen Webseite und stellt sie übersichtlich dar.
14
-
15
  ## Funktionen
16
  - **Webseitenanalyse**: Automatische Extraktion aller URLs von einer Webseite.
17
  - **Filterung**: Nur vollständige Links (z. B. beginnend mit `http`) werden angezeigt.
18
  - **Einfaches Interface**: Eingabefeld für die URL und eine klare Liste der extrahierten Links.
19
 
20
- ## Anwendungsfall
21
- Ideal für Nutzer, die schnell alle Links einer Webseite analysieren oder weiterverarbeiten möchten.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
 
 
 
1
  ---
2
  title: "Webseiten-URL-Extraktor"
3
  description: "Ein Tool zur Extraktion und Darstellung aller Links von einer angegebenen Webseite, einschließlich Filterung und übersichtlicher Darstellung."
 
 
 
4
  image: _1fca0884-d58a-4271-b90f-90afcb2c4be9.jpeg
5
  ---
6
 
 
 
 
 
 
7
  ## Funktionen
8
  - **Webseitenanalyse**: Automatische Extraktion aller URLs von einer Webseite.
9
  - **Filterung**: Nur vollständige Links (z. B. beginnend mit `http`) werden angezeigt.
10
  - **Einfaches Interface**: Eingabefeld für die URL und eine klare Liste der extrahierten Links.
11
 
12
+ ## Anleitung
13
+
14
+ ### 1. Öffnen der Anwendung
15
+ - Zur [Webseiten-URL-Extraktor-App](https://huggingface.co/spaces/datenwerkzeuge/Webseiten-URL-Extraktor) auf Hugging Face navigieren.
16
+
17
+ ### 2. Eingabemethode wählen
18
+ - Eingabemethode auswählen: **URL** oder **HTML-Datei hochladen**.
19
+
20
+ ### 3. URLs extrahieren
21
+
22
+ #### URL-Eingabemethode:
23
+ - URL der Webseite in das Eingabefeld eingeben (z. B. `https://example.com`).
24
+ - Auf die Schaltfläche **"URLs extrahieren"** klicken.
25
+ - Die App extrahiert alle Links von der angegebenen Webseite und zeigt sie an. Nur vollständige Links, die mit `http` beginnen, werden angezeigt.
26
+
27
+ #### HTML-Datei hochladen:
28
+ - HTML-Datei hochladen, indem auf **"HTML-Datei hochladen"** geklickt und die Datei ausgewählt wird.
29
+ - Auf die Schaltfläche **"URLs extrahieren"** klicken.
30
+ - Die App extrahiert alle Links aus der hochgeladenen HTML-Datei und zeigt sie an. Nur vollständige Links, die mit `http` beginnen, werden angezeigt.
31
+
32
+ ### 4. Ergebnisse anzeigen
33
+ - Die extrahierten URLs werden in einer übersichtlichen Liste angezeigt. Die Links können direkt angeklickt werden, um sie zu öffnen.
34
+
35
+ ## Fazit
36
 
37
+ Das Webseiten-URL-Extraktor-Tool bietet verdeutlicht das Filtern von Links auf Webseiten oder aus HTML-Dateien, indem es nur vollständige URLs darstellt.
src/02_basics/webspider/webspider.qmd CHANGED
@@ -1,15 +1,11 @@
1
  ---
2
  title: "Webspider"
3
  description: "Eine private Webanwendung zur Extraktion strukturierter Daten von Webseiten mithilfe von Streamlit und Scrapy, einschließlich benutzerdefinierter Scraping-Parameter und Datenexport."
4
- author: "Benjamin"
5
- date: "2024-12-16"
6
- date-modified: "2024-12-16"
7
  image: _24e522b8-a6d0-4212-a02e-7738b3098105.jpeg
8
  ---
9
 
10
- **Spaces / Webspider** ist eine private Webanwendung, die mithilfe von **Streamlit** und **Scrapy** entwickelt wurde, um strukturierte Daten von Webseiten zu extrahieren. Sie bietet eine benutzerfreundliche Oberfläche, um Webseiten zu durchsuchen und die Ergebnisse in einem leicht zugänglichen Format herunterzuladen.
11
 
12
- #### Hauptfunktionen:
13
  1. **Benutzerdefinierte Scraping-Parameter**:
14
  - Einstellung der maximalen **Tiefe** für die Navigation durch Seiten (Depth Limit).
15
  - Festlegen der **Seitenanzahl**, die maximal durchsucht werden soll (Page Count Limit).
@@ -28,14 +24,11 @@ image: _24e522b8-a6d0-4212-a02e-7738b3098105.jpeg
28
  - Der integrierte Spider navigiert durch die Webseiten, extrahiert Inhalte und folgt internen Links innerhalb derselben Domain.
29
  - Enthält eine Funktion zur Bereinigung von Text (Entfernung von HTML-Tags, Skripten und Stilen).
30
 
31
- #### Technische Highlights:
32
- - **Streamlit** wird für die interaktive Benutzeroberfläche genutzt.
33
- - **Scrapy** führt die eigentliche Datenextraktion durch.
34
- - Dynamische Anpassung von Scraping-Parametern wie Tiefe und Seitenanzahl.
35
- - Fortschrittsprotokollierung über lokale Logdateien.
36
- - Ergebnisanzeige mit der Option, die gesammelten Daten direkt herunterzuladen.
37
-
38
  **Einsatzmöglichkeiten**:
39
  Die Anwendung eignet sich für die Datenerfassung aus öffentlich zugänglichen Webseiten, sei es zur Inhaltsanalyse, Datenaggregation oder weiteren Recherchezwecken.
40
 
41
- **Hinweis**: Sie sollte verantwortungsvoll und im Einklang mit den geltenden Nutzungsbedingungen der Zielseiten verwendet werden.
 
 
 
 
 
1
  ---
2
  title: "Webspider"
3
  description: "Eine private Webanwendung zur Extraktion strukturierter Daten von Webseiten mithilfe von Streamlit und Scrapy, einschließlich benutzerdefinierter Scraping-Parameter und Datenexport."
 
 
 
4
  image: _24e522b8-a6d0-4212-a02e-7738b3098105.jpeg
5
  ---
6
 
7
+ ## Anleitung
8
 
 
9
  1. **Benutzerdefinierte Scraping-Parameter**:
10
  - Einstellung der maximalen **Tiefe** für die Navigation durch Seiten (Depth Limit).
11
  - Festlegen der **Seitenanzahl**, die maximal durchsucht werden soll (Page Count Limit).
 
24
  - Der integrierte Spider navigiert durch die Webseiten, extrahiert Inhalte und folgt internen Links innerhalb derselben Domain.
25
  - Enthält eine Funktion zur Bereinigung von Text (Entfernung von HTML-Tags, Skripten und Stilen).
26
 
 
 
 
 
 
 
 
27
  **Einsatzmöglichkeiten**:
28
  Die Anwendung eignet sich für die Datenerfassung aus öffentlich zugänglichen Webseiten, sei es zur Inhaltsanalyse, Datenaggregation oder weiteren Recherchezwecken.
29
 
30
+ **Hinweis**: Sie sollte verantwortungsvoll und im Einklang mit den geltenden Nutzungsbedingungen der Zielseiten verwendet werden.
31
+
32
+ ## Fazit
33
+
34
+ Die Webspider-Anwendung bietet eine praktische Einführung in die Welt des Webscrapings, indem sie Nutzern die Möglichkeit gibt, Daten von Webseiten zu extrahieren, zu analysieren und zu exportieren. Sie vermittelt wesentliche Kenntnisse in der Handhabung von Scraping-Parametern.
src/03_low_code/app_market_scraping.qmd DELETED
@@ -1,12 +0,0 @@
1
- ---
2
- title: "App Marktplatz analysieren"
3
- description: "Informationen zu zahlreichen Apps abrufen und auswerten."
4
- listing:
5
- - id: app_market_scraping
6
- contents: "app_market_scraping"
7
- type: grid
8
- ---
9
-
10
- ::: {#app_market_scraping}
11
- :::
12
-
 
 
 
 
 
 
 
 
 
 
 
 
 
src/03_low_code/app_market_scraping/app_market_scraping.qmd CHANGED
@@ -1,10 +1,85 @@
1
  ---
2
  title: "App-Market-Scraping"
3
  description: "Ein Tool zur Extraktion und Analyse von App-Marktdaten, einschließlich benutzerdefinierter Suchparameter und Datenexport."
4
- author: "Benjamin"
5
- date: "2024-12-16"
6
- date-modified: "2024-12-16"
7
  image: _2f0cb788-71a6-4817-ab94-d38c346e4f6f.jpeg
8
  ---
9
 
10
- # App Market Scraping
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
  title: "App-Market-Scraping"
3
  description: "Ein Tool zur Extraktion und Analyse von App-Marktdaten, einschließlich benutzerdefinierter Suchparameter und Datenexport."
 
 
 
4
  image: _2f0cb788-71a6-4817-ab94-d38c346e4f6f.jpeg
5
  ---
6
 
7
+ ## Lernziele
8
+
9
+ - Installation des Google Play Scrapers
10
+ - Einlesen einer CSV-Datei mit App-URLs
11
+ - Abrufen von App-Informationen über einen Loop
12
+ - Visualisierung der abgerufenen Daten
13
+
14
+ ## App Market Scraping
15
+
16
+ ### 1. Installation des Google Play Scrapers
17
+
18
+ Um den Google Play Scraper zu installieren, den folgenden Befehl verwenden:
19
+
20
+ ```python
21
+ !pip install google-play-scraper
22
+ ```
23
+
24
+ ### 2. Einlesen einer CSV-Datei mit App-URLs
25
+
26
+ Eine CSV-Datei (`app_urls.csv`) erstellen, die eine Spalte url enthält, welche die URLs der Google Play Store Apps auflistet. Beispiel:
27
+
28
+ ```python
29
+ url
30
+ https://play.google.com/store/apps/details?id=com.example.app1
31
+ https://play.google.com/store/apps/details?id=com.example.app2
32
+ ```
33
+
34
+ Die CSV-Datei in ein Pandas DataFrame einlesen:
35
+
36
+ ```python
37
+ import pandas as pd
38
+
39
+ # CSV-Datei einlesen
40
+ df = pd.read_csv('app_urls.csv')
41
+ ```
42
+
43
+ ### 3. Abrufen von App-Informationen über einen Loop
44
+
45
+ Den Google Play Scraper verwenden, um Informationen über die Apps abzurufen:
46
+
47
+ ```python
48
+ from google_play_scraper import app
49
+
50
+ # Funktion zum Extrahieren der App-ID aus der URL
51
+ def extract_app_id(url):
52
+ return url.split('id=')[-1]
53
+
54
+ # Liste zum Speichern der App-Informationen
55
+ app_info_list = []
56
+
57
+ # Loop über die URLs in der CSV-Datei
58
+ for url in df['url']:
59
+ app_id = extract_app_id(url)
60
+ app_info = app(app_id, lang='en', country='us')
61
+ app_info_list.append(app_info)
62
+
63
+ # Erstellen eines DataFrames mit den App-Informationen
64
+ app_info_df = pd.DataFrame(app_info_list)
65
+ ```
66
+
67
+ ### 4. Visualisierung der abgerufenen Daten
68
+
69
+ Die abgerufenen Daten visualisieren, z. B. die Bewertungen der Apps:
70
+
71
+ ```python
72
+ import matplotlib.pyplot as plt
73
+
74
+ # Histogramm der App-Bewertungen
75
+ plt.figure(figsize=(10, 6))
76
+ plt.hist(app_info_df['score'], bins=20, color='skyblue', edgecolor='black')
77
+ plt.title('Verteilung der App-Bewertungen')
78
+ plt.xlabel('Bewertung')
79
+ plt.ylabel('Anzahl der Apps')
80
+ plt.show()
81
+ ```
82
+
83
+ ## Fazit
84
+
85
+ Diese Schritte ermöglichen die Installation des Google Play Scrapers, das Einlesen einer CSV-Datei mit App-URLs, das Abrufen von App-Informationen und die Visualisierung der Daten.
src/03_low_code/catalogue.qmd CHANGED
@@ -7,5 +7,9 @@ listing:
7
  type: grid
8
  ---
9
 
 
 
 
 
10
  ::: {#catalogue}
11
  :::
 
7
  type: grid
8
  ---
9
 
10
+ ## Lernziele
11
+
12
+ **Extraktion von Buchdaten von der Website "Books to Scrape" mit Python und BeautifulSoup**: Praktische Übung im Web-Scraping, um das gezielte extrahieren aus Datenstrukturen zu verstehen.
13
+
14
  ::: {#catalogue}
15
  :::
src/03_low_code/catalogue/bookstoscrape.qmd CHANGED
@@ -1,9 +1,6 @@
1
  ---
2
  title: "Web Scraping mit Python: Bücher von Books to Scrape"
3
  description: "Eine Anleitung zum Scraping von Büchern von der Website Books to Scrape, einschließlich Python-Beispielen und Datenexport."
4
- author: "Benjamin"
5
- date: "2024-12-16"
6
- date-modified: "2024-12-16"
7
  image: _be1bcdc2-f540-4a95-a27c-775e8f2c1c07.jpeg
8
  format:
9
  html:
@@ -104,9 +101,3 @@ print(books_df.head())
104
  # Fazit
105
 
106
  In diesem Tutorial haben wir gelernt, wie man die Website [Books to Scrape](https://books.toscrape.com/) mit Python und `BeautifulSoup` scrapt. Wir haben die Titel und Preise der Bücher extrahiert und in einem DataFrame gespeichert. Dieses Beispiel kann als Grundlage für komplexere Scraping-Projekte dienen.
107
-
108
- # Weiterführende Ressourcen
109
-
110
- - [BeautifulSoup-Dokumentation](https://www.crummy.com/software/BeautifulSoup/bs4/doc/)
111
- - [Requests-Dokumentation](https://docs.python-requests.org/en/latest/)
112
- - [Pandas-Dokumentation](https://pandas.pydata.org/docs/)
 
1
  ---
2
  title: "Web Scraping mit Python: Bücher von Books to Scrape"
3
  description: "Eine Anleitung zum Scraping von Büchern von der Website Books to Scrape, einschließlich Python-Beispielen und Datenexport."
 
 
 
4
  image: _be1bcdc2-f540-4a95-a27c-775e8f2c1c07.jpeg
5
  format:
6
  html:
 
101
  # Fazit
102
 
103
  In diesem Tutorial haben wir gelernt, wie man die Website [Books to Scrape](https://books.toscrape.com/) mit Python und `BeautifulSoup` scrapt. Wir haben die Titel und Preise der Bücher extrahiert und in einem DataFrame gespeichert. Dieses Beispiel kann als Grundlage für komplexere Scraping-Projekte dienen.
 
 
 
 
 
 
src/03_low_code/catalogue/quotes_scraper.ipynb CHANGED
@@ -7,9 +7,6 @@
7
  "---\n",
8
  "title: \"Web Scraping mit Python: Bücher von Books to Scrape\"\n",
9
  "description: \"Eine Anleitung zum Scraping von Zitate von der Website Quotes to Scrape, einschließlich Python-Beispielen und Datenexport.\"\n",
10
- "author: \"Benjamin\"\n",
11
- "date: \"2024-12-16\"\n",
12
- "date-modified: \"2024-12-16\"\n",
13
  "image: _2be49964-b89e-45be-8897-491eaa1aad84.jpeg\n",
14
  "---"
15
  ]
 
7
  "---\n",
8
  "title: \"Web Scraping mit Python: Bücher von Books to Scrape\"\n",
9
  "description: \"Eine Anleitung zum Scraping von Zitate von der Website Quotes to Scrape, einschließlich Python-Beispielen und Datenexport.\"\n",
 
 
 
10
  "image: _2be49964-b89e-45be-8897-491eaa1aad84.jpeg\n",
11
  "---"
12
  ]
src/03_low_code/video_transcripts.qmd CHANGED
@@ -7,5 +7,9 @@ listing:
7
  type: grid
8
  ---
9
 
 
 
 
 
10
  ::: {#video_transcripts}
11
  :::
 
7
  type: grid
8
  ---
9
 
10
+ ## Lernziele
11
+
12
+ **Extraktion von YouTube-Transkripten und deren Speicherung als PDF-Dateien**: Lernen, wie man Transkripte von Bildungs- und Informationsvideos extrahiert, um diese Inhalte leichter zugänglich und weiterverwendbar für Bildungsarbeit, Advocacy und Sensibilisierungsmaßnahmen zu machen.
13
+
14
  ::: {#video_transcripts}
15
  :::
src/03_low_code/video_transcripts/get_videos_for_youtube_channels.ipynb CHANGED
@@ -7,13 +7,19 @@
7
  "---\n",
8
  "title: \"YouTube-Transkript-Extraktion\"\n",
9
  "description: \"Ein Tool zur Extraktion und Analyse von YouTube-Transkripten, einschließlich der Speicherung als PDF-Dateien.\"\n",
10
- "author: \"Benjamin\"\n",
11
- "date: \"2024-12-16\"\n",
12
- "date-modified: \"2024-12-16\"\n",
13
  "image: _1001328a-6814-4c32-9ce2-782aeef96791.jpeg\n",
14
  "---"
15
  ]
16
  },
 
 
 
 
 
 
 
 
 
17
  {
18
  "cell_type": "code",
19
  "execution_count": 5,
@@ -33,6 +39,15 @@
33
  "kassenaerztliche_df = pd.read_csv('/content/kassenaerztliche-vereinigung-youtube-channels.csv')\n"
34
  ]
35
  },
 
 
 
 
 
 
 
 
 
36
  {
37
  "cell_type": "code",
38
  "execution_count": 9,
@@ -46,6 +61,14 @@
46
  "combined_df = pd.concat([aerztekammer_df, kassenaerztliche_df], ignore_index=True)\n"
47
  ]
48
  },
 
 
 
 
 
 
 
 
49
  {
50
  "cell_type": "code",
51
  "execution_count": 11,
@@ -89,6 +112,14 @@
89
  " return video_ids"
90
  ]
91
  },
 
 
 
 
 
 
 
 
92
  {
93
  "cell_type": "code",
94
  "execution_count": 13,
@@ -102,6 +133,14 @@
102
  "combined_df['video_id'] = combined_df['id'].apply(get_video_ids)"
103
  ]
104
  },
 
 
 
 
 
 
 
 
105
  {
106
  "cell_type": "code",
107
  "execution_count": 15,
@@ -115,6 +154,14 @@
115
  "combined_df = combined_df.explode('video_id')\n"
116
  ]
117
  },
 
 
 
 
 
 
 
 
118
  {
119
  "cell_type": "code",
120
  "execution_count": 17,
@@ -128,6 +175,14 @@
128
  "combined_df['user_name'] = combined_df['user'].str.split('@').str[1]"
129
  ]
130
  },
 
 
 
 
 
 
 
 
131
  {
132
  "cell_type": "code",
133
  "execution_count": null,
@@ -163,6 +218,14 @@
163
  "plt.show()"
164
  ]
165
  },
 
 
 
 
 
 
 
 
166
  {
167
  "cell_type": "code",
168
  "execution_count": 19,
@@ -175,6 +238,14 @@
175
  "\n",
176
  "combined_df.to_csv('combined_df.csv.gz', compression='gzip', index=False)"
177
  ]
 
 
 
 
 
 
 
 
178
  }
179
  ],
180
  "metadata": {
 
7
  "---\n",
8
  "title: \"YouTube-Transkript-Extraktion\"\n",
9
  "description: \"Ein Tool zur Extraktion und Analyse von YouTube-Transkripten, einschließlich der Speicherung als PDF-Dateien.\"\n",
 
 
 
10
  "image: _1001328a-6814-4c32-9ce2-782aeef96791.jpeg\n",
11
  "---"
12
  ]
13
  },
14
+ {
15
+ "cell_type": "markdown",
16
+ "metadata": {},
17
+ "source": [
18
+ "### Laden der CSV-Dateien\n",
19
+ "\n",
20
+ "In diesem Abschnitt laden wir die CSV-Dateien als Pandas DataFrames."
21
+ ]
22
+ },
23
  {
24
  "cell_type": "code",
25
  "execution_count": 5,
 
39
  "kassenaerztliche_df = pd.read_csv('/content/kassenaerztliche-vereinigung-youtube-channels.csv')\n"
40
  ]
41
  },
42
+ {
43
+ "cell_type": "markdown",
44
+ "metadata": {},
45
+ "source": [
46
+ "### Kombinieren der DataFrames\n",
47
+ "\n",
48
+ "In diesem Abschnitt kombinieren wir die beiden DataFrames zu einem einzigen DataFrame."
49
+ ]
50
+ },
51
  {
52
  "cell_type": "code",
53
  "execution_count": 9,
 
61
  "combined_df = pd.concat([aerztekammer_df, kassenaerztliche_df], ignore_index=True)\n"
62
  ]
63
  },
64
+ {
65
+ "cell_type": "markdown",
66
+ "metadata": {},
67
+ "source": [
68
+ "### Funktion zur Video-ID-Ermittlung\n",
69
+ "In diesem Abschnitt definieren wir eine Funktion, um alle Videos von einem YouTube-Kanal zu erhalten."
70
+ ]
71
+ },
72
  {
73
  "cell_type": "code",
74
  "execution_count": 11,
 
112
  " return video_ids"
113
  ]
114
  },
115
+ {
116
+ "cell_type": "markdown",
117
+ "metadata": {},
118
+ "source": [
119
+ "### Video-IDs für jeden Kanal abrufen\n",
120
+ "In diesem Abschnitt rufen wir die Video-IDs für jeden Kanal im kombinierten DataFrame ab.\n"
121
+ ]
122
+ },
123
  {
124
  "cell_type": "code",
125
  "execution_count": 13,
 
133
  "combined_df['video_id'] = combined_df['id'].apply(get_video_ids)"
134
  ]
135
  },
136
+ {
137
+ "cell_type": "markdown",
138
+ "metadata": {},
139
+ "source": [
140
+ "### Entfalten der Video-ID-Spalte\n",
141
+ "In diesem Abschnitt erweitern wir die Video-ID-Spalte, sodass jede Zeile nur eine Video-ID enthält."
142
+ ]
143
+ },
144
  {
145
  "cell_type": "code",
146
  "execution_count": 15,
 
154
  "combined_df = combined_df.explode('video_id')\n"
155
  ]
156
  },
157
+ {
158
+ "cell_type": "markdown",
159
+ "metadata": {},
160
+ "source": [
161
+ "### Extrahieren des Benutzernamens\n",
162
+ "In diesem Abschnitt extrahieren wir den Benutzernamen aus der URL und fügen ihn als neue Spalte hinzu."
163
+ ]
164
+ },
165
  {
166
  "cell_type": "code",
167
  "execution_count": 17,
 
175
  "combined_df['user_name'] = combined_df['user'].str.split('@').str[1]"
176
  ]
177
  },
178
+ {
179
+ "cell_type": "markdown",
180
+ "metadata": {},
181
+ "source": [
182
+ "### Visualisierung der Videoanzahl\n",
183
+ "In diesem Abschnitt visualisieren wir die Anzahl der Videos pro Benutzername.\n"
184
+ ]
185
+ },
186
  {
187
  "cell_type": "code",
188
  "execution_count": null,
 
218
  "plt.show()"
219
  ]
220
  },
221
+ {
222
+ "cell_type": "markdown",
223
+ "metadata": {},
224
+ "source": [
225
+ "### Speichern des kombinierten DataFrames\n",
226
+ "In diesem Abschnitt speichern wir den kombinierten DataFrame als komprimierte CSV-Datei."
227
+ ]
228
+ },
229
  {
230
  "cell_type": "code",
231
  "execution_count": 19,
 
238
  "\n",
239
  "combined_df.to_csv('combined_df.csv.gz', compression='gzip', index=False)"
240
  ]
241
+ },
242
+ {
243
+ "cell_type": "markdown",
244
+ "metadata": {},
245
+ "source": [
246
+ "# Fazit\n",
247
+ "Dieses Notebook zeigt, wie man YouTube-Kanäle analysiert, indem man Video-IDs extrahiert, die Daten kombiniert und visualisiert, um wertvolle Einblicke in die Videoaktivitäten der Benutzer zu gewinnen."
248
+ ]
249
  }
250
  ],
251
  "metadata": {
src/03_low_code/video_transcripts/social-media.qmd CHANGED
@@ -1,19 +1,16 @@
1
  ---
2
  title: "Web Scraping von Social-Media-Plattformen"
3
  description: "Erklärung und Python-Beispiele zum Scraping von Social-Media-Plattformen unter Berücksichtigung rechtlicher, ethischer und technischer Vorgaben."
4
- author: "Benjamin"
5
- date: "2024-12-16"
6
- date-modified: "2024-12-16"
7
  image: _26268650-a612-4658-b5e2-4cccceb05541.jpeg
8
  ---
9
 
10
- ### Web Scraping von Social-Media-Plattformen: Erklärung und Python-Beispiele
11
 
12
  Web Scraping ist eine Technik, um Daten automatisiert aus Webseiten zu extrahieren. Beim Scraping von Social-Media-Plattformen wie Facebook, Twitter (jetzt X), Instagram oder LinkedIn müssen strenge rechtliche, ethische und technische Vorgaben eingehalten werden. Diese Regeln schützen sowohl die Plattformen als auch die Nutzer vor Missbrauch, Datenmanipulation und Verletzungen der Privatsphäre.
13
 
14
  ---
15
 
16
- #### **Wichtige Vorgaben und Einschränkungen**
17
  1. **Einhaltung der Nutzungsbedingungen**:
18
  - Die Nutzungsbedingungen der Plattformen verbieten oft automatisiertes Scraping ohne ausdrückliche Genehmigung.
19
  - Scraping, das die Plattform oder ihre Nutzer schädigt, ist unzulässig.
@@ -31,7 +28,7 @@ Web Scraping ist eine Technik, um Daten automatisiert aus Webseiten zu extrahier
31
 
32
  ---
33
 
34
- #### **Gemeinsamkeiten beim Scraping von Social Media**
35
  - **Authentifizierung**:
36
  - Die meisten Plattformen erfordern eine Anmeldung, um auf geschützte Inhalte zuzugreifen.
37
  - APIs nutzen Authentifizierungsmethoden wie OAuth oder API-Keys.
@@ -47,9 +44,9 @@ Web Scraping ist eine Technik, um Daten automatisiert aus Webseiten zu extrahier
47
 
48
  ---
49
 
50
- #### **Beispiele für Scraping mit Python**
51
 
52
- ##### 1. **Nutzung der Twitter-API (via `tweepy`)**
53
  Die API ist die offizielle und empfohlene Methode, um Twitter-Daten abzufragen.
54
 
55
  ```python
@@ -78,7 +75,7 @@ for tweet in tweets:
78
 
79
  ---
80
 
81
- ##### 2. **Scraping einer öffentlichen Webseite mit `BeautifulSoup`**
82
  Manchmal möchten Entwickler Daten von öffentlich zugänglichen Social-Media-Seiten extrahieren. Dies birgt Risiken, wenn keine Genehmigung vorliegt.
83
 
84
  ```python
@@ -103,7 +100,7 @@ print([title.text for title in titles])
103
 
104
  ---
105
 
106
- ##### 3. **LinkedIn API für Profildaten (via `linkedin-api`)**
107
  LinkedIn stellt eine API für Unternehmenspartner zur Verfügung. Die Nutzung erfordert Zugangsbeschränkungen und Genehmigungen.
108
 
109
  ```python
@@ -119,7 +116,7 @@ print(profile)
119
 
120
  ---
121
 
122
- #### **Zusammenfassung**
123
  Web Scraping von Social-Media-Daten ist technisch möglich, aber nur unter strikter Beachtung der rechtlichen und ethischen Vorgaben vertretbar. Die Nutzung offizieller APIs ist der empfohlene Weg, da sie den Zugriff kontrolliert und im Einklang mit den Plattformrichtlinien erlaubt.
124
 
125
  Bevor Scraping-Projekte umgesetzt werden:
@@ -127,4 +124,4 @@ Bevor Scraping-Projekte umgesetzt werden:
127
  - **Respektiere die Privatsphäre und Rechte der Nutzer.**
128
  - **Nutze offizielle APIs, wo immer möglich.**
129
 
130
- Die Automatisierung ohne Erlaubnis kann rechtliche Konsequenzen haben, daher ist Vorsicht geboten.
 
1
  ---
2
  title: "Web Scraping von Social-Media-Plattformen"
3
  description: "Erklärung und Python-Beispiele zum Scraping von Social-Media-Plattformen unter Berücksichtigung rechtlicher, ethischer und technischer Vorgaben."
 
 
 
4
  image: _26268650-a612-4658-b5e2-4cccceb05541.jpeg
5
  ---
6
 
7
+ ## Web Scraping von Social-Media-Plattformen: Erklärung und Python-Beispiele
8
 
9
  Web Scraping ist eine Technik, um Daten automatisiert aus Webseiten zu extrahieren. Beim Scraping von Social-Media-Plattformen wie Facebook, Twitter (jetzt X), Instagram oder LinkedIn müssen strenge rechtliche, ethische und technische Vorgaben eingehalten werden. Diese Regeln schützen sowohl die Plattformen als auch die Nutzer vor Missbrauch, Datenmanipulation und Verletzungen der Privatsphäre.
10
 
11
  ---
12
 
13
+ ## Wichtige Vorgaben und Einschränkungen
14
  1. **Einhaltung der Nutzungsbedingungen**:
15
  - Die Nutzungsbedingungen der Plattformen verbieten oft automatisiertes Scraping ohne ausdrückliche Genehmigung.
16
  - Scraping, das die Plattform oder ihre Nutzer schädigt, ist unzulässig.
 
28
 
29
  ---
30
 
31
+ ## Gemeinsamkeiten beim Scraping von Social Media
32
  - **Authentifizierung**:
33
  - Die meisten Plattformen erfordern eine Anmeldung, um auf geschützte Inhalte zuzugreifen.
34
  - APIs nutzen Authentifizierungsmethoden wie OAuth oder API-Keys.
 
44
 
45
  ---
46
 
47
+ ## Beispiele für Scraping mit Python
48
 
49
+ ### 1. Nutzung der Twitter-API (via `tweepy`)
50
  Die API ist die offizielle und empfohlene Methode, um Twitter-Daten abzufragen.
51
 
52
  ```python
 
75
 
76
  ---
77
 
78
+ ### 2. Scraping einer öffentlichen Webseite mit `BeautifulSoup`
79
  Manchmal möchten Entwickler Daten von öffentlich zugänglichen Social-Media-Seiten extrahieren. Dies birgt Risiken, wenn keine Genehmigung vorliegt.
80
 
81
  ```python
 
100
 
101
  ---
102
 
103
+ ### 3. LinkedIn API für Profildaten (via `linkedin-api`)
104
  LinkedIn stellt eine API für Unternehmenspartner zur Verfügung. Die Nutzung erfordert Zugangsbeschränkungen und Genehmigungen.
105
 
106
  ```python
 
116
 
117
  ---
118
 
119
+ ## Zusammenfassung
120
  Web Scraping von Social-Media-Daten ist technisch möglich, aber nur unter strikter Beachtung der rechtlichen und ethischen Vorgaben vertretbar. Die Nutzung offizieller APIs ist der empfohlene Weg, da sie den Zugriff kontrolliert und im Einklang mit den Plattformrichtlinien erlaubt.
121
 
122
  Bevor Scraping-Projekte umgesetzt werden:
 
124
  - **Respektiere die Privatsphäre und Rechte der Nutzer.**
125
  - **Nutze offizielle APIs, wo immer möglich.**
126
 
127
+ Die Automatisierung ohne Erlaubnis kann rechtliche Konsequenzen haben, daher ist Vorsicht geboten.
src/03_low_code/video_transcripts/youtube-transcript-extraction.ipynb CHANGED
@@ -7,13 +7,18 @@
7
  "---\n",
8
  "title: \"Videos für YouTube-Kanäle abrufen\"\n",
9
  "description: \"Ein Tool zur Suche und Auflistung von Videos eines YouTube-Kanals basierend auf dem Kanalnamen, einschließlich der Anzeige von Videodetails und direkten Links.\"\n",
10
- "author: \"Benjamin\"\n",
11
- "date: \"2024-12-16\"\n",
12
- "date-modified: \"2024-12-16\"\n",
13
  "image: _0b1fd4bd-7f49-4655-bb32-462a52df7eba.jpeg\n",
14
  "---"
15
  ]
16
  },
 
 
 
 
 
 
 
 
17
  {
18
  "cell_type": "code",
19
  "execution_count": 1,
@@ -32,6 +37,14 @@
32
  "# ! pip install pytube youtube-transcript-api reportlab -q"
33
  ]
34
  },
 
 
 
 
 
 
 
 
35
  {
36
  "cell_type": "code",
37
  "execution_count": 2,
@@ -55,6 +68,14 @@
55
  "import zipfile"
56
  ]
57
  },
 
 
 
 
 
 
 
 
58
  {
59
  "cell_type": "code",
60
  "execution_count": 3,
@@ -123,7 +144,23 @@
123
  " except NoTranscriptFound:\n",
124
  " return \"Es wurden keine Transkripte für dieses Video gefunden.\"\n",
125
  " except Exception as e:\n",
126
- " return f\"Allgemeiner Fehler beim Abrufen des Transkripts: {e}\"\n",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  "\n",
128
  "# Funktion zum Erstellen eines PDFs\n",
129
  "def save_transcript_as_pdf_with_pagination(title, transcript):\n",
@@ -177,9 +214,17 @@
177
  " return filename"
178
  ]
179
  },
 
 
 
 
 
 
 
 
180
  {
181
  "cell_type": "code",
182
- "execution_count": 15,
183
  "metadata": {
184
  "execution": {
185
  "iopub.execute_input": "2024-12-08T19:32:38.175946Z",
@@ -190,21 +235,7 @@
190
  },
191
  "trusted": true
192
  },
193
- "outputs": [
194
- {
195
- "name": "stdout",
196
- "output_type": "stream",
197
- "text": [
198
- "Verarbeite Video: B7uzC96-930\n",
199
- "Transkript für 'B7uzC96-930' gespeichert als B7uzC96-930.pdf.\n",
200
- "Verarbeite Video: 4QeKMnd8B7Q\n",
201
- "Transkript für '4QeKMnd8B7Q' gespeichert als 4QeKMnd8B7Q.pdf.\n",
202
- "Verarbeite Video: 30wxAJ5uyzs\n",
203
- "Transkript für '30wxAJ5uyzs' gespeichert als 30wxAJ5uyzs.pdf.\n",
204
- "ZIP-Archiv 'transcripts.zip' wurde erstellt.\n"
205
- ]
206
- }
207
- ],
208
  "source": [
209
  "# Eingabe der URLs\n",
210
  "urls = \"https://www.youtube.com/playlist?list=PLf8HAovJg47MN7bswKf73pffom98Fx8Q8\"\n",
@@ -240,7 +271,23 @@
240
  " print(f\"Transkript für '{title}' gespeichert als {pdf_filename}.\")\n",
241
  "\n",
242
  " except Exception as e:\n",
243
- " print(f\"Fehler bei der Verarbeitung von {video_url}: {e}\")\n",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
244
  "\n",
245
  "# Erstellen eines ZIP-Archivs\n",
246
  "zip_filename = \"transcripts.zip\"\n",
@@ -252,6 +299,14 @@
252
  "print(f\"ZIP-Archiv '{zip_filename}' wurde erstellt.\")"
253
  ]
254
  },
 
 
 
 
 
 
 
 
255
  {
256
  "cell_type": "code",
257
  "execution_count": 13,
@@ -269,6 +324,14 @@
269
  "source": [
270
  "# os.remove(zip_filename)"
271
  ]
 
 
 
 
 
 
 
 
272
  }
273
  ],
274
  "metadata": {
 
7
  "---\n",
8
  "title: \"Videos für YouTube-Kanäle abrufen\"\n",
9
  "description: \"Ein Tool zur Suche und Auflistung von Videos eines YouTube-Kanals basierend auf dem Kanalnamen, einschließlich der Anzeige von Videodetails und direkten Links.\"\n",
 
 
 
10
  "image: _0b1fd4bd-7f49-4655-bb32-462a52df7eba.jpeg\n",
11
  "---"
12
  ]
13
  },
14
+ {
15
+ "cell_type": "markdown",
16
+ "metadata": {},
17
+ "source": [
18
+ "### Installation der benötigten Pakete\n",
19
+ "In diesem Abschnitt installieren wir die benötigten Python-Pakete.\n"
20
+ ]
21
+ },
22
  {
23
  "cell_type": "code",
24
  "execution_count": 1,
 
37
  "# ! pip install pytube youtube-transcript-api reportlab -q"
38
  ]
39
  },
40
+ {
41
+ "cell_type": "markdown",
42
+ "metadata": {},
43
+ "source": [
44
+ "### Importieren der Bibliotheken\n",
45
+ "In diesem Abschnitt importieren wir die notwendigen Bibliotheken für die Transkript-Extraktion und PDF-Erstellung.\n"
46
+ ]
47
+ },
48
  {
49
  "cell_type": "code",
50
  "execution_count": 2,
 
68
  "import zipfile"
69
  ]
70
  },
71
+ {
72
+ "cell_type": "markdown",
73
+ "metadata": {},
74
+ "source": [
75
+ "### Funktion zum Extrahieren des Transkripts\n",
76
+ "In diesem Abschnitt definieren wir eine Funktion, um Transkripte von YouTube-Videos basierend auf bevorzugten Sprachen zu extrahieren."
77
+ ]
78
+ },
79
  {
80
  "cell_type": "code",
81
  "execution_count": 3,
 
144
  " except NoTranscriptFound:\n",
145
  " return \"Es wurden keine Transkripte für dieses Video gefunden.\"\n",
146
  " except Exception as e:\n",
147
+ " return f\"Allgemeiner Fehler beim Abrufen des Transkripts: {e}\"\n"
148
+ ]
149
+ },
150
+ {
151
+ "cell_type": "markdown",
152
+ "metadata": {},
153
+ "source": [
154
+ "### Funktion zum Erstellen eines PDFs\n",
155
+ "In diesem Abschnitt definieren wir eine Funktion, um das extrahierte Transkript als PDF-Datei zu speichern.\n"
156
+ ]
157
+ },
158
+ {
159
+ "cell_type": "code",
160
+ "execution_count": null,
161
+ "metadata": {},
162
+ "outputs": [],
163
+ "source": [
164
  "\n",
165
  "# Funktion zum Erstellen eines PDFs\n",
166
  "def save_transcript_as_pdf_with_pagination(title, transcript):\n",
 
214
  " return filename"
215
  ]
216
  },
217
+ {
218
+ "cell_type": "markdown",
219
+ "metadata": {},
220
+ "source": [
221
+ "### Eingabe der URLs\n",
222
+ "In diesem Abschnitt geben wir die URLs der YouTube-Videos oder -Playlists ein, deren Transkripte wir extrahieren möchten.\n"
223
+ ]
224
+ },
225
  {
226
  "cell_type": "code",
227
+ "execution_count": null,
228
  "metadata": {
229
  "execution": {
230
  "iopub.execute_input": "2024-12-08T19:32:38.175946Z",
 
235
  },
236
  "trusted": true
237
  },
238
+ "outputs": [],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
239
  "source": [
240
  "# Eingabe der URLs\n",
241
  "urls = \"https://www.youtube.com/playlist?list=PLf8HAovJg47MN7bswKf73pffom98Fx8Q8\"\n",
 
271
  " print(f\"Transkript für '{title}' gespeichert als {pdf_filename}.\")\n",
272
  "\n",
273
  " except Exception as e:\n",
274
+ " print(f\"Fehler bei der Verarbeitung von {video_url}: {e}\")\n"
275
+ ]
276
+ },
277
+ {
278
+ "cell_type": "markdown",
279
+ "metadata": {},
280
+ "source": [
281
+ "### Erstellen eines ZIP-Archivs\n",
282
+ "In diesem Abschnitt erstellen wir ein ZIP-Archiv, das alle generierten PDF-Dateien enthält.\n"
283
+ ]
284
+ },
285
+ {
286
+ "cell_type": "code",
287
+ "execution_count": null,
288
+ "metadata": {},
289
+ "outputs": [],
290
+ "source": [
291
  "\n",
292
  "# Erstellen eines ZIP-Archivs\n",
293
  "zip_filename = \"transcripts.zip\"\n",
 
299
  "print(f\"ZIP-Archiv '{zip_filename}' wurde erstellt.\")"
300
  ]
301
  },
302
+ {
303
+ "cell_type": "markdown",
304
+ "metadata": {},
305
+ "source": [
306
+ "### Löschen der ZIP-Datei\n",
307
+ "In diesem Abschnitt löschen wir die ZIP-Datei, falls sie nicht mehr benötigt wird."
308
+ ]
309
+ },
310
  {
311
  "cell_type": "code",
312
  "execution_count": 13,
 
324
  "source": [
325
  "# os.remove(zip_filename)"
326
  ]
327
+ },
328
+ {
329
+ "cell_type": "markdown",
330
+ "metadata": {},
331
+ "source": [
332
+ "# Fazit\n",
333
+ "In diesem Notebook haben wir gelernt, wie man YouTube-Transkripte extrahiert und als PDF-Dateien speichert. Wir haben die notwendigen Pakete installiert, Funktionen zur Transkript-Extraktion und PDF-Erstellung definiert, und schließlich die Transkripte von YouTube-Videos in einem ZIP-Archiv zusammengefasst. Diese Schritte ermöglichen eine effiziente Analyse und Speicherung von YouTube-Inhalten."
334
+ ]
335
  }
336
  ],
337
  "metadata": {
src/04_use_case/forum/buergergeld_forum.ipynb CHANGED
@@ -7,12 +7,30 @@
7
  "---\n",
8
  "title: \"Web Scraping von Foren: Bürgergeld Forum\"\n",
9
  "description: \"Ein Tool zur Extraktion und Analyse von Forenbeiträgen aus dem Bürgergeld Forum, einschließlich der Verarbeitung und Visualisierung der Daten.\"\n",
10
- "author: \"Benjamin\"\n",
11
- "date: \"2024-12-16\"\n",
12
- "date-modified: \"2024-12-16\"\n",
13
  "---"
14
  ]
15
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  {
17
  "cell_type": "code",
18
  "execution_count": 186,
@@ -62,6 +80,14 @@
62
  "# download_pages(base_url, start_page, end_page, output_directory)"
63
  ]
64
  },
 
 
 
 
 
 
 
 
65
  {
66
  "cell_type": "code",
67
  "execution_count": 187,
@@ -527,6 +553,21 @@
527
  "df"
528
  ]
529
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
530
  {
531
  "cell_type": "code",
532
  "execution_count": 188,
@@ -1006,6 +1047,14 @@
1006
  "df"
1007
  ]
1008
  },
 
 
 
 
 
 
 
 
1009
  {
1010
  "cell_type": "code",
1011
  "execution_count": 189,
@@ -1519,6 +1568,14 @@
1519
  "df"
1520
  ]
1521
  },
 
 
 
 
 
 
 
 
1522
  {
1523
  "cell_type": "code",
1524
  "execution_count": 190,
@@ -1533,6 +1590,14 @@
1533
  "df['Zugriffe'] = df['Zugriffe'].str.split('\\n\\n\\n', n=1).str[0]"
1534
  ]
1535
  },
 
 
 
 
 
 
 
 
1536
  {
1537
  "cell_type": "code",
1538
  "execution_count": 191,
@@ -1550,6 +1615,14 @@
1550
  "df['Zugriffe'] = df['Zugriffe'].str.split('\\n').str[1]"
1551
  ]
1552
  },
 
 
 
 
 
 
 
 
1553
  {
1554
  "cell_type": "code",
1555
  "execution_count": 192,
@@ -1607,6 +1680,14 @@
1607
  "df[['Subject_Part2_2_2_split', 'Subject_Part2_2_2_rest']] = df['Subject_Part2_2_2'].str.split('\\n', n=1, expand=True)"
1608
  ]
1609
  },
 
 
 
 
 
 
 
 
1610
  {
1611
  "cell_type": "code",
1612
  "execution_count": 196,
@@ -1620,6 +1701,14 @@
1620
  "df = df.drop(columns=['Stats', 'LastPost', 'Subject_Part2', 'Subject_Part2_2', 'Subject_Part2_2_1', 'Subject', 'Subject_Part2_2_2'])"
1621
  ]
1622
  },
 
 
 
 
 
 
 
 
1623
  {
1624
  "cell_type": "code",
1625
  "execution_count": 197,
@@ -1648,6 +1737,14 @@
1648
  "print(f\"Do the 'Antworten' and 'Subject_Part2_1' columns have the same content?: {comparison_result}\")"
1649
  ]
1650
  },
 
 
 
 
 
 
 
 
1651
  {
1652
  "cell_type": "code",
1653
  "execution_count": 198,
@@ -1679,6 +1776,14 @@
1679
  "print(f\"Do the 'Date_LastPost' and 'Subject_Part2_2_2_rest' columns have the same content?: {comparison_result_date}\")"
1680
  ]
1681
  },
 
 
 
 
 
 
 
 
1682
  {
1683
  "cell_type": "code",
1684
  "execution_count": 199,
@@ -1701,6 +1806,14 @@
1701
  "})"
1702
  ]
1703
  },
 
 
 
 
 
 
 
 
1704
  {
1705
  "cell_type": "code",
1706
  "execution_count": 200,
@@ -1724,6 +1837,14 @@
1724
  "df = df[final_column_order]"
1725
  ]
1726
  },
 
 
 
 
 
 
 
 
1727
  {
1728
  "cell_type": "code",
1729
  "execution_count": 201,
@@ -1745,6 +1866,14 @@
1745
  "df['Zugriffe'] = pd.to_numeric(df['Zugriffe'], errors='coerce').fillna(0).astype(int)"
1746
  ]
1747
  },
 
 
 
 
 
 
 
 
1748
  {
1749
  "cell_type": "code",
1750
  "execution_count": 202,
@@ -1759,6 +1888,14 @@
1759
  "df['Antworten2'] = pd.to_numeric(df['Antworten2'], errors='coerce').fillna(0).astype(int)"
1760
  ]
1761
  },
 
 
 
 
 
 
 
 
1762
  {
1763
  "cell_type": "code",
1764
  "execution_count": 216,
@@ -1779,6 +1916,14 @@
1779
  "df['Jahr_Letzter_Post'] = pd.to_numeric(df['Jahr_Letzter_Post'], errors='coerce').astype('Int64')"
1780
  ]
1781
  },
 
 
 
 
 
 
 
 
1782
  {
1783
  "cell_type": "code",
1784
  "execution_count": 217,
@@ -1819,6 +1964,14 @@
1819
  "df.info()"
1820
  ]
1821
  },
 
 
 
 
 
 
 
 
1822
  {
1823
  "cell_type": "code",
1824
  "execution_count": 211,
@@ -1929,7 +2082,16 @@
1929
  "id": "TGUIR11zUVW-"
1930
  },
1931
  "source": [
1932
- "## Analyse"
 
 
 
 
 
 
 
 
 
1933
  ]
1934
  },
1935
  {
@@ -1978,6 +2140,14 @@
1978
  "plt.show()"
1979
  ]
1980
  },
 
 
 
 
 
 
 
 
1981
  {
1982
  "cell_type": "code",
1983
  "execution_count": 221,
@@ -2023,6 +2193,14 @@
2023
  "plt.show()"
2024
  ]
2025
  },
 
 
 
 
 
 
 
 
2026
  {
2027
  "cell_type": "code",
2028
  "execution_count": 225,
@@ -2441,6 +2619,14 @@
2441
  "result"
2442
  ]
2443
  },
 
 
 
 
 
 
 
 
2444
  {
2445
  "cell_type": "code",
2446
  "execution_count": 226,
@@ -2865,7 +3051,16 @@
2865
  "id": "FanmCt50UYMD"
2866
  },
2867
  "source": [
2868
- "## Speichern"
 
 
 
 
 
 
 
 
 
2869
  ]
2870
  },
2871
  {
@@ -2909,6 +3104,32 @@
2909
  "\n",
2910
  "# compress_directory(directory_to_compress, output_zip_filename)"
2911
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2912
  }
2913
  ],
2914
  "metadata": {
 
7
  "---\n",
8
  "title: \"Web Scraping von Foren: Bürgergeld Forum\"\n",
9
  "description: \"Ein Tool zur Extraktion und Analyse von Forenbeiträgen aus dem Bürgergeld Forum, einschließlich der Verarbeitung und Visualisierung der Daten.\"\n",
 
 
 
10
  "---"
11
  ]
12
  },
13
+ {
14
+ "cell_type": "markdown",
15
+ "metadata": {},
16
+ "source": [
17
+ "## Lernziele\n",
18
+ "\n",
19
+ "**Web Scraping von Foren**\n",
20
+ "\n",
21
+ "* Herunterladen und Speichern von HTML-Seiten eines Forums.\n",
22
+ "* Extraktion und Analyse von Forenbeiträgen und Metadaten.\n",
23
+ "* Verarbeitung und Bereinigung der extrahierten Daten mit Pandas."
24
+ ]
25
+ },
26
+ {
27
+ "cell_type": "markdown",
28
+ "metadata": {},
29
+ "source": [
30
+ "## HTML-Seiten herunterladen\n",
31
+ "Dieser Code lädt HTML-Seiten des Bürgergeld Forums herunter und speichert sie in einem Ordner.\n"
32
+ ]
33
+ },
34
  {
35
  "cell_type": "code",
36
  "execution_count": 186,
 
80
  "# download_pages(base_url, start_page, end_page, output_directory)"
81
  ]
82
  },
83
+ {
84
+ "cell_type": "markdown",
85
+ "metadata": {},
86
+ "source": [
87
+ "## Daten extrahieren\n",
88
+ "Dieser Code extrahiert die Texte der Elemente `<li class=\"columnSubject\">`, `<li class=\"columnStats\">` und `<li class=\"columnLastPost\">` aus den HTML-Dateien und speichert sie in einem Pandas DataFrame.\n"
89
+ ]
90
+ },
91
  {
92
  "cell_type": "code",
93
  "execution_count": 187,
 
553
  "df"
554
  ]
555
  },
556
+ {
557
+ "cell_type": "markdown",
558
+ "metadata": {},
559
+ "source": [
560
+ "## Daten reinigen"
561
+ ]
562
+ },
563
+ {
564
+ "cell_type": "markdown",
565
+ "metadata": {},
566
+ "source": [
567
+ "### Spalte 'LastPost' aufteilen\n",
568
+ "Dieser Code teilt die Spalte `df.LastPost` in `Nutzer_LastPost` und `Datum_LastPost` auf.\n"
569
+ ]
570
+ },
571
  {
572
  "cell_type": "code",
573
  "execution_count": 188,
 
1047
  "df"
1048
  ]
1049
  },
1050
+ {
1051
+ "cell_type": "markdown",
1052
+ "metadata": {},
1053
+ "source": [
1054
+ "### Spalte 'Stats' aufteilen\n",
1055
+ "Dieser Code teilt die Spalte `df.Stats` in `Antworten` und `Zugriffe` auf.\n"
1056
+ ]
1057
+ },
1058
  {
1059
  "cell_type": "code",
1060
  "execution_count": 189,
 
1568
  "df"
1569
  ]
1570
  },
1571
+ {
1572
+ "cell_type": "markdown",
1573
+ "metadata": {},
1574
+ "source": [
1575
+ "### Spalte 'Zugriffe' bereinigen\n",
1576
+ "Dieser Code bereinigt die Spalte `df.Zugriffe`, indem nur der Inhalt bis zum ersten Vorkommen von `\\n\\n\\n` behalten wird.\n"
1577
+ ]
1578
+ },
1579
  {
1580
  "cell_type": "code",
1581
  "execution_count": 190,
 
1590
  "df['Zugriffe'] = df['Zugriffe'].str.split('\\n\\n\\n', n=1).str[0]"
1591
  ]
1592
  },
1593
+ {
1594
+ "cell_type": "markdown",
1595
+ "metadata": {},
1596
+ "source": [
1597
+ "### Spalten 'Antworten' und 'Zugriffe' weiter aufteilen\n",
1598
+ "Dieser Code teilt die Spalten `df.Antworten` und `df.Zugriffe` jeweils an der Stelle `\\n` und behält jeweils den zweiten Teil.\n"
1599
+ ]
1600
+ },
1601
  {
1602
  "cell_type": "code",
1603
  "execution_count": 191,
 
1615
  "df['Zugriffe'] = df['Zugriffe'].str.split('\\n').str[1]"
1616
  ]
1617
  },
1618
+ {
1619
+ "cell_type": "markdown",
1620
+ "metadata": {},
1621
+ "source": [
1622
+ "### Spalte 'Subject' aufteilen\n",
1623
+ "Dieser Code teilt die Spalte `df.Subject` am ersten Vorkommen von `\\n` in zwei separate Spalten.\n"
1624
+ ]
1625
+ },
1626
  {
1627
  "cell_type": "code",
1628
  "execution_count": 192,
 
1680
  "df[['Subject_Part2_2_2_split', 'Subject_Part2_2_2_rest']] = df['Subject_Part2_2_2'].str.split('\\n', n=1, expand=True)"
1681
  ]
1682
  },
1683
+ {
1684
+ "cell_type": "markdown",
1685
+ "metadata": {},
1686
+ "source": [
1687
+ "### Unnötige Spalten entfernen\n",
1688
+ "Dieser Code entfernt die Spalten `Stats`, `LastPost`, `Subject_Part2`, `Subject_Part2_2`, `Subject_Part2_2_1`, `Subject` und `Subject_Part2_2_2` aus dem DataFrame `df`.\n"
1689
+ ]
1690
+ },
1691
  {
1692
  "cell_type": "code",
1693
  "execution_count": 196,
 
1701
  "df = df.drop(columns=['Stats', 'LastPost', 'Subject_Part2', 'Subject_Part2_2', 'Subject_Part2_2_1', 'Subject', 'Subject_Part2_2_2'])"
1702
  ]
1703
  },
1704
+ {
1705
+ "cell_type": "markdown",
1706
+ "metadata": {},
1707
+ "source": [
1708
+ "### Spalteninhalte vergleichen\n",
1709
+ "Dieser Code vergleicht die Inhalte der Spalten `Antworten` und `Subject_Part2_1`.\n"
1710
+ ]
1711
+ },
1712
  {
1713
  "cell_type": "code",
1714
  "execution_count": 197,
 
1737
  "print(f\"Do the 'Antworten' and 'Subject_Part2_1' columns have the same content?: {comparison_result}\")"
1738
  ]
1739
  },
1740
+ {
1741
+ "cell_type": "markdown",
1742
+ "metadata": {},
1743
+ "source": [
1744
+ "### Weitere Spalteninhalte vergleichen\n",
1745
+ "Dieser Code vergleicht die Inhalte der Spalten `User_LastPost` und `Subject_Part2_2_2_split` sowie `Date_LastPost` und `Subject_Part2_2_2_rest`.\n"
1746
+ ]
1747
+ },
1748
  {
1749
  "cell_type": "code",
1750
  "execution_count": 198,
 
1776
  "print(f\"Do the 'Date_LastPost' and 'Subject_Part2_2_2_rest' columns have the same content?: {comparison_result_date}\")"
1777
  ]
1778
  },
1779
+ {
1780
+ "cell_type": "markdown",
1781
+ "metadata": {},
1782
+ "source": [
1783
+ "### Spalten umbenennen\n",
1784
+ "Dieser Code benennt die Spalten im DataFrame `df` um.\n"
1785
+ ]
1786
+ },
1787
  {
1788
  "cell_type": "code",
1789
  "execution_count": 199,
 
1806
  "})"
1807
  ]
1808
  },
1809
+ {
1810
+ "cell_type": "markdown",
1811
+ "metadata": {},
1812
+ "source": [
1813
+ "### Spaltenreihenfolge ändern\n",
1814
+ "Dieser Code ändert die Reihenfolge der Spalten im DataFrame `df`.\n"
1815
+ ]
1816
+ },
1817
  {
1818
  "cell_type": "code",
1819
  "execution_count": 200,
 
1837
  "df = df[final_column_order]"
1838
  ]
1839
  },
1840
+ {
1841
+ "cell_type": "markdown",
1842
+ "metadata": {},
1843
+ "source": [
1844
+ "### Spalte 'Zugriffe' formatieren\n",
1845
+ "Dieser Code formatiert die Spalte `df.Zugriffe` als ganze Zahl.\n"
1846
+ ]
1847
+ },
1848
  {
1849
  "cell_type": "code",
1850
  "execution_count": 201,
 
1866
  "df['Zugriffe'] = pd.to_numeric(df['Zugriffe'], errors='coerce').fillna(0).astype(int)"
1867
  ]
1868
  },
1869
+ {
1870
+ "cell_type": "markdown",
1871
+ "metadata": {},
1872
+ "source": [
1873
+ "### Spalten 'Antworten' und 'Antworten2' formatieren\n",
1874
+ "Dieser Code formatiert die Spalten `df.Antworten` und `df.Antworten2` als ganze Zahl.\n"
1875
+ ]
1876
+ },
1877
  {
1878
  "cell_type": "code",
1879
  "execution_count": 202,
 
1888
  "df['Antworten2'] = pd.to_numeric(df['Antworten2'], errors='coerce').fillna(0).astype(int)"
1889
  ]
1890
  },
1891
+ {
1892
+ "cell_type": "markdown",
1893
+ "metadata": {},
1894
+ "source": [
1895
+ "### Jahr aus 'Datum_Letzter_Post' extrahieren\n",
1896
+ "Dieser Code extrahiert Jahreszahlen aus der Spalte `df.Datum_Letzter_Post` und speichert sie in der Spalte `Jahr_Letzter_Post`.\n"
1897
+ ]
1898
+ },
1899
  {
1900
  "cell_type": "code",
1901
  "execution_count": 216,
 
1916
  "df['Jahr_Letzter_Post'] = pd.to_numeric(df['Jahr_Letzter_Post'], errors='coerce').astype('Int64')"
1917
  ]
1918
  },
1919
+ {
1920
+ "cell_type": "markdown",
1921
+ "metadata": {},
1922
+ "source": [
1923
+ "### DataFrame-Informationen anzeigen\n",
1924
+ "Dieser Code zeigt Informationen über den DataFrame `df` an.\n"
1925
+ ]
1926
+ },
1927
  {
1928
  "cell_type": "code",
1929
  "execution_count": 217,
 
1964
  "df.info()"
1965
  ]
1966
  },
1967
+ {
1968
+ "cell_type": "markdown",
1969
+ "metadata": {},
1970
+ "source": [
1971
+ "### Transponierte Daten anzeigen\n",
1972
+ "Dieser Code zeigt die transponierten Daten des DataFrame `df` an.\n"
1973
+ ]
1974
+ },
1975
  {
1976
  "cell_type": "code",
1977
  "execution_count": 211,
 
2082
  "id": "TGUIR11zUVW-"
2083
  },
2084
  "source": [
2085
+ "## Analyse\n",
2086
+ "Dieser Abschnitt enthält die Analyse der Daten.\n"
2087
+ ]
2088
+ },
2089
+ {
2090
+ "cell_type": "markdown",
2091
+ "metadata": {},
2092
+ "source": [
2093
+ "### Wordcloud der Themen\n",
2094
+ "Dieser Code zeigt die Themen mit den meisten Zugriffen als Wordcloud und entfernt zuvor deutsche Stopwörter.\n"
2095
  ]
2096
  },
2097
  {
 
2140
  "plt.show()"
2141
  ]
2142
  },
2143
+ {
2144
+ "cell_type": "markdown",
2145
+ "metadata": {},
2146
+ "source": [
2147
+ "### Lineplot der Jahreszahlen\n",
2148
+ "Dieser Code zeigt die Spalte `df.Jahr_Letzter_Post` als Lineplot und stellt sicher, dass die x-Achse ganze Jahreszahlen zeigt.\n"
2149
+ ]
2150
+ },
2151
  {
2152
  "cell_type": "code",
2153
  "execution_count": 221,
 
2193
  "plt.show()"
2194
  ]
2195
  },
2196
+ {
2197
+ "cell_type": "markdown",
2198
+ "metadata": {},
2199
+ "source": [
2200
+ "### Themen mit den geringsten Jahreszahlen\n",
2201
+ "Dieser Code zeigt die Themen und die Jahreszahl sowie `Datum_Letzter_Post` für die 10 Zeilen mit den geringsten Werten bei `df.Jahr_Letzter_Post`.\n"
2202
+ ]
2203
+ },
2204
  {
2205
  "cell_type": "code",
2206
  "execution_count": 225,
 
2619
  "result"
2620
  ]
2621
  },
2622
+ {
2623
+ "cell_type": "markdown",
2624
+ "metadata": {},
2625
+ "source": [
2626
+ "### Themen mit den höchsten Jahreszahlen\n",
2627
+ "Dieser Code zeigt die Themen und die Jahreszahl sowie `Datum_Letzter_Post` für die 10 Zeilen mit den höchsten Werten bei `df.Jahr_Letzter_Post`.\n"
2628
+ ]
2629
+ },
2630
  {
2631
  "cell_type": "code",
2632
  "execution_count": 226,
 
3051
  "id": "FanmCt50UYMD"
3052
  },
3053
  "source": [
3054
+ "## Speichern\n",
3055
+ "Dieser Abschnitt enthält den Code zum Speichern der Daten.\n"
3056
+ ]
3057
+ },
3058
+ {
3059
+ "cell_type": "markdown",
3060
+ "metadata": {},
3061
+ "source": [
3062
+ "### Ordner komprimieren\n",
3063
+ "Dieser Code komprimiert den Ordner `/content/buergergeld_forum`."
3064
  ]
3065
  },
3066
  {
 
3104
  "\n",
3105
  "# compress_directory(directory_to_compress, output_zip_filename)"
3106
  ]
3107
+ },
3108
+ {
3109
+ "cell_type": "markdown",
3110
+ "metadata": {},
3111
+ "source": [
3112
+ "## Fazit\n",
3113
+ "\n",
3114
+ "In diesem Notebook haben wir die grundlegenden Techniken des Web Scraping anhand des Bürgergeld Forums erlernt und angewendet. Die wichtigsten gelernten Inhalte umfassen:\n",
3115
+ "\n",
3116
+ "1. **HTML-Seiten herunterladen**:\n",
3117
+ " - Wir haben gelernt, wie man HTML-Seiten eines Forums herunterlädt und in einem Ordner speichert.\n",
3118
+ "\n",
3119
+ "2. **Daten extrahieren**:\n",
3120
+ " - Wir haben die Texte der relevanten HTML-Elemente extrahiert und in einem Pandas DataFrame gespeichert.\n",
3121
+ "\n",
3122
+ "3. **Daten bereinigen und verarbeiten**:\n",
3123
+ " - Wir haben die extrahierten Daten bereinigt und in verschiedene Spalten aufgeteilt, um sie besser analysieren zu können.\n",
3124
+ "\n",
3125
+ "4. **Daten analysieren**:\n",
3126
+ " - Wir haben verschiedene Analysetechniken angewendet, darunter das Erstellen von Wordclouds und Lineplots, um die Daten zu visualisieren und zu interpretieren.\n",
3127
+ "\n",
3128
+ "5. **Daten speichern und komprimieren**:\n",
3129
+ " - Wir haben gelernt, wie man die verarbeiteten Daten speichert und den Ordner mit den HTML-Dateien komprimiert.\n",
3130
+ "\n",
3131
+ "Diese Schritte haben uns gezeigt, wie man Web Scraping effektiv einsetzen kann, um wertvolle Informationen aus Online-Foren zu extrahieren und zu analysieren."
3132
+ ]
3133
  }
3134
  ],
3135
  "metadata": {
src/04_use_case/jobs/Jobboerse_API.ipynb CHANGED
@@ -7,13 +7,31 @@
7
  "---\n",
8
  "title: \"Jobangebote über die Jobbörse API abrufen\"\n",
9
  "description: \"Ein Tool zur Suche und Analyse von Jobangeboten über die Jobbörse API, einschließlich der Verarbeitung und Visualisierung der Daten.\"\n",
10
- "author: \"Benjamin\"\n",
11
- "date: \"2024-12-16\"\n",
12
- "date-modified: \"2024-12-16\"\n",
13
  "image: _f6a36d83-c0f2-4029-a621-0ccfc358b18a.jpeg\n",
14
  "---"
15
  ]
16
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  {
18
  "cell_type": "code",
19
  "execution_count": 2,
@@ -58,6 +76,14 @@
58
  "print(response.status_code)"
59
  ]
60
  },
 
 
 
 
 
 
 
 
61
  {
62
  "cell_type": "code",
63
  "execution_count": 3,
@@ -84,6 +110,14 @@
84
  " print(data.keys())"
85
  ]
86
  },
 
 
 
 
 
 
 
 
87
  {
88
  "cell_type": "code",
89
  "execution_count": 4,
@@ -95,6 +129,14 @@
95
  "stellenangebote = data[\"stellenangebote\"]"
96
  ]
97
  },
 
 
 
 
 
 
 
 
98
  {
99
  "cell_type": "code",
100
  "execution_count": 5,
@@ -671,6 +713,14 @@
671
  "df"
672
  ]
673
  },
 
 
 
 
 
 
 
 
674
  {
675
  "cell_type": "code",
676
  "execution_count": 6,
@@ -796,6 +846,14 @@
796
  "beruf_counts\n"
797
  ]
798
  },
 
 
 
 
 
 
 
 
799
  {
800
  "cell_type": "code",
801
  "execution_count": 7,
@@ -917,6 +975,14 @@
917
  "arbeitgeber_counts"
918
  ]
919
  },
 
 
 
 
 
 
 
 
920
  {
921
  "cell_type": "code",
922
  "execution_count": 8,
@@ -968,6 +1034,14 @@
968
  "plt.show()"
969
  ]
970
  },
 
 
 
 
 
 
 
 
971
  {
972
  "cell_type": "code",
973
  "execution_count": 9,
@@ -1104,6 +1178,14 @@
1104
  "df['postleitzahl']"
1105
  ]
1106
  },
 
 
 
 
 
 
 
 
1107
  {
1108
  "cell_type": "code",
1109
  "execution_count": 10,
@@ -1227,6 +1309,14 @@
1227
  "postleitzahl_counts"
1228
  ]
1229
  },
 
 
 
 
 
 
 
 
1230
  {
1231
  "cell_type": "code",
1232
  "execution_count": 11,
@@ -1265,6 +1355,14 @@
1265
  " print(f\"Failed to download GeoJSON data. Status code: {response.status_code}\")"
1266
  ]
1267
  },
 
 
 
 
 
 
 
 
1268
  {
1269
  "cell_type": "code",
1270
  "execution_count": 24,
@@ -1314,6 +1412,14 @@
1314
  "plt.show()"
1315
  ]
1316
  },
 
 
 
 
 
 
 
 
1317
  {
1318
  "cell_type": "code",
1319
  "execution_count": 29,
@@ -1334,6 +1440,14 @@
1334
  "filtered_gdf = gdf[gdf['plz_code'].isin(df['postleitzahl'])]"
1335
  ]
1336
  },
 
 
 
 
 
 
 
 
1337
  {
1338
  "cell_type": "code",
1339
  "execution_count": 36,
@@ -4498,6 +4612,32 @@
4498
  "# Display the map\n",
4499
  "m"
4500
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4501
  }
4502
  ],
4503
  "metadata": {
 
7
  "---\n",
8
  "title: \"Jobangebote über die Jobbörse API abrufen\"\n",
9
  "description: \"Ein Tool zur Suche und Analyse von Jobangeboten über die Jobbörse API, einschließlich der Verarbeitung und Visualisierung der Daten.\"\n",
 
 
 
10
  "image: _f6a36d83-c0f2-4029-a621-0ccfc358b18a.jpeg\n",
11
  "---"
12
  ]
13
  },
14
+ {
15
+ "cell_type": "markdown",
16
+ "metadata": {},
17
+ "source": [
18
+ "## Lernziele\n",
19
+ "\n",
20
+ "**Nutzung der Jobbörse API**\n",
21
+ "\n",
22
+ "* Abrufen von Jobangeboten über die Jobbörse API.\n",
23
+ "* Verarbeitung und Analyse der abgerufenen Daten mit Pandas.\n",
24
+ "* Visualisierung der Daten und Erstellung von * Häufigkeitsverteilungen."
25
+ ]
26
+ },
27
+ {
28
+ "cell_type": "markdown",
29
+ "metadata": {},
30
+ "source": [
31
+ "## API-Anfrage senden\n",
32
+ "Dieser Code sendet eine Anfrage an die Jobbörse API, um Jobangebote für Erzieher in Berlin abzurufen.\n"
33
+ ]
34
+ },
35
  {
36
  "cell_type": "code",
37
  "execution_count": 2,
 
76
  "print(response.status_code)"
77
  ]
78
  },
79
+ {
80
+ "cell_type": "markdown",
81
+ "metadata": {},
82
+ "source": [
83
+ "## API-Antwort analysieren\n",
84
+ "Dieser Code analysiert die API-Antwort und gibt die Schlüssel der JSON-Daten aus.\n"
85
+ ]
86
+ },
87
  {
88
  "cell_type": "code",
89
  "execution_count": 3,
 
110
  " print(data.keys())"
111
  ]
112
  },
113
+ {
114
+ "cell_type": "markdown",
115
+ "metadata": {},
116
+ "source": [
117
+ "## Stellenangebote extrahieren\n",
118
+ "Dieser Code extrahiert die Stellenangebote aus den JSON-Daten.\n"
119
+ ]
120
+ },
121
  {
122
  "cell_type": "code",
123
  "execution_count": 4,
 
129
  "stellenangebote = data[\"stellenangebote\"]"
130
  ]
131
  },
132
+ {
133
+ "cell_type": "markdown",
134
+ "metadata": {},
135
+ "source": [
136
+ "## Stellenangebote als DataFrame darstellen\n",
137
+ "Dieser Code stellt die Stellenangebote als Pandas DataFrame dar.\n"
138
+ ]
139
+ },
140
  {
141
  "cell_type": "code",
142
  "execution_count": 5,
 
713
  "df"
714
  ]
715
  },
716
+ {
717
+ "cell_type": "markdown",
718
+ "metadata": {},
719
+ "source": [
720
+ "## Häufigkeitsverteilung der Berufe\n",
721
+ "Dieser Code berechnet die Häufigkeitsverteilung der Berufe und stellt sie dar.\n"
722
+ ]
723
+ },
724
  {
725
  "cell_type": "code",
726
  "execution_count": 6,
 
846
  "beruf_counts\n"
847
  ]
848
  },
849
+ {
850
+ "cell_type": "markdown",
851
+ "metadata": {},
852
+ "source": [
853
+ "## Häufigkeitsverteilung der Arbeitgeber\n",
854
+ "Dieser Code berechnet die Häufigkeitsverteilung der Arbeitgeber und stellt sie dar.\n"
855
+ ]
856
+ },
857
  {
858
  "cell_type": "code",
859
  "execution_count": 7,
 
975
  "arbeitgeber_counts"
976
  ]
977
  },
978
+ {
979
+ "cell_type": "markdown",
980
+ "metadata": {},
981
+ "source": [
982
+ "## Differenz zwischen Termindaten berechnen und visualisieren\n",
983
+ "Dieser Code berechnet die Differenz zwischen den Termindaten der Spalten `eintrittsdatum` und `aktuelleVeroeffentlichungsdatum` und visualisiert die Differenz als Histogramm.\n"
984
+ ]
985
+ },
986
  {
987
  "cell_type": "code",
988
  "execution_count": 8,
 
1034
  "plt.show()"
1035
  ]
1036
  },
1037
+ {
1038
+ "cell_type": "markdown",
1039
+ "metadata": {},
1040
+ "source": [
1041
+ "## Postleitzahl extrahieren\n",
1042
+ "Dieser Code extrahiert die Postleitzahl aus der Spalte `arbeitsort`.\n"
1043
+ ]
1044
+ },
1045
  {
1046
  "cell_type": "code",
1047
  "execution_count": 9,
 
1178
  "df['postleitzahl']"
1179
  ]
1180
  },
1181
+ {
1182
+ "cell_type": "markdown",
1183
+ "metadata": {},
1184
+ "source": [
1185
+ "## Häufigkeitsverteilung der Postleitzahlen\n",
1186
+ "Dieser Code erstellt die Häufigkeitsverteilung der Postleitzahlen.\n"
1187
+ ]
1188
+ },
1189
  {
1190
  "cell_type": "code",
1191
  "execution_count": 10,
 
1309
  "postleitzahl_counts"
1310
  ]
1311
  },
1312
+ {
1313
+ "cell_type": "markdown",
1314
+ "metadata": {},
1315
+ "source": [
1316
+ "## GeoJSON-Datei herunterladen\n",
1317
+ "Dieser Code lädt die GeoJSON-Datei für die deutschen Postleitzahlen herunter.\n"
1318
+ ]
1319
+ },
1320
  {
1321
  "cell_type": "code",
1322
  "execution_count": 11,
 
1355
  " print(f\"Failed to download GeoJSON data. Status code: {response.status_code}\")"
1356
  ]
1357
  },
1358
+ {
1359
+ "cell_type": "markdown",
1360
+ "metadata": {},
1361
+ "source": [
1362
+ "## GeoJSON-Daten visualisieren\n",
1363
+ "Dieser Code öffnet die heruntergeladene GeoJSON-Datei und zeigt sie als Grafik mit Matplotlib.\n"
1364
+ ]
1365
+ },
1366
  {
1367
  "cell_type": "code",
1368
  "execution_count": 24,
 
1412
  "plt.show()"
1413
  ]
1414
  },
1415
+ {
1416
+ "cell_type": "markdown",
1417
+ "metadata": {},
1418
+ "source": [
1419
+ "## Postleitzahlen filtern\n",
1420
+ "Dieser Code wählt alle Zeilen aus der GeoJSON-Datei aus, die auch in `df.postleitzahl` enthalten sind.\n"
1421
+ ]
1422
+ },
1423
  {
1424
  "cell_type": "code",
1425
  "execution_count": 29,
 
1440
  "filtered_gdf = gdf[gdf['plz_code'].isin(df['postleitzahl'])]"
1441
  ]
1442
  },
1443
+ {
1444
+ "cell_type": "markdown",
1445
+ "metadata": {},
1446
+ "source": [
1447
+ "## Interaktive Deutschlandkarte erstellen\n",
1448
+ "Dieser Code stellt die Geometrie in `filtered_gdf` auf einer interaktiven Deutschlandkarte dar und markiert die Postleitzahlgebiete anhand ihrer Value Counts auf einer Farbskala."
1449
+ ]
1450
+ },
1451
  {
1452
  "cell_type": "code",
1453
  "execution_count": 36,
 
4612
  "# Display the map\n",
4613
  "m"
4614
  ]
4615
+ },
4616
+ {
4617
+ "cell_type": "markdown",
4618
+ "metadata": {},
4619
+ "source": [
4620
+ "## Fazit\n",
4621
+ "\n",
4622
+ "In diesem Notebook haben wir die grundlegenden Techniken zur Nutzung der Jobbörse API erlernt und angewendet. Die wichtigsten gelernten Inhalte umfassen:\n",
4623
+ "\n",
4624
+ "1. **API-Anfrage senden**:\n",
4625
+ " - Wir haben gelernt, wie man eine Anfrage an die Jobbörse API sendet, um spezifische Jobangebote abzurufen.\n",
4626
+ "\n",
4627
+ "2. **API-Antwort analysieren**:\n",
4628
+ " - Wir haben die Struktur der API-Antwort analysiert und die relevanten Daten extrahiert.\n",
4629
+ "\n",
4630
+ "3. **Datenverarbeitung und -visualisierung**:\n",
4631
+ " - Wir haben die extrahierten Jobangebote in einem Pandas DataFrame dargestellt und verschiedene Analysen durchgeführt, wie die Häufigkeitsverteilung der Berufe und Arbeitgeber.\n",
4632
+ "\n",
4633
+ "4. **Geodaten verarbeiten**:\n",
4634
+ " - Wir haben Postleitzahlen aus den Jobangeboten extrahiert und die Häufigkeitsverteilung der Postleitzahlen berechnet.\n",
4635
+ "\n",
4636
+ "5. **Interaktive Karten erstellen**:\n",
4637
+ " - Wir haben gelernt, wie man GeoJSON-Daten herunterlädt und visualisiert, sowie interaktive Karten erstellt, um die geografische Verteilung der Jobangebote darzustellen.\n",
4638
+ "\n",
4639
+ "Diese Schritte haben uns gezeigt, wie man die Jobbörse API effektiv nutzen kann, um wertvolle Informationen über Jobangebote zu extrahieren, zu analysieren und zu visualisieren."
4640
+ ]
4641
  }
4642
  ],
4643
  "metadata": {
src/04_use_case/laws/Gesetze_im_Internet_Aktualitätendienst.ipynb CHANGED
@@ -7,13 +7,31 @@
7
  "---\n",
8
  "title: \"RSS-Feed-Analyse: Gesetze im Internet Aktualitätendienst\"\n",
9
  "description: \"Ein Tool zur Extraktion und Analyse von RSS-Feeds des Aktualitätendienstes für Gesetze im Internet, einschließlich der Verarbeitung und Visualisierung der Daten.\"\n",
10
- "author: \"Benjamin\"\n",
11
- "date: \"2024-12-16\"\n",
12
- "date-modified: \"2024-12-16\"\n",
13
  "image: _d38cd4e9-1da8-4d7e-9bae-f01370cd2049.jpeg\n",
14
  "---"
15
  ]
16
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  {
18
  "cell_type": "code",
19
  "execution_count": 36,
@@ -40,6 +58,14 @@
40
  "# !pip install feedparser\n"
41
  ]
42
  },
 
 
 
 
 
 
 
 
43
  {
44
  "cell_type": "code",
45
  "execution_count": 37,
@@ -56,6 +82,14 @@
56
  "feed = feedparser.parse(feed_url)"
57
  ]
58
  },
 
 
 
 
 
 
 
 
59
  {
60
  "cell_type": "code",
61
  "execution_count": 38,
@@ -72,6 +106,14 @@
72
  "df = pd.DataFrame(feed.entries)"
73
  ]
74
  },
 
 
 
 
 
 
 
 
75
  {
76
  "cell_type": "code",
77
  "execution_count": 39,
@@ -233,6 +275,14 @@
233
  "df.iloc[0]\n"
234
  ]
235
  },
 
 
 
 
 
 
 
 
236
  {
237
  "cell_type": "code",
238
  "execution_count": 40,
@@ -261,6 +311,14 @@
261
  "df.shape"
262
  ]
263
  },
 
 
 
 
 
 
 
 
264
  {
265
  "cell_type": "code",
266
  "execution_count": 41,
@@ -462,6 +520,14 @@
462
  "df['meta_initiant'].value_counts()"
463
  ]
464
  },
 
 
 
 
 
 
 
 
465
  {
466
  "cell_type": "code",
467
  "execution_count": 42,
@@ -505,6 +571,14 @@
505
  "plt.show()"
506
  ]
507
  },
 
 
 
 
 
 
 
 
508
  {
509
  "cell_type": "code",
510
  "execution_count": 43,
@@ -549,6 +623,14 @@
549
  " print(\"Error: 'meta_typ' column not found in the DataFrame.\")"
550
  ]
551
  },
 
 
 
 
 
 
 
 
552
  {
553
  "cell_type": "code",
554
  "execution_count": 49,
@@ -599,6 +681,14 @@
599
  " print(title) # Added indentation and print statement to display each title on a new line"
600
  ]
601
  },
 
 
 
 
 
 
 
 
602
  {
603
  "cell_type": "code",
604
  "execution_count": 51,
@@ -642,6 +732,32 @@
642
  "for title in filtered_df['title']:\n",
643
  " print(title)"
644
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
645
  }
646
  ],
647
  "metadata": {
 
7
  "---\n",
8
  "title: \"RSS-Feed-Analyse: Gesetze im Internet Aktualitätendienst\"\n",
9
  "description: \"Ein Tool zur Extraktion und Analyse von RSS-Feeds des Aktualitätendienstes für Gesetze im Internet, einschließlich der Verarbeitung und Visualisierung der Daten.\"\n",
 
 
 
10
  "image: _d38cd4e9-1da8-4d7e-9bae-f01370cd2049.jpeg\n",
11
  "---"
12
  ]
13
  },
14
+ {
15
+ "cell_type": "markdown",
16
+ "metadata": {},
17
+ "source": [
18
+ "## Lernziele\n",
19
+ "\n",
20
+ "**RSS-Feed-Analyse**\n",
21
+ "\n",
22
+ "* Abrufen und Parsen von RSS-Feeds mit feedparser.\n",
23
+ "* Umwandlung der Feed-Daten in ein Pandas DataFrame.\n",
24
+ "* Analyse und Visualisierung der Feed-Daten."
25
+ ]
26
+ },
27
+ {
28
+ "cell_type": "markdown",
29
+ "metadata": {},
30
+ "source": [
31
+ "## Bibliothek installieren\n",
32
+ "Dieser Code installiert die Bibliothek `feedparser`, die für das Parsen von RSS-Feeds verwendet wird.\n"
33
+ ]
34
+ },
35
  {
36
  "cell_type": "code",
37
  "execution_count": 36,
 
58
  "# !pip install feedparser\n"
59
  ]
60
  },
61
+ {
62
+ "cell_type": "markdown",
63
+ "metadata": {},
64
+ "source": [
65
+ "## RSS-Feed lesen\n",
66
+ "Dieser Code liest den RSS-Feed von der angegebenen URL mit `feedparser` und speichert ihn in einer Variablen.\n"
67
+ ]
68
+ },
69
  {
70
  "cell_type": "code",
71
  "execution_count": 37,
 
82
  "feed = feedparser.parse(feed_url)"
83
  ]
84
  },
85
+ {
86
+ "cell_type": "markdown",
87
+ "metadata": {},
88
+ "source": [
89
+ "## Feed in DataFrame umwandeln\n",
90
+ "Dieser Code wandelt die Feed-Daten in ein Pandas DataFrame um, um sie einfacher analysieren zu können.\n"
91
+ ]
92
+ },
93
  {
94
  "cell_type": "code",
95
  "execution_count": 38,
 
106
  "df = pd.DataFrame(feed.entries)"
107
  ]
108
  },
109
+ {
110
+ "cell_type": "markdown",
111
+ "metadata": {},
112
+ "source": [
113
+ "## Ersten Eintrag darstellen\n",
114
+ "Dieser Code stellt den ersten Eintrag des DataFrames dar, um einen Überblick über die Struktur der Daten zu erhalten.\n"
115
+ ]
116
+ },
117
  {
118
  "cell_type": "code",
119
  "execution_count": 39,
 
275
  "df.iloc[0]\n"
276
  ]
277
  },
278
+ {
279
+ "cell_type": "markdown",
280
+ "metadata": {},
281
+ "source": [
282
+ "## Größe des DataFrames anzeigen\n",
283
+ "Dieser Code zeigt die Größe des DataFrames an, um die Anzahl der Einträge und Spalten zu ermitteln.\n"
284
+ ]
285
+ },
286
  {
287
  "cell_type": "code",
288
  "execution_count": 40,
 
311
  "df.shape"
312
  ]
313
  },
314
+ {
315
+ "cell_type": "markdown",
316
+ "metadata": {},
317
+ "source": [
318
+ "## Häufigkeitsverteilung der Spalte 'meta_initiant'\n",
319
+ "Dieser Code stellt die Häufigkeitsverteilung der Spalte `meta_initiant` dar, um die Verteilung der Initiatoren zu analysieren.\n"
320
+ ]
321
+ },
322
  {
323
  "cell_type": "code",
324
  "execution_count": 41,
 
520
  "df['meta_initiant'].value_counts()"
521
  ]
522
  },
523
+ {
524
+ "cell_type": "markdown",
525
+ "metadata": {},
526
+ "source": [
527
+ "## Visualisierung der Spalte 'published'\n",
528
+ "Dieser Code visualisiert die Verteilung der Veröffentlichungsdaten in der Spalte `published` als Histogramm.\n"
529
+ ]
530
+ },
531
  {
532
  "cell_type": "code",
533
  "execution_count": 42,
 
571
  "plt.show()"
572
  ]
573
  },
574
+ {
575
+ "cell_type": "markdown",
576
+ "metadata": {},
577
+ "source": [
578
+ "## Kreisdiagramm der Spalte 'meta_typ'\n",
579
+ "Dieser Code stellt die Verteilung der verschiedenen Typen in der Spalte `meta_typ` als Kreisdiagramm dar.\n"
580
+ ]
581
+ },
582
  {
583
  "cell_type": "code",
584
  "execution_count": 43,
 
623
  " print(\"Error: 'meta_typ' column not found in the DataFrame.\")"
624
  ]
625
  },
626
+ {
627
+ "cell_type": "markdown",
628
+ "metadata": {},
629
+ "source": [
630
+ "## Titel der Einträge für 'Bundesministerium für Arbeit und Soziales'\n",
631
+ "Dieser Code filtert die Einträge im DataFrame für den Initiator `Bundesministerium für Arbeit und Soziales` und gibt die Titel der Einträge aus.\n"
632
+ ]
633
+ },
634
  {
635
  "cell_type": "code",
636
  "execution_count": 49,
 
681
  " print(title) # Added indentation and print statement to display each title on a new line"
682
  ]
683
  },
684
+ {
685
+ "cell_type": "markdown",
686
+ "metadata": {},
687
+ "source": [
688
+ "## Titel der Einträge für 'Bundesministerium für Gesundheit'\n",
689
+ "Dieser Code filtert die Einträge im DataFrame für den Initiator `Bundesministerium für Gesundheit` und gibt die Titel der Einträge aus.\n"
690
+ ]
691
+ },
692
  {
693
  "cell_type": "code",
694
  "execution_count": 51,
 
732
  "for title in filtered_df['title']:\n",
733
  " print(title)"
734
  ]
735
+ },
736
+ {
737
+ "cell_type": "markdown",
738
+ "metadata": {},
739
+ "source": [
740
+ "## Fazit\n",
741
+ "\n",
742
+ "In diesem Notebook haben wir die grundlegenden Techniken zur Analyse von RSS-Feeds anhand des Aktualitätendienstes für Gesetze im Internet erlernt und angewendet. Die wichtigsten gelernten Inhalte umfassen:\n",
743
+ "\n",
744
+ "1. **Bibliothek installieren**:\n",
745
+ " - Wir haben gelernt, wie man die Bibliothek `feedparser` installiert, um RSS-Feeds zu parsen.\n",
746
+ "\n",
747
+ "2. **RSS-Feed lesen**:\n",
748
+ " - Wir haben den RSS-Feed von einer URL gelesen und die Daten in einer Variablen gespeichert.\n",
749
+ "\n",
750
+ "3. **Feed in DataFrame umwandeln**:\n",
751
+ " - Wir haben die Feed-Daten in ein Pandas DataFrame umgewandelt, um sie einfacher analysieren zu können.\n",
752
+ "\n",
753
+ "4. **Daten analysieren und visualisieren**:\n",
754
+ " - Wir haben verschiedene Analysetechniken angewendet, darunter das Darstellen des ersten Eintrags, das Anzeigen der Größe des DataFrames, die Häufigkeitsverteilung der Spalte `meta_initiant`, die Visualisierung der Veröffentlichungsdaten und die Darstellung der Verteilung der Typen als Kreisdiagramm.\n",
755
+ "\n",
756
+ "5. **Daten filtern und ausgeben**:\n",
757
+ " - Wir haben die Einträge im DataFrame für bestimmte Initiatoren gefiltert und die Titel der Einträge ausgegeben.\n",
758
+ "\n",
759
+ "Diese Schritte haben uns gezeigt, wie man RSS-Feeds effektiv analysieren und visualisieren kann, um wertvolle Informationen zu extrahieren."
760
+ ]
761
  }
762
  ],
763
  "metadata": {
src/_quarto.yml CHANGED
@@ -47,19 +47,16 @@ website:
47
  - href: basics.qmd
48
  section: "No Code Übersicht"
49
  contents:
50
- - section: "PDF"
51
  href: 02_basics/pdf.qmd
52
  contents:
53
  - href: 02_basics/pdf/pdf-link-extractor.qmd
54
- text: "PDF Link Extractor"
55
  - href: 02_basics/pdf/pdf-grouping.qmd
56
- text: "PDF Grouping"
57
- - section: "App Marketplace"
58
- href: 02_basics/app_market.qmd
59
- contents:
60
- - href: 02_basics/app_market/google-play-search.qmd
61
- text: "Google Play Search"
62
- - section: "Webspider"
63
  href: 02_basics/webspider.qmd
64
  contents:
65
  - href: 02_basics/webspider/website-url-extractor.qmd
@@ -75,35 +72,31 @@ website:
75
  href: 03_low_code/catalogue.qmd
76
  contents:
77
  - href: 03_low_code/catalogue/bookstoscrape.qmd
78
- text: "Bücherliste scrapen"
79
  - href: 03_low_code/catalogue/quotes_scraper.ipynb
80
- text: "Zitate scrapen"
81
  - href: 03_low_code/app_market_scraping/app_market_scraping.qmd
82
- text: "App Markt analysieren"
83
  - section: "Video Transkripte"
84
  href: 03_low_code/video_transcripts.qmd
85
  contents:
86
  - href: 03_low_code/video_transcripts/social-media.qmd
87
- text: "Hinweise Scraping Social Media"
88
  - href: 03_low_code/video_transcripts/get_videos_for_youtube_channels.ipynb
89
- text: "YouTube Channel Videos"
90
  - href: 03_low_code/video_transcripts/youtube-transcript-extraction.ipynb
91
- text: "YouTube Video Transcripts"
92
  - title: "Use-Case"
93
  contents:
94
  - section: "Anwendungsfall Übersicht"
95
  href: use_case.qmd
96
  contents:
97
  - href: 04_use_case/laws/Gesetze_im_Internet_Aktualitätendienst.ipynb
98
- text: "Aktualitätendienst Gesetze"
99
  - href: 04_use_case/jobs/Jobboerse_API.ipynb
100
- text: "Jobbörse"
101
  - href: 04_use_case/forum/buergergeld_forum.ipynb
102
- text: "Buergergeld Forum"
103
- - title: "Blog"
104
- contents:
105
- - href: blog.qmd
106
- text: "Blog"
107
 
108
  format:
109
  html:
 
47
  - href: basics.qmd
48
  section: "No Code Übersicht"
49
  contents:
50
+ - section: "PDF📝"
51
  href: 02_basics/pdf.qmd
52
  contents:
53
  - href: 02_basics/pdf/pdf-link-extractor.qmd
54
+ text: "PDF Sammler🔍"
55
  - href: 02_basics/pdf/pdf-grouping.qmd
56
+ text: "PDFs gruppieren🗂️"
57
+ - href: 02_basics/app_market/google-play-search.qmd
58
+ text: "Google Play Search🛒"
59
+ - section: "Webspider🕸️"
 
 
 
60
  href: 02_basics/webspider.qmd
61
  contents:
62
  - href: 02_basics/webspider/website-url-extractor.qmd
 
72
  href: 03_low_code/catalogue.qmd
73
  contents:
74
  - href: 03_low_code/catalogue/bookstoscrape.qmd
75
+ text: "Bücherliste scrapen📚"
76
  - href: 03_low_code/catalogue/quotes_scraper.ipynb
77
+ text: "Zitate scrapen💬"
78
  - href: 03_low_code/app_market_scraping/app_market_scraping.qmd
79
+ text: "App Markt analysieren📱"
80
  - section: "Video Transkripte"
81
  href: 03_low_code/video_transcripts.qmd
82
  contents:
83
  - href: 03_low_code/video_transcripts/social-media.qmd
84
+ text: "Hinweise Scraping Social Media⚠️"
85
  - href: 03_low_code/video_transcripts/get_videos_for_youtube_channels.ipynb
86
+ text: "YouTube Channel Videos🎥"
87
  - href: 03_low_code/video_transcripts/youtube-transcript-extraction.ipynb
88
+ text: "YouTube Video Transcripts📝"
89
  - title: "Use-Case"
90
  contents:
91
  - section: "Anwendungsfall Übersicht"
92
  href: use_case.qmd
93
  contents:
94
  - href: 04_use_case/laws/Gesetze_im_Internet_Aktualitätendienst.ipynb
95
+ text: "Aktualitätendienst Gesetze📜"
96
  - href: 04_use_case/jobs/Jobboerse_API.ipynb
97
+ text: "Jobbörse💼"
98
  - href: 04_use_case/forum/buergergeld_forum.ipynb
99
+ text: "Buergergeld Forum💬"
 
 
 
 
100
 
101
  format:
102
  html:
src/basics.qmd CHANGED
@@ -1,17 +1,32 @@
1
  ---
2
  listing:
3
  - id: no_code
4
- contents: ["/02_basics/webspider.qmd","/02_basics/pdf.qmd","/02_basics/app_market.qmd"]
5
  type: grid
6
  ---
7
 
8
- ## Lernziele
9
 
10
- **Verwendung von No-Code-Tools für Webscraping**:
11
-
12
- * Einsatz von Tools wie dem Webseiten-URL-Extraktor zur automatischen Extraktion von Links zur Veranschaulichung des Webscraping Prozesses. Verwendung einer einfachen Webspider.
13
- * Anwendung von PDF-Link-Extractor-Tools zur systematischen Sammlung von PDFs und Nutzung der PDF-Keyword-Grouping-App zur thematischen Gruppierung.
14
- * Identifizierung und Auswertung von Apps eines individuellen Themenbereich (bspw. zivilgesellschaftlich oder Gesundheit).
15
 
16
  ::: {#no_code}
17
  :::
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
  listing:
3
  - id: no_code
4
+ contents: ["/02_basics/webspider.qmd","/02_basics/pdf.qmd","/02_basics/app_market"]
5
  type: grid
6
  ---
7
 
8
+ "No Code" ermöglicht es auch Nicht-Programmierern, komplexe Aufgaben wie Webscraping durchzuführen, ohne tiefgehende Kenntnisse in Programmiersprachen zu haben. No-Code-Tools sind besonders nützlich für schnelle Prototypenerstellung, Automatisierung von Arbeitsabläufen und die Lösung spezifischer Probleme, ohne dass umfangreiche Entwicklungsressourcen benötigt werden.
9
 
10
+ ## Tutorials
 
 
 
 
11
 
12
  ::: {#no_code}
13
  :::
14
+
15
+ ## No-Code Scraping
16
+
17
+ ### ParseHub
18
+
19
+ [ParseHub](https://www.parsehub.com/) ist ein No-Code-Webscraping-Tool, das es Benutzern ermöglicht, Daten von Webseiten zu extrahieren, ohne eine einzige Zeile Code schreiben zu müssen.
20
+
21
+ - **Visuelle Auswahl**: Klicken Sie auf Elemente auf der Webseite, um sie für das Scraping auszuwählen.
22
+ - **Automatisierung**: Planen Sie Scraping-Aufgaben, um Daten regelmäßig zu extrahieren.
23
+ - **Datenexport**: Exportieren Sie die gesammelten Daten in verschiedenen Formaten wie CSV, Excel und JSON.
24
+
25
+ ### Octoparse
26
+
27
+ [Octoparse](https://www.octoparse.com/) bietet eine intuitive Drag-and-Drop-Oberfläche, mit der Benutzer Scraping-Workflows erstellen können, ohne eine einzige Zeile Code schreiben zu müssen.
28
+
29
+ - **Drag-and-Drop-Interface**: Erstellen Sie Scraping-Workflows durch einfaches Ziehen und Ablegen von Elementen.
30
+ - **Cloud-basierte Ausführung**: Führen Sie Scraping-Aufgaben in der Cloud aus, um die Leistung zu maximieren und lokale Ressourcen zu schonen.
31
+ - **Datenexport**: Exportieren Sie die gesammelten Daten in verschiedenen Formaten wie CSV, Excel und JSON.
32
+ - **API-Integration**: Integrieren Sie die gesammelten Daten direkt in Ihre Anwendungen über APIs.
src/low_code.qmd CHANGED
@@ -1,14 +1,9 @@
1
  ---
2
  listing:
3
  - id: low_code
4
- contents: ["03_low_code/catalogue.qmd","03_low_code/app_market_scraping.qmd","03_low_code/video_transcripts.qmd"]
5
  type: grid
6
  ---
7
 
8
- ## Lernziele
9
-
10
- **Extraktion von Buchdaten von der Website "Books to Scrape" mit Python und BeautifulSoup**: Praktische Übung im Web-Scraping, um das gezielte extrahieren aus Datenstrukturen zu verstehen.
11
-
12
- **Scraping von App-Marktdaten**: Erstellen einer Übersicht über den App-Marktplatz, um Apps zu identifizieren, die für die Arbeit von Non-Profit-Organisationen und zivilgesellschaftlichen Akteuren nützlich sein können.
13
-
14
- **Extraktion von YouTube-Transkripten und deren Speicherung als PDF-Dateien**: Lernen, wie man Transkripte von Bildungs- und Informationsvideos extrahiert, um diese Inhalte leichter zugänglich und weiterverwendbar für Bildungsarbeit, Advocacy und Sensibilisierungsmaßnahmen zu machen.
 
1
  ---
2
  listing:
3
  - id: low_code
4
+ contents: ["03_low_code/catalogue.qmd","03_low_code/app_market_scraping/app_market_scraping.qmd","03_low_code/video_transcripts.qmd"]
5
  type: grid
6
  ---
7
 
8
+ ::: {low_code}
9
+ :::
 
 
 
 
 
src/use_case.qmd CHANGED
@@ -5,25 +5,5 @@ listing:
5
  type: grid
6
  ---
7
 
8
- ## Lernziele
9
-
10
- **Web Scraping von Foren**
11
-
12
- * Herunterladen und Speichern von HTML-Seiten eines Forums.
13
- * Extraktion und Analyse von Forenbeiträgen und Metadaten.
14
- * Verarbeitung und Bereinigung der extrahierten Daten mit Pandas.
15
-
16
- **Nutzung der Jobbörse API**
17
-
18
- * Abrufen von Jobangeboten über die Jobbörse API.
19
- * Verarbeitung und Analyse der abgerufenen Daten mit Pandas.
20
- * Visualisierung der Daten und Erstellung von * Häufigkeitsverteilungen.
21
-
22
- **RSS-Feed-Analyse**
23
-
24
- * Abrufen und Parsen von RSS-Feeds mit feedparser.
25
- * Umwandlung der Feed-Daten in ein Pandas DataFrame.
26
- * Analyse und Visualisierung der Feed-Daten.
27
-
28
  ::: {#use_case}
29
  :::
 
5
  type: grid
6
  ---
7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  ::: {#use_case}
9
  :::