URL zu Text: Webinhalte automatisch in Plaintext konvertieren
URL eingeben — sauberen, lesbaren Text erhalten. Ideal für Recherche & Archivierung.
Python
BeautifulSoup
Readability
🚀 URL rein — Text raus. So einfach kann Datenextraktion sein.
💰 URL-zu-Text: Die Brücke zwischen Web und Daten
Webseiten sind für Browser optimiert, nicht für Datenverarbeitung. URL-zu-Text extrahiert den eigentlichen Inhalt — Hauptartikel, Metadaten und Kerntext — befreit von Navigation, Werbung und Scripten.
Artikel extrahieren
Erkennt automatisch den Hauptinhalt — ignoriert Navigation, Sidebar, Footer und Werbung.
Intelligente Erkennung
Nutzt Readability-Algorithmus um den Hauptartikel von Boilerplate zu trennen — wie Safari Reader Mode.
Metadaten
Extrahiert Titel, Autor, Veröffentlichkeitsdatum und Beschreibung aus Meta-Tags und Schema.org.
Massenverarbeitung
Batch-Modus für hunderte URLs — ideal für Content-Migration, Research und Wettbewerbsanalyse.
⚙️ So funktioniert's
🔗
1. URL crawlen
Requests mit realistischem User-Agent — umgeht einfache Bot-Erkennung und Paywalls.
🧹
2. HTML bereinigen
Entfernt Scripte, Styles, Nav, Footer — behält nur den lesbaren Content-Bereich.
📝
3. Text formatieren
Markdown-Formatierung mit Überschriften, Absätzen und Listen — bereit zur Weiterverarbeitung.
📤
4. Export
Ausgabe als TXT, Markdown oder JSON — inklusive aller extrahierten Metadaten.
💻 Technische Umsetzung
🐍 URL-zu-Text Extraktor
import requests
from bs4 import BeautifulSoup
from urllib.parse import urlparse
import json
import re
class UrlToText:
def __init__(self):
self.session = requests.Session()
self.session.headers.update({
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
'AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36',
'Accept-Language': 'de-DE,de;q=0.9,en;q=0.8',
})
def fetch(self, url: str) -> tuple:
"""Holt HTML und extrahiert Titel + Text"""
response = self.session.get(url, timeout=15)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'html.parser')
# Metadaten extrahieren
title = self._get_title(soup)
description = self._get_meta(soup, 'description')
author = self._get_meta(soup, 'author')
date = self._get_date(soup)
# Hauptinhalt extrahieren
content = self._extract_content(soup)
return {
'url': url,
'domain': urlparse(url).netloc,
'title': title,
'description': description,
'author': author,
'date': date,
'content': content,
'word_count': len(content.split())
}
def _get_title(self, soup) -> str:
"""Extrahiert den Seitentitel"""
if soup.title:
return soup.title.string.strip()
h1 = soup.find('h1')
return h1.get_text().strip() if h1 else 'Kein Titel'
def _get_meta(self, soup, name: str) -> str:
"""Holt Meta-Tag Inhalt"""
tag = soup.find('meta', attrs={'name': name})
if not tag:
tag = soup.find('meta', attrs={'property': f'og:{name}'})
return tag['content'].strip() if tag and tag.get('content') else ''
def _get_date(self, soup) -> str:
"""Versucht das Publikationsdatum zu finden"""
for selector in ['datePublished', 'article:published_time', 'pubdate']:
tag = soup.find('meta', attrs={'property': selector})
if tag and tag.get('content'):
return tag['content']
time_tag = soup.find('time')
return time_tag.get('datetime', '') if time_tag else ''
def _extract_content(self, soup) -> str:
"""Extrahiert den Hauptinhalt mit Readability-Ansatz"""
# Entferne störende Elemente
for tag in soup(['script', 'style', 'nav', 'footer', 'header']):
tag.decompose()
# Finde Hauptinhalt (article, main oder größter Textblock)
article = soup.find('article') or soup.find('main') or soup
# Extrahiere Text mit Struktur
paragraphs = []
for elem in article.find_all(['h1', 'h2', 'h3', 'p', 'li']):
text = elem.get_text().strip()
if text and len(text) > 20: # Ignoriere zu kurze Texte
if elem.name.startswith('h'):
paragraphs.append(f"\n## {text}\n")
else:
paragraphs.append(text)
return '\n\n'.join(paragraphs)
def batch_extract(self, urls: list) -> list:
"""Extrahiert mehrere URLs"""
results = []
for url in urls:
try:
result = self.fetch(url)
results.append(result)
print(f"✓ {result['title'][:50]}... ({result['word_count']} Wörter)")
except Exception as e:
results.append({'url': url, 'error': str(e)})
print(f"✗ {url}: {e}")
return results
# Nutzung
extractor = UrlToText()
result = extractor.fetch('https://computerkumpel.de')
print(f"Titel: {result['title']}")
print(f"Wörter: {result['word_count']}")
print(f"Vorschau: {result['content'][:200]}...")
⚡ In 1–2 Tagen zum fertigen URL-Extraktor.
Web zu Text — automatisiert und maßgeschneidert?
Content-Migration, Research-Tool oder News-Aggregator — ich baue den passenden Extraktor. Jetzt anfragen.