HTML Inhalt aktualisieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
MarcelF6
User
Beiträge: 226
Registriert: Samstag 3. März 2012, 21:30

Guten Abend

Ich habe (reinen) Text aus einem HTML-File exportiert und extern korrigieren lassen. Mittlerweile habe ich den korrigierten Text zurück erhalten und möchte ihn gerne wieder ins HTML-File einfügen.
Dazu eine Frage: Wie kann ich elegant die Wörter im HTML-File ändern, welche auch der Korrektor geändert hat (bei den Korrekturen handelt es sich lediglich um Verbesserungen an einzelnen Wörtern)?
Das HTML-File ist relativ gross und beinhaltet, wie das typisch ist, viele Formatierungsangaben.

Besten Dank für die Inputs.
MarcelF6
User
Beiträge: 226
Registriert: Samstag 3. März 2012, 21:30

(ich frage das hier, weil ich das Vorhaben mit einem python-Skript lösen würde...)
Boa
User
Beiträge: 190
Registriert: Sonntag 25. Januar 2009, 12:34

Im Voraus: Das zu automatisieren wird mehr Aufwand als es manuell zu machen. Zudem wirst du es nicht schaffen eine wirklich Gute Lösung zu programmieren. Das liegt daran, dass dein Korrektor höchst wahrscheinlich auch Mal ein paar mehr Wörter ändert, löscht oder einfügt. Daher wäre es sinnvoll ihm einfach die HTML Datei zu geben oder erst mal auf die Formatierung zu verzichten, bis dein Text fertig ist. Wenn er wirklich nur Wörter abändert kannst du es wie folgt versuchen: (ungetestet)

Code: Alles auswählen

from BeautifulSoup import BeautifulSoup

#corrected_text = ...
def get_word(text):
    for word in text.split():
        yield word

correct_word = get_word(corrected_text)
with open('my.html', 'r') as content_file:
    content = content_file.read()
html = BeautifulSoup(test_content)
for t in html.findAll(text=True):
    text = unicode(t)
    replaced_text = ''
    for word in text.split():
        replaced_text += correct_word.next() 
    t.replaceWith(replaced_text)

print html 
MarcelF6
User
Beiträge: 226
Registriert: Samstag 3. März 2012, 21:30

Hallo Boa,

nein, er hat wirklich nur einzelne Worte geändert (z.B. zusätzliches 'e') oder was auch immer. Es ging nur um die Rechtschreibung, Formulierungen etc. wurden nicht berücksichtigt.
Ich habe eben auch gedacht, dass es manuell evtl. schneller geht. Ich schaue mir deinen Code morgen an, der sieht ziemlich elegant aus :)

Besten Dank,
Marcel
BlackJack

@MarcelF6: Auch bei Rechtsschreibkorrektur kann es vorkommen das sich die Anzahl der Worte ändert. Manchmal schreibt man Worte doppelt, oder man vergisst irgendwo ein Wort, wie beispielsweise einen Artikel, oder die Reihenfolge stimmt nicht. Das sind ja noch keine inhaltlichen Änderungen wenn ein Korrektor dann Worte löscht, ergänzt, oder umsortiert.
MarcelF6
User
Beiträge: 226
Registriert: Samstag 3. März 2012, 21:30

Korrekt.
Aber: Bei dem HTML-File, das ich ihm gegeben habe, handelt es sich um einen Scan eines (alten) Buches. D.h. er musste lediglich Worte korrigieren, die nicht korrekt gescannt wurden (zB. ein "i" statt ein "l" etc.).
Daher sind wirklich nur einzelne Worte geändert worden und weder Worte hinzugefügt noch gelöscht worden. :)
BlackJack

@Boa: Die `get_word()`-Funktion ist umständlich. Und vielleicht auch ein wenig Overkill. :-)

Code: Alles auswählen

def iter_words(text):
    return iter(text.split())
MarcelF6
User
Beiträge: 226
Registriert: Samstag 3. März 2012, 21:30

Hallo miteinander

Herzlichen Dank für alle Tipps und Vorschläge.
Ich habe den Code mittlerweile getestet, etwas angepasst...aber muss sagen, ihr hattet Recht. Es gibt gewisse Fälle, wo das Ganze nicht so klappt, wie man sich das vorstellt.
Viel fehlerunanfälliger wäre also, wenn ich das alle Seiten neu einspiele.
Die korrigierten Seiten sind im Web gespeichert. Der Quelltext lässt sich gut darstellen.
Jetzt meine Frage: Wie kann man mit einem python-Skript eine Liste von Websites (der Unterschied der URL besteht immer nur in den Seitenangaben) besuchen und deren Inhalt in EIN File speichern?
Dabei gilt es zu beachten:
Es soll nur der Inhalt im Tag "<html xmlns = "http://www.test.de"> betrachtet werden und ausser dem Inhalt von <head> alles in das File kopiert werden. Dabei soll aber das Markup für LiveEdits ([: ... :]) auch gerade ignoriert werden.
Nach jeder Seite (ausser der letzen) soll ein Zeilenumbruch, das Tag <hr> und nochmals ein Zeilenumbruch eingefügt werden.
Die Website-Liste könnte man auch anders machen: Man gibt die Grundadresse an, iteriert ab der ersten Seite bis der Quelltext leer ist.

Lässt sich da was machen mit python?
Ich habe das nun relativ ausführlich beschrieben...ich hoffe, dass es nicht schon fast langweilig-ausführlich ist :)
Besten Dank für eure Hilfe und Tipps :)
MarcelF6
User
Beiträge: 226
Registriert: Samstag 3. März 2012, 21:30

Hätte hierzu vielleicht jemand eine Idee / ein Vorschlag?
Besten Dank, Marcel
Sirius3
User
Beiträge: 17781
Registriert: Sonntag 21. Oktober 2012, 17:20

Hallo MarcelF6,

ich würde mal damit anfangen, eine Webseite zu laden und die relevanten Inhalte herausfiltern.
dann in einer Schleife diese Funktion mit verschiedenen Urls aufrufen
und das Ergebnis in eine Datei schreiben.

Auf welche dieser Ideen wärst Du mit ein bißchen nachdenken nicht selbst gekommen?
MarcelF6
User
Beiträge: 226
Registriert: Samstag 3. März 2012, 21:30

Doch, auf diese Idee bin ich natürlich scho auch gekommen :)
Nur: Wie sehen die import-statements aus, um Daten aus Websites herauszufiltern?
Also wie gesagt: die "Grundadresse" bleibt immer gleich, es ändern jedweils nur integers an der URL. Wie aber kann ich den Inhalt der URL herausfiltern?
Das habe ich noch nie gemacht, daher wäre ich um jede Hilfe sehr dankbar.
BlackJack

@MarcelF6: Mit ``import``-Anweisungen kann man keine Daten aus Webseiten filtern. Dazu muss man eine passende Bibliothek importieren und dann entsprechend der Dokumentation zu dieser Bibliothek die Daten verarbeiten. Zwei geeignete Bibliotheken sind `lxml.html` und `BeautifulSoup`.

Bei der Frage mit der URL kommt es darauf an bei welchem Teil der URL die Zahlen stehen, ob man mit einfachen Zeichenkettenoperationen oder doch besser `urllib` zur Hilfe nimmt.
Antworten