add topbar, add agenda+lessons, add no-code
Browse files- src/_quarto.yml +68 -23
- src/agenda.qmd +22 -0
- src/colab-github.qmd +55 -0
- src/colab.qmd +93 -0
- src/google-konto.qmd +67 -0
- src/google-play-search.qmd +25 -0
- src/huggingface.qmd +40 -0
- src/notebooks/Gesetze_im_Internet_Aktualitätendienst.ipynb +0 -0
- src/notebooks/Jobboerse_API.ipynb +0 -0
- src/notebooks/buergergeld_forum.ipynb +0 -0
- src/notebooks/get_videos_for_youtube_channels.ipynb +0 -0
- src/notebooks/youtube-transcript-extraction.ipynb +1 -0
- src/pdf-grouping.qmd +21 -0
- src/pdf-link-extractor.qmd +23 -0
- src/social-media.qmd +121 -0
- src/tools.qmd +13 -0
- src/website-url-extractor.qmd +20 -0
- src/webspider.qmd +32 -0
src/_quarto.yml
CHANGED
@@ -1,32 +1,77 @@
|
|
1 |
project:
|
2 |
type: website
|
3 |
website:
|
4 |
-
title: "CDL Webscraping Workshop 2025"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
sidebar:
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
contents:
|
12 |
-
- href:
|
13 |
-
text: "
|
14 |
-
- href:
|
15 |
-
text: "
|
16 |
-
- section: "
|
17 |
contents:
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
|
|
|
|
30 |
|
31 |
format:
|
32 |
html:
|
|
|
1 |
project:
|
2 |
type: website
|
3 |
website:
|
4 |
+
title: "🧭 CDL Webscraping Workshop 2025"
|
5 |
+
navbar:
|
6 |
+
left:
|
7 |
+
- href: agenda.qmd
|
8 |
+
text: "Agenda"
|
9 |
+
- href: index.qmd
|
10 |
+
text: "1️⃣ Start"
|
11 |
+
- href: tools.qmd
|
12 |
+
text: "2️⃣ No-Code"
|
13 |
+
- href: notebooks/bookstoscrape.qmd
|
14 |
+
text: "3️⃣ Low-Code"
|
15 |
+
- href: notebooks/Gesetze_im_Internet_Aktualitätendienst.ipynb
|
16 |
+
text: "4️⃣ Use-Case"
|
17 |
+
tools:
|
18 |
+
- icon: chat-dots
|
19 |
+
href: https://huggingface.co/spaces/datenwerkzeuge/CDL-Webscraping-Workshop-2025/discussions
|
20 |
+
- icon: code-slash
|
21 |
+
href: https://huggingface.co/spaces/datenwerkzeuge/CDL-Webscraping-Workshop-2025/tree/main
|
22 |
sidebar:
|
23 |
+
- title: "Start"
|
24 |
+
contents:
|
25 |
+
- href: index.qmd
|
26 |
+
text: "Willkommen"
|
27 |
+
- href: google-konto.qmd
|
28 |
+
text: "Google Konto erstellen"
|
29 |
+
- href: colab.qmd
|
30 |
+
text: "Colab nutzen"
|
31 |
+
- href: colab-github.qmd
|
32 |
+
text: "Colab nach GitHub speichern"
|
33 |
+
- href: huggingface.qmd
|
34 |
+
text: "Huggingface Ressourcen"
|
35 |
+
- href: quarto-lokal.qmd
|
36 |
+
text: "Quarto lokal"
|
37 |
+
- title: "No-Code"
|
38 |
+
contents:
|
39 |
+
- href: tools.qmd
|
40 |
+
text: "Werkzeuge"
|
41 |
+
- href: pdf-link-extractor.qmd
|
42 |
+
text: "PDF Link Extractor"
|
43 |
+
- href: pdf-grouping.qmd
|
44 |
+
text: "PDF Grouping"
|
45 |
+
- href: google-play-search.qmd
|
46 |
+
text: "Google Play Search"
|
47 |
+
- href: website-url-extractor.qmd
|
48 |
+
text: "URL Extractor"
|
49 |
+
- href: webspider.qmd
|
50 |
+
text: "Webspider"
|
51 |
+
- title: "Low-Code"
|
52 |
+
contents:
|
53 |
+
- section: "Scrapen einer Beispielseite"
|
54 |
contents:
|
55 |
+
- href: notebooks/bookstoscrape.qmd
|
56 |
+
text: "Bücherliste scrapen"
|
57 |
+
- href: notebooks/quotes_scraper.ipynb
|
58 |
+
text: "Zitate scrapen"
|
59 |
+
- section: "Soziale Medien"
|
60 |
contents:
|
61 |
+
- href: social-media.qmd
|
62 |
+
text: "Hinweise Scraping Social Media"
|
63 |
+
- href: notebooks/buergergeld_forum.ipynb
|
64 |
+
text: "Buergergeld Forum"
|
65 |
+
- href: notebooks/get_videos_for_youtube_channels.ipynb
|
66 |
+
text: "YouTube Channel Videos"
|
67 |
+
- href: notebooks/youtube-transcript-extraction.ipynb
|
68 |
+
text: "YouTube Video Transcripts"
|
69 |
+
- title: "Use-Case"
|
70 |
+
contents:
|
71 |
+
- href: notebooks/Gesetze_im_Internet_Aktualitätendienst.ipynb
|
72 |
+
text: "Aktualitätendienst Gesetze"
|
73 |
+
- href: notebooks/Jobboerse_API.ipynb
|
74 |
+
text: "Jobbörse"
|
75 |
|
76 |
format:
|
77 |
html:
|
src/agenda.qmd
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
### **Agenda für den Workshop (16:00 – 18:30 Uhr)**
|
2 |
+
|
3 |
+
- **16:00 – 16:15 Uhr**
|
4 |
+
Begrüßung und Einführung
|
5 |
+
|
6 |
+
- **16:15 – 16:35 Uhr**
|
7 |
+
Theorie: Einführung in Webscraping und Tools
|
8 |
+
|
9 |
+
- **16:35 – 17:00 Uhr**
|
10 |
+
Hands-on Session: Aufbau eines einfachen Webscraping-Prozesses
|
11 |
+
|
12 |
+
- **17:00 – 17:40 Uhr**
|
13 |
+
Hands-on Session: Anwendung von Webscraping und Datenaufbereitung
|
14 |
+
|
15 |
+
- **17:40 – 18:00 Uhr**
|
16 |
+
Praktischer Einblick: Niederschwellige Webscraping-Tools
|
17 |
+
|
18 |
+
- **18:00 – 18:15 Uhr**
|
19 |
+
Optionale Themen und zusätzliche Fragen
|
20 |
+
|
21 |
+
- **18:15 – 18:30 Uhr**
|
22 |
+
Abschluss und Feedback
|
src/colab-github.qmd
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Erstellung eines GitHub-Kontos 🚀
|
2 |
+
|
3 |
+
1. **Besuche die GitHub-Registrierungsseite**:
|
4 |
+
- Gehe zu [GitHub Signup](https://github.com/join).
|
5 |
+
|
6 |
+
2. **Registriere dich**:
|
7 |
+
- Gib eine E-Mail-Adresse ein, erstelle ein sicheres Passwort und wähle einen Benutzernamen.
|
8 |
+
- Bestätige deine Registrierung durch Klicken auf den Link, den du per E-Mail erhältst.
|
9 |
+
|
10 |
+
3. **Fülle dein Profil aus**:
|
11 |
+
- Logge dich in dein neues Konto ein.
|
12 |
+
- Klicke auf dein Profilbild in der oberen rechten Ecke und wähle "Settings".
|
13 |
+
- Hier kannst du dein Profilbild, deinen Namen und eine kurze Beschreibung hinzufügen.
|
14 |
+
|
15 |
+
---
|
16 |
+
|
17 |
+
## Verbinden eines Colab-Notebooks mit GitHub 💻
|
18 |
+
|
19 |
+
### Schritt 1: Ein neues Notebook erstellen oder öffnen
|
20 |
+
|
21 |
+
1. **Gehe zu Google Colab**:
|
22 |
+
- Besuche [Google Colab](https://colab.research.google.com/).
|
23 |
+
- Melde dich mit deinem Google-Konto an, falls erforderlich.
|
24 |
+
- Erstelle ein neues Notebook oder öffne ein bestehendes.
|
25 |
+
|
26 |
+
### Schritt 2: GitHub-Integration aktivieren
|
27 |
+
|
28 |
+
1. **Verbinden mit GitHub**:
|
29 |
+
- Klicke auf "Datei" und dann auf "Auf GitHub speichern".
|
30 |
+
- Google Colab fordert dich auf, sich mit GitHub zu authentifizieren und die notwendigen Berechtigungen zu erteilen.
|
31 |
+
- Folge den Anweisungen, um die Verbindung herzustellen.
|
32 |
+
|
33 |
+
### Schritt 3: Notebook als GitHub Gist speichern 🌟
|
34 |
+
|
35 |
+
1. **Notebook als Gist speichern**:
|
36 |
+
- Klicke auf "Datei" und wähle "Notebook als Gist speichern".
|
37 |
+
- Wähle die Sichtbarkeit des Gists (öffentlich oder privat) und gib eine Beschreibung ein.
|
38 |
+
- Klicke auf "OK", um das Notebook als Gist zu speichern.
|
39 |
+
|
40 |
+
### Schritt 4: Notebook in ein GitHub Repository speichern 📂
|
41 |
+
|
42 |
+
1. **Repository erstellen**:
|
43 |
+
- Besuche [GitHub](https://github.com/) und klicke auf das "+"-Symbol in der oberen rechten Ecke. Wähle "New repository".
|
44 |
+
- Gib einen Namen für dein Repository ein, füge eine Beschreibung hinzu und wähle die Sichtbarkeit (öffentlich oder privat).
|
45 |
+
- Klicke auf "Create repository".
|
46 |
+
|
47 |
+
2. **Notebook in das Repository speichern**:
|
48 |
+
- Gehe zurück zu Google Colab.
|
49 |
+
- Klicke auf "Datei" und wähle "Auf GitHub speichern".
|
50 |
+
- Wähle das zuvor erstellte Repository aus und gib optional eine Commit-Nachricht ein.
|
51 |
+
- Klicke auf "OK", um das Notebook im Repository zu speichern.
|
52 |
+
|
53 |
+
---
|
54 |
+
|
55 |
+
Herzlichen Glückwunsch! 🎉 Jetzt weißt du, wie du ein GitHub-Konto erstellst, ein Colab-Notebook mit GitHub verbindest und es als Gist oder in ein Repository speicherst. Viel Erfolg bei deinen Projekten! 🚀
|
src/colab.qmd
ADDED
@@ -0,0 +1,93 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Programmieren in Google Colab mit Hilfe von ChatGPT 🤖💻
|
2 |
+
|
3 |
+
### Schritt 1: Öffne Google Colab
|
4 |
+
|
5 |
+
1. **Gehe zu Google Colab**:
|
6 |
+
- Besuche [Google Colab](https://colab.research.google.com/).
|
7 |
+
- Melde dich mit deinem Google-Konto an, falls erforderlich.
|
8 |
+
|
9 |
+
2. **Erstelle ein neues Notebook**:
|
10 |
+
- Klicke auf "Datei" in der oberen linken Ecke.
|
11 |
+
- Wähle "Neues Notebook".
|
12 |
+
|
13 |
+
### Schritt 2: Einführung in ChatGPT für die Code-Erstellung 📝
|
14 |
+
|
15 |
+
Um ChatGPT optimal zu nutzen, ist es wichtig, klare und präzise Prompts zu erstellen. Ein guter Prompt enthält alle notwendigen Informationen, die ChatGPT benötigt, um eine hilfreiche Antwort zu geben.
|
16 |
+
|
17 |
+
#### Prompterstellung:
|
18 |
+
|
19 |
+
1. **Sei spezifisch**: Gebe genaue Details an, was du erreichen möchtest.
|
20 |
+
- Beispiel: „Schreibe einen Python-Code, der eine Liste von Zahlen sortiert.“
|
21 |
+
|
22 |
+
2. **Gebe Kontext**: Füge relevante Informationen hinzu, die helfen können, die Antwort zu präzisieren.
|
23 |
+
- Beispiel: „Ich arbeite in Google Colab und möchte eine Funktion erstellen, die eine Liste von Zahlen in aufsteigender Reihenfolge sortiert.“
|
24 |
+
|
25 |
+
3. **Stelle Fragen oder Aufgaben klar**: Formuliere klare Fragen oder Aufgaben.
|
26 |
+
- Beispiel: „Kannst du mir den Code für eine Sortierfunktion in Python geben?“
|
27 |
+
|
28 |
+
### Schritt 3: Nutzung von ChatGPT für die Code-Erstellung
|
29 |
+
|
30 |
+
1. **Prompt in ChatGPT eingeben**:
|
31 |
+
- Beispiel-Prompt: „Ich brauche einen Python-Code, der eine Liste von Zahlen sortiert. Kannst du mir helfen?“
|
32 |
+
|
33 |
+
2. **Kopiere den generierten Code**:
|
34 |
+
- Kopiere den von ChatGPT generierten Code in die Zwischenablage.
|
35 |
+
|
36 |
+
### Schritt 4: Code in Google Colab einfügen und ausführen
|
37 |
+
|
38 |
+
1. **Füge den Code in eine Codezelle ein**:
|
39 |
+
- Klicke in eine leere Codezelle in deinem Colab-Notebook und füge den kopierten Code ein.
|
40 |
+
|
41 |
+
2. **Führe den Code aus**:
|
42 |
+
- Drücke die Tastenkombination `Shift + Enter`, um die Codezelle auszuführen.
|
43 |
+
|
44 |
+
### Schritt 5: Fehlerbehebung mit ChatGPT 🔧
|
45 |
+
|
46 |
+
Wenn du beim Ausführen deines Codes auf Fehler stößt, kannst du ChatGPT verwenden, um diese zu beheben:
|
47 |
+
|
48 |
+
1. **Fehlermeldung kopieren**:
|
49 |
+
- Kopiere die Fehlermeldung aus Google Colab.
|
50 |
+
|
51 |
+
2. **Fehlermeldung an ChatGPT übergeben**:
|
52 |
+
- Beispiel-Prompt: „Ich habe folgenden Fehler erhalten, als ich meinen Code in Google Colab ausgeführt habe: [Fehlermeldung]. Kannst du mir helfen, diesen Fehler zu beheben?“
|
53 |
+
|
54 |
+
3. **Lösungen von ChatGPT anwenden**:
|
55 |
+
- Verwende die vorgeschlagenen Lösungen von ChatGPT, um den Fehler zu beheben und passe den Code entsprechend an.
|
56 |
+
|
57 |
+
### Schritt 6: Code verbessern und weiterentwickeln 🚀
|
58 |
+
|
59 |
+
Nutze ChatGPT, um deinen Code zu verbessern oder neue Funktionen hinzuzufügen:
|
60 |
+
- Beispiel-Prompt: „Kannst du mir helfen, eine zusätzliche Funktion hinzuzufügen, die die Liste in absteigender Reihenfolge sortiert?“
|
61 |
+
|
62 |
+
### Zusammenfassung 📜
|
63 |
+
|
64 |
+
Durch die Verwendung von ChatGPT in Google Colab kannst du effizient Code schreiben, vervollständigen und Fehler beheben. Denke daran, spezifische und kontextreiche Prompts zu erstellen, um die besten Ergebnisse zu erzielen. Kopiere und füge den generierten Code in dein Colab-Notebook ein und nutze ChatGPT zur Fehlerbehebung, wenn Probleme auftreten.
|
65 |
+
|
66 |
+
Viel Erfolg bei deinem Programmierprojekt! 🎉 Falls du noch weitere Fragen hast oder Unterstützung benötigst, lass es mich wissen. 😊✨
|
67 |
+
|
68 |
+
### Nutzung der Code-Generierung ⚙️
|
69 |
+
|
70 |
+
1. **Gehe zur Colab Enterprise Notebooks-Seite** und öffne dein Notizbuch.
|
71 |
+
2. **Aktiviere Code-Generierung**:
|
72 |
+
- Klicke auf das Symbol "Help me code" in der Werkzeugleiste und wähle "Code generation".
|
73 |
+
3. **Code generieren**:
|
74 |
+
- In einer leeren Codezelle, klicke auf "Generate".
|
75 |
+
- Gib eine Beschreibung des gewünschten Codes ein und drücke Enter.
|
76 |
+
- Beispiel: "Erzeuge einen pandas DataFrame aus einer CSV-Datei".
|
77 |
+
4. **Panel schließen**:
|
78 |
+
- Klicke auf "Close", um das Generate-Panel zu schließen.
|
79 |
+
|
80 |
+
### Fehler beheben 🔧
|
81 |
+
|
82 |
+
1. **Gehe zur Colab Enterprise Notebooks-Seite** und öffne dein Notizbuch.
|
83 |
+
2. **Aktiviere Code-Generierung**:
|
84 |
+
- Klicke auf das Symbol "Help me code" in der Werkzeugleiste und wähle "Code generation".
|
85 |
+
3. **Code mit Fehler eingeben**:
|
86 |
+
- Gib Code mit einem Fehler in eine Codezelle ein und führe die Zelle aus. Beispiel: `print(1` (fehlende schließende Klammer).
|
87 |
+
4. **Fehlerbehebungsvorschlag akzeptieren**:
|
88 |
+
- Wenn Gemini eine Lösung für den Fehler vorschlägt, klicke auf "Fix error".
|
89 |
+
- Bewerte den Vorschlag und klicke auf "Accept suggestion" oder "Reject suggestion".
|
90 |
+
|
91 |
+
https://blog.google/technology/ai/democratizing-access-to-ai-enabled-coding-with-colab/
|
92 |
+
https://blog.google/technology/developers/google-colab-ai-coding-features/
|
93 |
+
https://www.youtube.com/watch?v=V7RXyqFUR98
|
src/google-konto.qmd
ADDED
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Erstellung eines Google-Kontos 📧
|
2 |
+
|
3 |
+
1. **Besuche die Google-Registrierungsseite**:
|
4 |
+
- Gehe zu [Google-Konto erstellen](https://accounts.google.com/signup).
|
5 |
+
|
6 |
+
2. **Gib deine persönlichen Informationen ein**:
|
7 |
+
- Fülle das Formular mit deinem Vor- und Nachnamen aus.
|
8 |
+
- Wähle einen Benutzernamen für deine Google-Mail-Adresse.
|
9 |
+
- Erstelle ein sicheres Passwort und bestätige es.
|
10 |
+
|
11 |
+
3. **Konto verifizieren**:
|
12 |
+
- Folge den Anweisungen zur Verifizierung deines Kontos (SMS-Code oder E-Mail-Verifizierung).
|
13 |
+
|
14 |
+
4. **Abschließen der Einrichtung**:
|
15 |
+
- Fülle die restlichen Felder aus (Geburtsdatum, Geschlecht, etc.).
|
16 |
+
- Akzeptiere die Nutzungsbedingungen und Datenschutzrichtlinien von Google.
|
17 |
+
|
18 |
+
Jetzt hast du ein Google-Konto! 🎉
|
19 |
+
|
20 |
+
---
|
21 |
+
|
22 |
+
## Nutzung von Google Colab 💻
|
23 |
+
|
24 |
+
### Schritt 1: Öffne Google Colab
|
25 |
+
|
26 |
+
1. **Gehe zu Google Colab**:
|
27 |
+
- Besuche [Google Colab](https://colab.research.google.com/).
|
28 |
+
- Melde dich mit deinem Google-Konto an, falls erforderlich.
|
29 |
+
|
30 |
+
### Schritt 2: Neues Notebook erstellen
|
31 |
+
|
32 |
+
1. **Erstelle ein neues Notebook**:
|
33 |
+
- Klicke auf "Datei" in der oberen linken Ecke.
|
34 |
+
- Wähle "Neues Notebook".
|
35 |
+
|
36 |
+
### Schritt 3: Upload von Dateien 📁
|
37 |
+
|
38 |
+
1. **Dateien hochladen**:
|
39 |
+
- Klicke im linken Seitenbereich auf das Ordnersymbol.
|
40 |
+
- Klicke auf das Upload-Symbol (Pfeil nach oben) und wähle die Dateien aus, die du hochladen möchtest.
|
41 |
+
|
42 |
+
### Schritt 4: Verwendung von Gemini zur Unterstützung beim Programmieren 🤖
|
43 |
+
|
44 |
+
Gemini ist ein fortgeschrittener KI-Code-Assistent, der dir beim Programmieren in Google Colab helfen kann. Um Gemini zu verwenden:
|
45 |
+
|
46 |
+
1. **Installiere die benötigten Pakete**:
|
47 |
+
- Führe im Notebook folgende Befehle aus:
|
48 |
+
```python
|
49 |
+
!pip install gemini
|
50 |
+
```
|
51 |
+
|
52 |
+
2. **Importiere Gemini und starte die Unterstützung**:
|
53 |
+
- Füge im Notebook folgenden Code hinzu:
|
54 |
+
```python
|
55 |
+
import gemini
|
56 |
+
gemini.start()
|
57 |
+
```
|
58 |
+
- Gemini wird nun aktiviert und kann dir beim Programmieren assistieren.
|
59 |
+
|
60 |
+
### Schritt 5: Dateien und Notebook downloaden 📂
|
61 |
+
|
62 |
+
1. **Notebook herunterladen**:
|
63 |
+
- Klicke auf "Datei" und wähle "Download .ipynb", um dein Notebook im Jupyter-Format herunterzuladen.
|
64 |
+
|
65 |
+
2. **Dateien herunterladen**:
|
66 |
+
- Klicke im linken Seitenbereich auf das Ordnersymbol.
|
67 |
+
- Rechtsklicke auf die Datei, die du herunterladen möchtest, und wähle "Herunterladen".
|
src/google-play-search.qmd
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
title: "Google-Play-App-Suche"
|
3 |
+
author: "datenwerkzeuge"
|
4 |
+
date: "2024-06-16"
|
5 |
+
format: html
|
6 |
+
---
|
7 |
+
|
8 |
+
# Google-Play-App-Suche
|
9 |
+
|
10 |
+
## Beschreibung
|
11 |
+
Dieses Tool durchsucht den Google Play Store nach Apps, basierend auf einem vom Nutzer eingegebenen Suchbegriff, und liefert eine übersichtliche Ergebnisliste.
|
12 |
+
|
13 |
+
## Funktionen
|
14 |
+
- **Suchfunktion**: Eingabe eines Keywords zur Suche nach Apps.
|
15 |
+
- **Details zu Apps**:
|
16 |
+
- App-Titel
|
17 |
+
- Entwickler
|
18 |
+
- Bewertung
|
19 |
+
- Google Play-Link zur App
|
20 |
+
- App-Icon
|
21 |
+
- **URL-Ausgabe**: Separates Anzeigen der direkten Google-Play-Links zu den Apps.
|
22 |
+
|
23 |
+
## Anwendungsfall
|
24 |
+
Perfekt für Nutzer, die eine schnelle Übersicht über relevante Apps im Google Play Store erhalten möchten.
|
25 |
+
|
src/huggingface.qmd
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
### Schritt 1: Ein Hugging Face-Konto erstellen
|
2 |
+
|
3 |
+
1. **Besuche die Hugging Face-Website**:
|
4 |
+
Gehe zu [Hugging Face](https://huggingface.co/).
|
5 |
+
|
6 |
+
2. **Registriere dich**:
|
7 |
+
- Klicke auf "Sign Up" in der oberen rechten Ecke der Webseite.
|
8 |
+
- Gib deine E-Mail-Adresse ein, erstelle ein Passwort und wähle einen Benutzernamen.
|
9 |
+
- Bestätige die Registrierung durch Klicken auf den Link, den du per E-Mail erhältst.
|
10 |
+
|
11 |
+
3. **Fülle dein Profil aus**:
|
12 |
+
- Logge dich in dein neues Konto ein.
|
13 |
+
- Klicke auf dein Profilbild in der oberen rechten Ecke und wähle "Profile".
|
14 |
+
- Hier kannst du dein Profilbild, deinen Namen und eine kurze Beschreibung hinzufügen.
|
15 |
+
|
16 |
+
### Schritt 2: Einer Organisation beitreten
|
17 |
+
|
18 |
+
1. **Navigiere zur Organisationsseite**:
|
19 |
+
- Gehe zu der Organisation, der du beitreten möchtest, indem du auf der Hugging Face-Seite nach ihr suchst.
|
20 |
+
|
21 |
+
2. **Anfrage zum Beitritt**:
|
22 |
+
- Auf der Organisationsseite findest du eine Option, um eine Anfrage zum Beitritt zu stellen. Klicke auf "Request to join".
|
23 |
+
|
24 |
+
3. **Warten auf Genehmigung**:
|
25 |
+
- Die Administratoren der Organisation werden deine Anfrage prüfen und genehmigen. Du erhältst eine Benachrichtigung, wenn deine Anfrage akzeptiert wurde.
|
26 |
+
|
27 |
+
### Schritt 3: Ein Space duplizieren
|
28 |
+
|
29 |
+
1. **Finde das Space, das du duplizieren möchtest**:
|
30 |
+
- Suche auf der Hugging Face-Seite nach dem Space, das du duplizieren möchtest.
|
31 |
+
|
32 |
+
2. **Öffne das Space**:
|
33 |
+
- Klicke auf das Space, um die Detailseite zu öffnen.
|
34 |
+
|
35 |
+
3. **Dupliziere das Space**:
|
36 |
+
- Auf der Detailseite des Spaces findest du einen Button mit der Aufschrift "Duplicate". Klicke darauf, um den Duplizierungsprozess zu starten.
|
37 |
+
- Wähle deinen eigenen Bereich oder ein anderes Ziel, wohin du das Space duplizieren möchtest.
|
38 |
+
|
39 |
+
4. **Anpassen und Starten**:
|
40 |
+
- Nachdem das Space dupliziert wurde, kannst du es anpassen und starten. Navigiere zu deinem eigenen Bereich, um das duplizierte Space zu finden und zu verwalten.
|
src/notebooks/Gesetze_im_Internet_Aktualitätendienst.ipynb
ADDED
The diff for this file is too large to render.
See raw diff
|
|
src/notebooks/Jobboerse_API.ipynb
ADDED
The diff for this file is too large to render.
See raw diff
|
|
src/notebooks/buergergeld_forum.ipynb
ADDED
The diff for this file is too large to render.
See raw diff
|
|
src/notebooks/get_videos_for_youtube_channels.ipynb
ADDED
The diff for this file is too large to render.
See raw diff
|
|
src/notebooks/youtube-transcript-extraction.ipynb
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[],"dockerImageVersionId":30804,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"! pip install pytube youtube-transcript-api reportlab -q","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T19:21:41.981023Z","iopub.execute_input":"2024-12-08T19:21:41.981395Z","iopub.status.idle":"2024-12-08T19:21:56.468283Z","shell.execute_reply.started":"2024-12-08T19:21:41.981364Z","shell.execute_reply":"2024-12-08T19:21:56.466400Z"}},"outputs":[],"execution_count":1},{"cell_type":"code","source":"from pytube import YouTube, Playlist\nfrom youtube_transcript_api import YouTubeTranscriptApi, TranscriptsDisabled, NoTranscriptFound\nfrom reportlab.lib.pagesizes import letter\nfrom reportlab.pdfgen import canvas\nimport os\nimport zipfile","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T19:21:56.470984Z","iopub.execute_input":"2024-12-08T19:21:56.471492Z","iopub.status.idle":"2024-12-08T19:21:56.658038Z","shell.execute_reply.started":"2024-12-08T19:21:56.471442Z","shell.execute_reply":"2024-12-08T19:21:56.656869Z"}},"outputs":[],"execution_count":2},{"cell_type":"code","source":"# Funktion zum Extrahieren des Transkripts\ndef get_transcript_with_language_preference(video_id, preferred_languages=(\"en\", \"de\"), prefer_manual=True):\n \"\"\"\n Extracts a transcript based on the preferred languages.\n If no transcript is found in the preferred languages, it checks available languages.\n \n Args:\n video_id (str): The ID of the YouTube video.\n preferred_languages (tuple): Preferred languages in order of priority.\n prefer_manual (bool): Whether to prefer manually created transcripts over auto-generated ones.\n \n Returns:\n str: The transcript or an error message if not found.\n \"\"\"\n try:\n # Fetch the transcript list for the video\n transcript_list = YouTubeTranscriptApi.list_transcripts(video_id)\n \n # Filter transcripts for preferred languages and filter by manual or auto-generated type\n transcript = None\n for lang in preferred_languages:\n try:\n if prefer_manual:\n transcript = transcript_list.find_transcript([lang]) # Prefer manually created transcripts\n else:\n transcript = transcript_list.find_transcript([lang], filter_types=['generated']) # Prefer auto-generated transcripts\n \n # If a valid transcript is found, break the loop\n if transcript:\n break\n except Exception as e:\n # Continue if no transcript found for this language\n continue\n\n # If no transcript was found in the preferred languages, return available transcripts\n if not transcript:\n available_transcripts = transcript_list\n available_languages = {t.language_code: t.language for t in available_transcripts}\n \n error_message = f\"Kein Transkript in den gewünschten Sprachen {preferred_languages} gefunden.\\n\"\n error_message += \"Verfügbare Sprachen:\\n\"\n error_message += \"\\n\".join([f\"- {code} ({lang})\" for code, lang in available_languages.items()])\n return error_message\n\n # Get the actual transcript text\n transcript_data = transcript.fetch()\n return \"\\n\".join([entry[\"text\"] for entry in transcript_data])\n\n except TranscriptsDisabled:\n return \"Transkripte sind für dieses Video deaktiviert.\"\n except NoTranscriptFound:\n return \"Es wurden keine Transkripte für dieses Video gefunden.\"\n except Exception as e:\n return f\"Allgemeiner Fehler beim Abrufen des Transkripts: {e}\"\n\n# Funktion zum Erstellen eines PDFs\ndef save_transcript_as_pdf_with_pagination(title, transcript):\n \"\"\"\n Speichert ein Transkript als PDF mit Seitenumbrüchen, wenn der Text zu lang ist.\n Args:\n title (str): Der Titel, der als Dateiname verwendet wird.\n transcript (str): Der Text des Transkripts.\n Returns:\n str: Der Name der gespeicherten PDF-Datei.\n \"\"\"\n # Sicheren Dateinamen erstellen\n filename = f\"{title}.pdf\".replace(\"/\", \"_\").replace(\"\\\\\", \"_\")\n\n # PDF-Einstellungen\n c = canvas.Canvas(filename, pagesize=letter)\n width, height = letter\n\n # Schrift- und Layout-Einstellungen\n margin = 50\n line_height = 14\n max_lines_per_page = int((height - 2 * margin) / line_height) - 2 # Platz für Titel und Seitenrand\n\n # Titel schreiben\n c.setFont(\"Helvetica-Bold\", 16)\n c.drawString(margin, height - margin, title)\n\n # Textblock initialisieren\n c.setFont(\"Helvetica\", 12)\n y_position = height - margin - 30 # Platz für Titel\n\n # Text Zeile für Zeile schreiben\n lines = transcript.split(\"\\n\")\n line_count = 0\n\n for line in lines:\n if line_count >= max_lines_per_page: # Neue Seite bei Bedarf\n c.showPage()\n c.setFont(\"Helvetica-Bold\", 16)\n c.drawString(margin, height - margin, title)\n c.setFont(\"Helvetica\", 12)\n y_position = height - margin - 30\n line_count = 0\n \n c.drawString(margin, y_position, line)\n y_position -= line_height\n line_count += 1\n\n # PDF speichern\n c.save()\n return filename","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T19:21:56.659720Z","iopub.execute_input":"2024-12-08T19:21:56.660152Z","iopub.status.idle":"2024-12-08T19:21:56.675204Z","shell.execute_reply.started":"2024-12-08T19:21:56.660092Z","shell.execute_reply":"2024-12-08T19:21:56.674023Z"}},"outputs":[],"execution_count":3},{"cell_type":"code","source":"# Eingabe der URLs\nurls = \"https://www.youtube.com/playlist?list=PLf8HAovJg47MN7bswKf73pffom98Fx8Q8\"\n\npdf_filenames = [] # Liste zur Speicherung der PDF-Dateinamen\n\n# URL-Liste verarbeiten\nurl_list = urls.splitlines()\nfor url in url_list:\n url = url.strip()\n if not url:\n continue\n\n # Playlist-URL oder Video-URL?\n if \"playlist\" in url:\n playlist = Playlist(url)\n video_urls = playlist.video_urls\n else:\n video_urls = [url]\n\n for video_url in video_urls:\n try:\n yt = YouTube(video_url)\n video_id = yt.video_id\n title = video_id\n print(f\"Verarbeite Video: {title}\")\n\n transcript = get_transcript_with_language_preference(video_id)\n\n # Speichern des Transkripts als PDF\n pdf_filename = save_transcript_as_pdf_with_pagination(title, transcript)\n pdf_filenames.append(pdf_filename)\n print(f\"Transkript für '{title}' gespeichert als {pdf_filename}.\")\n\n except Exception as e:\n print(f\"Fehler bei der Verarbeitung von {video_url}: {e}\")\n\n# Erstellen eines ZIP-Archivs\nzip_filename = \"transcripts.zip\"\nwith zipfile.ZipFile(zip_filename, 'w') as zipf:\n for pdf_filename in pdf_filenames:\n zipf.write(pdf_filename)\n os.remove(pdf_filename) # Lösche die PDF-Dateien nach dem Hinzufügen zum ZIP-Archiv\n\nprint(f\"ZIP-Archiv '{zip_filename}' wurde erstellt.\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T19:32:38.175463Z","iopub.execute_input":"2024-12-08T19:32:38.175946Z","iopub.status.idle":"2024-12-08T19:32:40.711451Z","shell.execute_reply.started":"2024-12-08T19:32:38.175908Z","shell.execute_reply":"2024-12-08T19:32:40.710172Z"}},"outputs":[{"name":"stdout","text":"Verarbeite Video: B7uzC96-930\nTranskript für 'B7uzC96-930' gespeichert als B7uzC96-930.pdf.\nVerarbeite Video: 4QeKMnd8B7Q\nTranskript für '4QeKMnd8B7Q' gespeichert als 4QeKMnd8B7Q.pdf.\nVerarbeite Video: 30wxAJ5uyzs\nTranskript für '30wxAJ5uyzs' gespeichert als 30wxAJ5uyzs.pdf.\nZIP-Archiv 'transcripts.zip' wurde erstellt.\n","output_type":"stream"}],"execution_count":15},{"cell_type":"code","source":"# os.remove(zip_filename)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T19:30:12.194141Z","iopub.execute_input":"2024-12-08T19:30:12.194584Z","iopub.status.idle":"2024-12-08T19:30:12.200364Z","shell.execute_reply.started":"2024-12-08T19:30:12.194548Z","shell.execute_reply":"2024-12-08T19:30:12.198944Z"}},"outputs":[],"execution_count":13}]}
|
src/pdf-grouping.qmd
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
title: "PDF-Keyword-Grouping-App"
|
3 |
+
author: "datenwerkzeuge"
|
4 |
+
date: "2024-06-16"
|
5 |
+
format: html
|
6 |
+
---
|
7 |
+
|
8 |
+
# PDF-Keyword-Grouping-App
|
9 |
+
|
10 |
+
## Beschreibung
|
11 |
+
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.
|
12 |
+
|
13 |
+
## Funktionen
|
14 |
+
- **PDF-Upload**: Mehrere PDFs gleichzeitig hochladen.
|
15 |
+
- **Keyword-Extraktion**: Automatische Extraktion der wichtigsten Schlüsselwörter pro PDF.
|
16 |
+
- **Themenbasierte Gruppierung**: PDFs werden mithilfe von KI-Modellen wie KeyBERT und Sentence Transformers in semantische Gruppen aufgeteilt.
|
17 |
+
- **Download als ZIP**: Die gruppierten PDFs werden in einem ZIP-Archiv zum Download bereitgestellt.
|
18 |
+
|
19 |
+
## Anwendungsfall
|
20 |
+
Geeignet für Nutzer, die eine große Anzahl von PDFs nach inhaltlichen Themen sortieren und effizient organisieren möchten.
|
21 |
+
|
src/pdf-link-extractor.qmd
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
title: "PDF-Link-Extractor"
|
3 |
+
author: "datenwerkzeuge"
|
4 |
+
date: "2024-06-16"
|
5 |
+
format: html
|
6 |
+
---
|
7 |
+
|
8 |
+
# PDF-Link-Extractor
|
9 |
+
|
10 |
+
## Beschreibung
|
11 |
+
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.
|
12 |
+
|
13 |
+
## Funktionen
|
14 |
+
- **Eingabeoptionen**:
|
15 |
+
- URL der Webseite
|
16 |
+
- Hochladen einer HTML-Datei
|
17 |
+
- **PDF-Suche**: Extraktion aller PDF-Links auf der Seite.
|
18 |
+
- **Download & Komprimierung**: Herunterladen der PDFs und Bereitstellung in einem ZIP-Archiv.
|
19 |
+
- **Übersicht der gefundenen PDFs**: Anzeige der Dateigrößen und Namen.
|
20 |
+
|
21 |
+
## Anwendungsfall
|
22 |
+
Ideal für Nutzer, die alle PDFs von einer Webseite systematisch sammeln und lokal speichern möchten.
|
23 |
+
|
src/social-media.qmd
ADDED
@@ -0,0 +1,121 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
### Web Scraping von Social-Media-Plattformen: Erklärung und Python-Beispiele
|
2 |
+
|
3 |
+
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.
|
4 |
+
|
5 |
+
---
|
6 |
+
|
7 |
+
#### **Wichtige Vorgaben und Einschränkungen**
|
8 |
+
1. **Einhaltung der Nutzungsbedingungen**:
|
9 |
+
- Die Nutzungsbedingungen der Plattformen verbieten oft automatisiertes Scraping ohne ausdrückliche Genehmigung.
|
10 |
+
- Scraping, das die Plattform oder ihre Nutzer schädigt, ist unzulässig.
|
11 |
+
|
12 |
+
2. **Authentifizierung und API-Nutzung**:
|
13 |
+
- Plattformen bieten oft offizielle APIs (Application Programming Interfaces) an, die eine datenschutzkonforme und autorisierte Datenabfrage ermöglichen.
|
14 |
+
- Für den Zugriff auf APIs ist eine Authentifizierung (z. B. mittels API-Schlüssel oder OAuth) erforderlich.
|
15 |
+
|
16 |
+
3. **Datenschutz und ethische Verantwortung**:
|
17 |
+
- Das Sammeln von personenbezogenen Daten erfordert eine rechtliche Grundlage (z. B. Zustimmung der Nutzer).
|
18 |
+
- Die Daten dürfen nicht für manipulative Zwecke verwendet werden.
|
19 |
+
|
20 |
+
4. **Technische Einschränkungen**:
|
21 |
+
- Plattformen implementieren Schutzmaßnahmen wie Captchas, Rate Limits und IP-Blocking, um unautorisiertes Scraping zu verhindern.
|
22 |
+
|
23 |
+
---
|
24 |
+
|
25 |
+
#### **Gemeinsamkeiten beim Scraping von Social Media**
|
26 |
+
- **Authentifizierung**:
|
27 |
+
- Die meisten Plattformen erfordern eine Anmeldung, um auf geschützte Inhalte zuzugreifen.
|
28 |
+
- APIs nutzen Authentifizierungsmethoden wie OAuth oder API-Keys.
|
29 |
+
|
30 |
+
- **Rate Limits**:
|
31 |
+
- Plattformen beschränken die Anzahl der Anfragen, um Serverüberlastung und Missbrauch zu verhindern.
|
32 |
+
|
33 |
+
- **Datenstruktur**:
|
34 |
+
- Die Daten werden häufig in JSON-Format geliefert (bei API-Anfragen).
|
35 |
+
|
36 |
+
- **Rechts- und Sicherheitsanforderungen**:
|
37 |
+
- Jede Plattform stellt spezifische Anforderungen, die jedoch alle die Privatsphäre und Sicherheit der Nutzer schützen sollen.
|
38 |
+
|
39 |
+
---
|
40 |
+
|
41 |
+
#### **Beispiele für Scraping mit Python**
|
42 |
+
|
43 |
+
##### 1. **Nutzung der Twitter-API (via `tweepy`)**
|
44 |
+
Die API ist die offizielle und empfohlene Methode, um Twitter-Daten abzufragen.
|
45 |
+
|
46 |
+
```python
|
47 |
+
import tweepy
|
48 |
+
|
49 |
+
# Authentifizierung
|
50 |
+
api_key = "DEINE_API_KEY"
|
51 |
+
api_key_secret = "DEIN_API_SECRET"
|
52 |
+
access_token = "DEIN_ACCESS_TOKEN"
|
53 |
+
access_token_secret = "DEIN_ACCESS_TOKEN_SECRET"
|
54 |
+
|
55 |
+
auth = tweepy.OAuthHandler(api_key, api_key_secret)
|
56 |
+
auth.set_access_token(access_token, access_token_secret)
|
57 |
+
|
58 |
+
api = tweepy.API(auth)
|
59 |
+
|
60 |
+
# Tweets mit einem Hashtag suchen
|
61 |
+
query = "#Python"
|
62 |
+
tweets = tweepy.Cursor(api.search_tweets, q=query, lang="en").items(5)
|
63 |
+
|
64 |
+
for tweet in tweets:
|
65 |
+
print(f"Tweet von @{tweet.user.screen_name}: {tweet.text}")
|
66 |
+
```
|
67 |
+
|
68 |
+
**Hinweis**: Beachte die Twitter-Rate-Limits und die Twitter-Entwicklerrichtlinien.
|
69 |
+
|
70 |
+
---
|
71 |
+
|
72 |
+
##### 2. **Scraping einer öffentlichen Webseite mit `BeautifulSoup`**
|
73 |
+
Manchmal möchten Entwickler Daten von öffentlich zugänglichen Social-Media-Seiten extrahieren. Dies birgt Risiken, wenn keine Genehmigung vorliegt.
|
74 |
+
|
75 |
+
```python
|
76 |
+
import requests
|
77 |
+
from bs4 import BeautifulSoup
|
78 |
+
|
79 |
+
# URL einer öffentlichen Instagram-Seite
|
80 |
+
url = "https://www.instagram.com/explore/tags/python/"
|
81 |
+
headers = {
|
82 |
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
|
83 |
+
}
|
84 |
+
|
85 |
+
response = requests.get(url, headers=headers)
|
86 |
+
soup = BeautifulSoup(response.text, "html.parser")
|
87 |
+
|
88 |
+
# Vorsicht: Viele Plattformen haben Schutzmaßnahmen gegen Scraping.
|
89 |
+
titles = soup.find_all("title")
|
90 |
+
print([title.text for title in titles])
|
91 |
+
```
|
92 |
+
|
93 |
+
**Warnung**: Viele Social-Media-Seiten setzen JavaScript ein, und einfache Scraping-Methoden funktionieren oft nicht. Außerdem kann das Umgehen von Schutzmaßnahmen wie Captchas rechtliche Konsequenzen haben.
|
94 |
+
|
95 |
+
---
|
96 |
+
|
97 |
+
##### 3. **LinkedIn API für Profildaten (via `linkedin-api`)**
|
98 |
+
LinkedIn stellt eine API für Unternehmenspartner zur Verfügung. Die Nutzung erfordert Zugangsbeschränkungen und Genehmigungen.
|
99 |
+
|
100 |
+
```python
|
101 |
+
from linkedin_api import Linkedin
|
102 |
+
|
103 |
+
# Login mit LinkedIn-Konto
|
104 |
+
api = Linkedin("dein_benutzername", "dein_passwort")
|
105 |
+
|
106 |
+
# Profildaten eines Nutzers abrufen
|
107 |
+
profile = api.get_profile("public_profile_url")
|
108 |
+
print(profile)
|
109 |
+
```
|
110 |
+
|
111 |
+
---
|
112 |
+
|
113 |
+
#### **Zusammenfassung**
|
114 |
+
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.
|
115 |
+
|
116 |
+
Bevor Scraping-Projekte umgesetzt werden:
|
117 |
+
- **Prüfe die Nutzungsbedingungen der Plattform.**
|
118 |
+
- **Respektiere die Privatsphäre und Rechte der Nutzer.**
|
119 |
+
- **Nutze offizielle APIs, wo immer möglich.**
|
120 |
+
|
121 |
+
Die Automatisierung ohne Erlaubnis kann rechtliche Konsequenzen haben, daher ist Vorsicht geboten.
|
src/tools.qmd
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Eine Sammlung interaktiver **Spaces**, die praktische Anwendungen rund um **Webscraping** und **lokale Datensammlung** demonstrieren. Ziel ist es, die Möglichkeiten der Datenerfassung zu illustrieren.
|
2 |
+
|
3 |
+
### **Bereits verfügbares Werkzeug:**
|
4 |
+
- **[Webspider](https://huggingface.co/spaces/datenwerkzeuge/webspider)**:
|
5 |
+
Diese App ermöglicht es, eine angegebene Webseite zu durchsuchen und strukturierte Daten wie URLs, Titel und Inhalte zu extrahieren. Die Ergebnisse werden übersichtlich angezeigt und können im JSON-Format heruntergeladen werden. Nutzer können dabei die Tiefe der Navigation und die maximale Seitenanzahl individuell einstellen, um die Datensammlung an ihre Bedürfnisse anzupassen.
|
6 |
+
- **[PDFs-Sammeln](https://huggingface.co/spaces/datenwerkzeuge/pdfs-sammeln)**:
|
7 |
+
Diese App durchsucht eine angegebene Webseite oder eine hochgeladene HTML-Datei nach PDF-Links, lädt die gefundenen PDF-Dokumente herunter und erstellt daraus eine ZIP-Datei. Nutzer können die Datei samt einer Übersicht der gefundenen PDFs (inklusive Dateigröße) direkt herunterladen. Das Tool ermöglicht es, PDF-Dokumente effizient zu sammeln und organisiert bereitzustellen.
|
8 |
+
- **[PDF Keyword Grouping App](https://huggingface.co/spaces/datenwerkzeuge/PDF-Keyword-Grouping-App)**:
|
9 |
+
Dieses Tool analysiert den Textinhalt hochgeladener PDFs, extrahiert Schlüsselbegriffe und gruppiert die Dokumente basierend auf den ausgewählten Themen oder Keywords. Es verwendet fortschrittliche KI-Modelle für semantische Textanalyse und Zuordnung. Am Ende können die gruppierten PDFs als ZIP-Datei heruntergeladen werden, um sie übersichtlich zu organisieren und effizient weiterzuverarbeiten.
|
10 |
+
- **[Google Play App Search](https://huggingface.co/spaces/datenwerkzeuge/Google-Play-App-Search)**:
|
11 |
+
Dieses Tool ermöglicht die Suche nach Apps im Google Play Store anhand eines eingegebenen Suchbegriffs. Die Ergebnisse enthalten Details wie App-Titel, Entwickler, Bewertung und einen direkten Link zur App im Store. Zusätzlich wird eine separate Liste mit allen URLs der gefundenen Apps bereitgestellt, um eine schnelle Weiterverarbeitung zu ermöglichen.
|
12 |
+
- **[Webseiten-URL-Extraktor](https://huggingface.co/spaces/datenwerkzeuge/Webseiten-URL-Extraktor)**:
|
13 |
+
Dieses Tool extrahiert automatisch alle Links von einer angegebenen Webseite. Es listet die URLs übersichtlich auf und bietet somit eine einfache Möglichkeit, alle relevanten Verweise einer Seite zu sammeln. Perfekt für die Analyse und Weiterverarbeitung von Webseiteninhalten.
|
src/website-url-extractor.qmd
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
title: "Webseiten-URL-Extraktor"
|
3 |
+
author: "datenwerkzeuge"
|
4 |
+
date: "2024-06-16"
|
5 |
+
format: html
|
6 |
+
---
|
7 |
+
|
8 |
+
# Webseiten-URL-Extraktor
|
9 |
+
|
10 |
+
## Beschreibung
|
11 |
+
Dieses Tool extrahiert alle Links von einer angegebenen Webseite und stellt sie übersichtlich dar.
|
12 |
+
|
13 |
+
## Funktionen
|
14 |
+
- **Webseitenanalyse**: Automatische Extraktion aller URLs von einer Webseite.
|
15 |
+
- **Filterung**: Nur vollständige Links (z. B. beginnend mit `http`) werden angezeigt.
|
16 |
+
- **Einfaches Interface**: Eingabefeld für die URL und eine klare Liste der extrahierten Links.
|
17 |
+
|
18 |
+
## Anwendungsfall
|
19 |
+
Ideal für Nutzer, die schnell alle Links einer Webseite analysieren oder weiterverarbeiten möchten.
|
20 |
+
|
src/webspider.qmd
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
**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.
|
2 |
+
|
3 |
+
#### Hauptfunktionen:
|
4 |
+
1. **Benutzerdefinierte Scraping-Parameter**:
|
5 |
+
- Einstellung der maximalen **Tiefe** für die Navigation durch Seiten (Depth Limit).
|
6 |
+
- Festlegen der **Seitenanzahl**, die maximal durchsucht werden soll (Page Count Limit).
|
7 |
+
|
8 |
+
2. **URL-Eingabe**:
|
9 |
+
- Benutzer können die Start-URL angeben, von der aus das Scraping beginnen soll.
|
10 |
+
|
11 |
+
3. **Statusüberprüfung**:
|
12 |
+
- Informiert, ob der Scraping-Vorgang noch läuft oder abgeschlossen ist.
|
13 |
+
|
14 |
+
4. **Datenanzeige und -export**:
|
15 |
+
- Nach Abschluss des Scraping-Prozesses werden die gesammelten Daten (z. B. URLs, Seitentitel und Inhalte) angezeigt.
|
16 |
+
- Daten können im JSON-Format heruntergeladen werden.
|
17 |
+
|
18 |
+
5. **Scrapy Spider-Integration**:
|
19 |
+
- Der integrierte Spider navigiert durch die Webseiten, extrahiert Inhalte und folgt internen Links innerhalb derselben Domain.
|
20 |
+
- Enthält eine Funktion zur Bereinigung von Text (Entfernung von HTML-Tags, Skripten und Stilen).
|
21 |
+
|
22 |
+
#### Technische Highlights:
|
23 |
+
- **Streamlit** wird für die interaktive Benutzeroberfläche genutzt.
|
24 |
+
- **Scrapy** führt die eigentliche Datenextraktion durch.
|
25 |
+
- Dynamische Anpassung von Scraping-Parametern wie Tiefe und Seitenanzahl.
|
26 |
+
- Fortschrittsprotokollierung über lokale Logdateien.
|
27 |
+
- Ergebnisanzeige mit der Option, die gesammelten Daten direkt herunterzuladen.
|
28 |
+
|
29 |
+
**Einsatzmöglichkeiten**:
|
30 |
+
Die Anwendung eignet sich für die Datenerfassung aus öffentlich zugänglichen Webseiten, sei es zur Inhaltsanalyse, Datenaggregation oder weiteren Recherchezwecken.
|
31 |
+
|
32 |
+
**Hinweis**: Sie sollte verantwortungsvoll und im Einklang mit den geltenden Nutzungsbedingungen der Zielseiten verwendet werden.
|