Für eine Überarbeitung bestehender WordPress Beiträge wollte ich die Beiträge sorgenfrei in ein anderes System exportieren, um dort Änderungen an den Inhalten vorzunehmen. Normalerweise kann man das auch direkt im aktiven WordPress Backend einer Seite erledigen. Nur waren dabei auch Plugin-Tests und diverse Selfmade-Algorithmen im Spiel, die man lieber nicht am Live-System ausprobiert. Das nötige Python-Skript für einen Export lässt beliebige WordPress Blogs in ein WordPress-System transferieren. Die Struktur des Python Notebooks erlaubt auch zusätzliche Addons.
Export vorbereiten: WordPress lokal installieren (empfohlen)
Beim Programmieren einer automatisierten Content Analyse von bestehenden WordPress Beiträgen, ist der Exporter an sich als Kuppelprodukt entstanden. Mit dem Exporter kann der RSS-Feed eines beliebigen WordPress Blogs ausgelesen und in ein WordPress System importiert werden.
Grundsätzlich: Wo das System letztendlich installiert wird, ist egal. Egal wird es dann nicht, wenn man die Sicherheitsfrage stellt. Aus Sicherheitsgründen empfehle ich ausdrücklich den Import in ein geschütztes Backend auf einer Subdomain (Blockieren Sie Suchmaschinen und externe Zugriffe). Das Skript verwendet einen Zugang per xmlrpc.php. Es ist bekannt, dass dies ein Sicherheitsrisiko darstellt. Eine lokale WordPress-Installation per XAMP, MAMP oder wie sie auch immer heißen mögen, wird empfohlen.
Das Skript für einen schnellen WordPress Export
🔥 Im ersten Schritt müssen die Daten eingegeben werden:
Falls es keinen Client gibt zum Bearbeiten und Ausführen von Jupyter Notebooks (Ich empfehle an dieser Stelle dringend Anaconda), dann kann das auch als einfaches Python-Skript ausgeführt werden. Diese Libraries müssen installiert werden:
# Importe from bs4 import BeautifulSoup import urllib.request from urllib.error import HTTPError from wordpress_xmlrpc import Client, WordPressPost from wordpress_xmlrpc.methods.taxonomies import * from wordpress_xmlrpc.methods.posts import * from wordpress_xmlrpc.methods.users import * from wordpress_xmlrpc.methods import * from prettytable import PrettyTable import nltk import re import html
Nun zum Code. Im ersten Schritt muss man selbst aktiv werden. Die folgenden Daten müssen hinterlegt werden:
# DATEN EINTRAGEN ######################################################################################## # Welche Domain soll es denn sein? DOMAIN = "DOMAIN_EINTRAGEN" # http://example.com # Domain zum Backend? BACKEND_URL = "BACKEND_DOMAIN_EINTRAGEN" # http://backend.example.com # WordPress Login für Backend wp_user = "USER" # username für WordPress Backend wp_pass = "PASSWORT" # passwort für WordPress Backend ########################################################################################
Dieser Abschnitt bereitet eine Duplikatsprüfung vor. Damit nicht Duplikate im Backend landen, ziehe ich mir die aktuellen Beiträge aus dem Backend und integriere eine Funktionsaufruf später in der Import-Funktion, um Duplikate zu vermeiden.
# Function: Duplikats-Check: Wir wollen nicht den selben Artikel mehrfach im Backend. ######################################################################################## def noduplicate(candidate): if candidate in old_posts: return False return True ######################################################################################## # Function: Alle bestehenden Titles in old_posts ablegen ######################################################################################## i = 1 while True: try: with urllib.request.urlopen(DOMAIN + '/feed/?paged=' + str(i)) as response: feedXYZ = response.read() soup = BeautifulSoup(feedXYZ, 'xml') for item in soup.find_all('item'): title = item.title.string old_posts.append(title) i = i + 1 except (HTTPError): break ########################################################################################
Damit wir auch alle Artikel erhalten, loope ich über eine einfache Variable i über die Paginierung des RSS-Feeds.
Im nächsten Abschnitt werden die Artikel in das Backend importiert:
# Schleife, um (neue) Artikel in das Backenend aufzunehmen ######################################################################################## j = 1 while True: try: with urllib.request.urlopen(DOMAIN + '/feed/?paged=' + str(j)) as response: feedXYZ = response.read() soup = BeautifulSoup(smokevoteFeed, 'xml') for item in soup.find_all('item'): pair = (item.title.string, item.encoded) if (noduplicate(item.title.string)): new_posts.append(pair) j = j + 1 except (HTTPError): break ######################################################################################## # function: WordPressXport ######################################################################################## def WordPressXport(): for pair in new_posts: post = WordPressPost() post.title = str(pair[0]) post.content = str(pair[1]) post.terms_names = {'post_tag': ['rss-export']} post.post_status = 'publish' wordpressClient.call(NewPost(post)) ########################################################################################
Am Schluss wird eine Tabelle exemplarisch generiert, die Daten zu den Beiträgen präsentiert. In der Version auf Github sind drei Standard-Abfragen implementiert.
Weitere Untersuchungsmetriken sind beispielsweise:
- Termfrequenzen im Textkorpus
- Anzahl der Wörter im Textkorpus (muss um HTML-Tags bereinigt werden!!!)
- Anzahl der Elemente zählen (img, p,..)
- Anzahl der Links innerhalb des Textkorpus
- In Kombination mit SERP Scrapern inverse Frequenzen berechnen
- Berechnung von Linkprofilen untereinander
Das Jupyter Notebook gibt’s hier github.com/onlinemarketingscience/wordpress-exporter.
Bereits mit 14 Jahren absolvierte Jörs sein erstes Schulpraktikum bei der Deutschen Telekom mit Aspekten aus der Suchmaschinenoptimierung. Seitdem erfolgten mehrere berufliche Stationen sowie Aktivitäten als freiberuflicher Webdesigner. Er hat an der Technischen Universität in Darmstadt einen B.Sc. in Wirtschaftsinformatik abgeschlossen. Seit 2019 ist Jörs Lehrbeauftragter für Online-Marketing an der Hochschule Darmstadt sowie Honorardozent für Marketing Automation & Datenintegration an der Hochschule Fresenius. Marvin Jörs ist Gründer und geschäftsführender Gesellschafter der Skyscraper Marketing GmbH.
Wo bin ich?