html-datei auslesen und dann in eine andere html-datei schreiben

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.
anonym111

Ein freundliches "Hallo" an alle.

Vorab:
Ich weiß nix.

Was ich machen möchte:
Ich möchte den Inhalt einer html-datei auslesen und den dann in eine andere html-datei schreiben.

Was ich mir bisher erbastelt habe funktioniert leider nicht:

Code: Alles auswählen

>>> test=open("blubb.html","r")
>>> test.write(open("bla.html","w"))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: write() argument must be str, not _io.TextIOWrapper
>>> 


Was ich bräuchte:
Eine Erklärung warum "test.write" so nicht funktioniert und wie es aussehen müsste dass "test" in eine andere html-datei geschrieben wird.

Danke.
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@derda: Die Erklärung steht da ja im Grunde ziemlich deutlich. `write()` erwartet als Argument den Text der in die Datei geschrieben werden soll. Was da aber übergeben wird ist ein Dateiobjekt das durch `open()` entstanden ist. Wobei das interessant ist, das darauf zuerst geprüft wird, denn wenn man da eine Zeichenkette übergibt, bekommt man einen Fehler weil `write()` auf einer zum *lesen* geöffneten Datei natürlich auch nicht geht.

Dateien die man öffnet, sollte man auch wieder schliessen. Das geht nicht wenn man das Ergebnis von `open()` sofort verwendet und nicht an einen Namen bindet, damit man entweder manuell `close()` aufrufen kann, oder das per ``with``-Anweisung erledigt.

Beim öffnen von Textdateien sollte man immer explizit die Kodierung angeben. Die ist hier unbekannt. Und Text ist hier ja auch gar nicht relevant wenn man nur den Dateiinhalt 1:1 kopieren möchte.

`test` ist als Name nicht so wirklich sinnvoll. `source_file` und `target_file` wären beispielsweise passende Namen für die Dateiobjekte.

Dafür gibt es im `shutil`-Modul in der Standardbibliothek passende Funktionen. Das muss man nicht selbst programmieren.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
imonbln
User
Beiträge: 149
Registriert: Freitag 3. Dezember 2021, 17:07

derda hat geschrieben: Samstag 23. Dezember 2023, 17:16 Ich weiß nix.
Das ist nicht schlimm, so haben wir alle angefangen. Was hast du vor dagegen zu tun? Ein Python Tutorial zu lesen wäre zum Beispiel hilfreich.
derda hat geschrieben: Samstag 23. Dezember 2023, 17:16 Ich möchte den Inhalt einer html-datei auslesen und den dann in eine andere html-datei schreiben.
Das ist ein simpler Copy-Befehl, das liefert jedes Betriebssystem, wenn das alles ist, verzichte auf Python und nehme den Copy-Befehl, der bei deinem Betriebssystem schon dabei ist.


Was die Fehlermeldung angeht, üblicherweise wird ein Copy immer so implementiert, dass eine Datei zum Lesen aufgemacht wird und eine zum Schreiben und dann wird Chunkweise aus der ersten Datei gelesen und in die zweite geschrieben!
Natürlich haben Moderne Filesysteme meisten auch andere Möglichkeiten um das Copyeffizienter zu machen aber das vernachlässigen wir mal für den Augenblick.

Dateien sollten im Python immer als Kontext Manager geöffnet werden. Außerdem ergibt es Sinn das es eine Main-Funktion gibt und diese nur dann ausgeführt wird, wenn das Modul auch direkt ausgeführt wird. Weiter sollte eine Datei die im Textmodus geöffnet, wird immer ein encoding mitgeben werden, ansonsten ratet Python was schiefgehen kann. Eine minimales Copy der HTML-Dateien könnte also so aussehen. Allerding bin ich mir sicher, dass du mehr willst, das musst du dir dann aber selbst erarbeiten.

Code: Alles auswählen

#!/usr/bin/env python3


def main():
    with open("blubb.html", "r", encoding="utf-8") as fin:
        with open("bla.html", "w", encoding="utf-8") as fout:
            for line in fin:
                fout.write(line)


if __name__ == '__main__':
    main()

anonym111

Hui! Das geht ja fix hier!
__blackjack__ hat geschrieben: Samstag 23. Dezember 2023, 17:39 @derda: Die Erklärung steht da ja im Grunde ziemlich deutlich. `write()` erwartet als Argument den Text der in die Datei geschrieben werden soll. Was da aber übergeben wird ist ein Dateiobjekt das durch `open()` entstanden ist. Wobei das interessant ist, das darauf zuerst geprüft wird, denn wenn man da eine Zeichenkette übergibt, bekommt man einen Fehler weil `write()` auf einer zum *lesen* geöffneten Datei natürlich auch nicht geht.

Dateien die man öffnet, sollte man auch wieder schliessen. Das geht nicht wenn man das Ergebnis von `open()` sofort verwendet und nicht an einen Namen bindet, damit man entweder manuell `close()` aufrufen kann, oder das per ``with``-Anweisung erledigt.

Beim öffnen von Textdateien sollte man immer explizit die Kodierung angeben. Die ist hier unbekannt. Und Text ist hier ja auch gar nicht relevant wenn man nur den Dateiinhalt 1:1 kopieren möchte.

`test` ist als Name nicht so wirklich sinnvoll. `source_file` und `target_file` wären beispielsweise passende Namen für die Dateiobjekte.

Dafür gibt es im `shutil`-Modul in der Standardbibliothek passende Funktionen. Das muss man nicht selbst programmieren.
Ah, ok. Das macht sogar für mich Sinn. "`shutil`-Modul " schau ich mir an, danke für tipp.

imonbln hat geschrieben: Samstag 23. Dezember 2023, 17:44
derda hat geschrieben: Samstag 23. Dezember 2023, 17:16 Ich weiß nix.
Das ist nicht schlimm, so haben wir alle angefangen. Was hast du vor dagegen zu tun? Ein Python Tutorial zu lesen wäre zum Beispiel hilfreich.
derda hat geschrieben: Samstag 23. Dezember 2023, 17:16 Ich möchte den Inhalt einer html-datei auslesen und den dann in eine andere html-datei schreiben.
Das ist ein simpler Copy-Befehl, das liefert jedes Betriebssystem, wenn das alles ist, verzichte auf Python und nehme den Copy-Befehl, der bei deinem Betriebssystem schon dabei ist.
Ja, leider muss ich an dem eingelesenen Inhalt noch was ändern bevor ich es in die neue html schreibe. Sonst währe copy natürlich meine erste Wahl ;)
Was die Fehlermeldung angeht, üblicherweise wird ein Copy immer so implementiert, dass eine Datei zum Lesen aufgemacht wird und eine zum Schreiben und dann wird Chunkweise aus der ersten Datei gelesen und in die zweite geschrieben!
Natürlich haben Moderne Filesysteme meisten auch andere Möglichkeiten um das Copyeffizienter zu machen aber das vernachlässigen wir mal für den Augenblick.
Haha! Ich wurde durchschaut :) Man sieht an meinem "code" dass ich es mir genau so vorgestellt habe. Leider geht es so nicht.
Dateien sollten im Python immer als Kontext Manager geöffnet werden. Außerdem ergibt es Sinn das es eine Main-Funktion gibt und diese nur dann ausgeführt wird, wenn das Modul auch direkt ausgeführt wird. Weiter sollte eine Datei die im Textmodus geöffnet, wird immer ein encoding mitgeben werden, ansonsten ratet Python was schiefgehen kann. Eine minimales Copy der HTML-Dateien könnte also so aussehen. Allerding bin ich mir sicher, dass du mehr willst, das musst du dir dann aber selbst erarbeiten.

Code: Alles auswählen

#!/usr/bin/env python3


def main():
    with open("blubb.html", "r", encoding="utf-8") as fin:
        with open("bla.html", "w", encoding="utf-8") as fout:
            for line in fin:
                fout.write(line)


if __name__ == '__main__':
    main()

Aha! Dieses "with" kam in den Texten die ich mir so durchgelesen habe auch vor. Allerdings kam da immer noch so ein "content" mit vor und da bekam ich auch nix hin außer massen von error. Aber das Beispiel sieht anders aus als die welche ich bisher mit "with" gesehen habe, Da werde ich erst mal mit rum experimentieren.

Danke euch für die schnelle Hilfe. :)

Das reicht mir im Moment auch. Da kann ich mit arbeiten und testen.
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@immobln: Naja, `fin` und `fout` sind als Namen jetzt auch nicht so wirklich schön.

@all: Etwas einfacher wäre es wenn man die `writelines()`-Methode verwendet:

Code: Alles auswählen

#!/usr/bin/env python3


def main():
    with open("blubb.html", "r", encoding="utf-8") as lines:
        with open("bla.html", "w", encoding="utf-8") as target_file:
            target_file.writelines(lines)


if __name__ == "__main__":
    main()
Da die Quelldatei gar nicht UTF-8 kodiert vorliegen muss, kann das zu Fehlern/Programmabbruch führen. Man muss aber auch gar nicht über die Textdarstellung gehen, sondern würde hier einfach die Datei als Binärdatei komplett einlesen und wieder schreiben können:

Code: Alles auswählen

#!/usr/bin/env python3


def main():
    with open("blubb.html", "rb") as source_file:
        with open("bla.html", "wb") as target_file:
            target_file.write(source_file.read())


if __name__ == "__main__":
    main()
Mit dem `pathlib`-Modul kann man sich das öffnen und schliessen sparen, weil `Path`-Objekte da praktische Methoden bieten:

Code: Alles auswählen

#!/usr/bin/env python3
from pathlib import Path


def main():
    Path("bla.html").write_bytes(Path("blubb.html").read_bytes())


if __name__ == "__main__":
    main()
Die beiden letzten Varianten haben den Nachteil, dass sie bei Dateien die (deutlich) kleiner als der Arbeitsspeicher sind, recht problemlos funktionieren, bei richtig grossen Dateien aber nicht. Deshalb kopiert man in der Regel Blöcke mit einer Grösse die bestimmt in den Arbeitsspeicher passen. Zum Beispiel in Blöcken von 64 KiB:

Code: Alles auswählen

#!/usr/bin/env python3


def main():
    with open("blubb.html", "rb") as source_file:
        with open("bla.html", "wb") as target_file:
            chunks = iter(lambda: source_file.read(64 * 1024), b"")
            target_file.writelines(chunks)


if __name__ == "__main__":
    main()
Am einfachsten (und sicherer) ist es aber das schon erwähnte `shutil`-Modul zu verwenden, statt das Rad selbst neu zu erfinden:

Code: Alles auswählen

#!/usr/bin/env python3
import shutil


def main():
    shutil.copy("blubb.html", "bla.html")


if __name__ == "__main__":
    main()
Das ist auch gegebenenfalls effizienter, weil es unter bestimmten Umständen auf ausgewählten Betriebssystemen andere, effizientere Wege für das kopieren verwendet. Und es sichert über eine Ausnahme dagegen ab, das Quelle und Ziel die selbe Datei beschreiben. Dazu muss ja nicht zwingend der Name gleich sein, es gibt ja beispielsweise Dateisysteme mit harten Links wo verschiedene Pfade auf die physisch selbe Datei verweisen können. Das prüfen die ganzen anderen Varianten ja nicht.

@derda: `content` kommt beispielsweise als Attribut bei der `requests`-Bibliothek bei Serverantworten vor, wenn man das HTML (oder auch was anderes) per HTTP von einem Webserver holt. Ansonsten kann man den eingelesenen Inhalt einer Datei natürlich auch so nennen, wenn man den an einen sinnvollen Namen binden möchte.

Wenn man an HTML etwas ändern möchte, dann üblicherweise nicht am Text selbst, sondern mit Hilfe eines HTML-Parsers der die Struktur des Dokumentes erfasst. `BeautifulSoup` ist da recht beliebt. Dem Parser würde ich auch die Binärdaten aus der Datei übergeben und nicht den Text, denn wie gesagt, die Kodierung muss nicht die automagisch von Python ”geratene” sein, und HTML bietet die Möglichkeit die Kodierung in der Datei selbst anzugeben. Da kann sich ein HTML-Parser die Information her holen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
anonym111

Haha, ist das klasse! Da sitz ich den ganzen Tag am Rechner, surfe durch "tutorials", bekomme nix gebacken, und dann bin ich hier und bekomme mit ein paar posts mal so richtig Sand aus den Augen gepustet :lol: Zumindest glaube ich die "Struktur" wie Python arbeitet zu erkennen. Und das ist schon mal geil.

Shutil-Modul hab ich mir schon angeschaut, ist aber für mein Vorhaben glaub nicht so geeignet. Es ist auf jeden Fall gut wenn man mal auf dem Server richtig aufräumen will, also auf File- und Ordnerebene. Aber ich muss ja noch die ausgelesene html inhaltlich bearbeiten bevor ich das Ergebnis in die neue html schreibe.

"chunks" gefällt mir weil man da anscheinend auch den Datenstrom begrenzen kann, aber ist für meinen Fall eher nichts weil ich brauch den Text. Dieses "path" scheint wie der Befehl "dd" in Linux zu funktionieren, wäre aber auch nichts für meinen Fall.

"target_file.write(source_file.read())" kommt so in die Richtung wie ich es eigentlich machen wollte, aber den "with" nicht verstanden hatte. Das mit dem "with" funktioniert, habe ich jetzt auch erfolgreich angewendet. Kann also html-1 in html-2 schreiben. Jetzt kommt die "Inhaltsmanipulation" auf dem weg von html-1 zu html-2 dran.
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Dann schau dir mal HTML-Parser wie BeautifulSoup an.

Vielleicht erzählst du auch noch 2-3 Sätze dazu, was du eigentlich insgesamt vor hast, dann kann man anders Tipps geben.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
anonym111

Kebap hat geschrieben: Samstag 23. Dezember 2023, 20:50 Dann schau dir mal HTML-Parser wie BeautifulSoup an.

Vielleicht erzählst du auch noch 2-3 Sätze dazu, was du eigentlich insgesamt vor hast, dann kann man anders Tipps geben.
BeautifulSoup klingt interessant und scheint auch zum Teil das machen zu können was ich mit Python machen will.

Die Ausgangslage:

Ich habe hier Forumsdaten und zwar habe ich die Threads mal mit "ganze webseite speichern" Seite für Seite des Threads gezogen. Was soweit ok ist weil ich diese einzelnen Seiten jetzt alle Lokal habe inclusive aller Bilder ect. Ich kann mir den Thread und in diesem Tread jede einzelne Seite und da jeden Post so anschauen wie online - aber lokal, also auch offline. Jetzt hat es sich ergeben dass die Posts wieder in einem anderen Forum/Thread wieder online sollen. Und da war meine Idee ich öffne jede einzelne Threadseite, welche mir als html-datei (plus Ordner in dem die Bilder sind) vorliegt, ziehe daraus die einzelnen Post auf dieser Seite, packe diese einzelnen Posts in jeweils eigenen Ordner als html-datei inclusive der Bilder die eventuell in diesem Post gepostet wurden. Und diese einzelnen Posts dann automatisiert in den Thread in dem neuen Forum einzeln hochladen und die eventuell vorhandenen Bilder in diesem neuen Serverposts einbinden/uploaden und das pro Post dann noch optisch bissel ordentlich angeordnet......ich glaub ich hab einen an der Klatsche :lol:
anonym111

BeautifulSoup ist gut. Ich kann schön die <div>s anspringen in denen die einzelnen Posts drin hängen und raus ziehen. Das bringt mich echt weiter. Danke.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Jetzt hat es sich ergeben dass die Posts wieder in einem anderen Forum/Thread wieder online sollen.
Formell gesehen dabei noch relevant, unter welcher Lizenz die Posts im Ausgangsforum $FOO stehen und welche Lizenz das Zielforum $BAR hat. Könntest du weitestgehend ignorieren, wenn du die Ausgangspost im Zielforum als Zitat unter Angabe / Link der Quelle postest. Ansonsten ist es halt... sagen wir mal... fragwürdig, "geistiges Eigentum" aus Forum $FOO unter eigener Flagge in Forum $BAR zu posten.

Ob dich dafür jemals einer verklagen / belangen wird ist eine andere Frage. Aber in je größerem Maßstab du das machst, desto wahrscheinlicher wird das halt. Die moralische Abschätzung davon und die Risikoabschätzung liegt bei dir.

Gruß, noisefloor
anonym111

noisefloor hat geschrieben: Sonntag 24. Dezember 2023, 11:18 Hallo,
Jetzt hat es sich ergeben dass die Posts wieder in einem anderen Forum/Thread wieder online sollen.
Formell gesehen dabei noch relevant, unter welcher Lizenz die Posts im Ausgangsforum $FOO stehen und welche Lizenz das Zielforum $BAR hat. Könntest du weitestgehend ignorieren, wenn du die Ausgangspost im Zielforum als Zitat unter Angabe / Link der Quelle postest. Ansonsten ist es halt... sagen wir mal... fragwürdig, "geistiges Eigentum" aus Forum $FOO unter eigener Flagge in Forum $BAR zu posten.

Ob dich dafür jemals einer verklagen / belangen wird ist eine andere Frage. Aber in je größerem Maßstab du das machst, desto wahrscheinlicher wird das halt. Die moralische Abschätzung davon und die Risikoabschätzung liegt bei dir.

Gruß, noisefloor
Na, es ist so:

Das Forum ist auf einem Server in den USA und wird von einem Pakistani betrieben. Dort wurde hauptsächlich über Pakistan und umliegende Länder diskutiert. Der Forumsbesitzer selbst lebt auch in den USA. Seine Familie lebt aber in Pakistan. Und die wurde unter Druck gesetzt weil in diesem Forum auch frei über politische Ereignisse in Pakistan diskutiert wurde. Und da er seine Familie nicht gefährden will, da macht er das Forum komplett zu, löscht die Domäne. Er hat aber erlaubt dass wir User uns die Threads welche wir haben wollen runter ziehen dürfen. Spätestens bis 31.12.23 ist dann alles weg. Er selber ist auch nicht mehr erreichbar. Inzwischen haben einige User neues Forum auf gemacht damit die über Jahrzehnte gesammelten Beiträge nicht verloren gehen. Die sollen jetzt dorthin übertragen werden. Und ich habe eine der vielen Sektionen mit einigen Threads übernommen und gesichert.

Ich habe auch schon, dank Euch, einige Fortschritte erziehlt, hänge aber an einem Punkt und zwar dass ".write" nur ein Argument übernehmen kann. Ansonsten macht das Programm das was es soll, wenn es nur ein Argument hat.

Code: Alles auswählen

#!/usr/bin/env python3
from bs4 import BeautifulSoup
fin=open("Iranian Air Defense Systems Page 477 Pakistan Defence.html", "r", encoding="utf-8")
fout=open("blabla.html", "w", encoding="utf-8")
soup=BeautifulSoup(fin,"html.parser")
div_text=soup.find("div",{"class":"structItem-minor"}).get_text()
div_text1=soup.find("div",{"class":"block-container lbContainer"}).get_text()
div_text2=soup.find("div",{"class":"message-cell message-cell--main"}).get_text()
div_text3=soup.find("div",{"class":"block-body js-replyNewMessageContainer"}).get_text()
fout.write(div_text,div_text1,div_text2,div_text3)
Und die Fehlermeldung:

Code: Alles auswählen

File "/home/as/Downloads/Air-Defense/neu.py", line 10, in <module>
    fout.write(div_text,div_text1,div_text2,div_text3)
TypeError: TextIOWrapper.write() takes exactly one argument (4 given)
Welche Möglichkeut gibt es noch außer ".write"? Sonst funktioniert ja alles wenn ich nur ein Argument übergebe. Ich möchte aber mehrere übergeben.

(edit: Falls es Jemand interessiert, es geht um dieses Forum hier
https://defence.pk/threads/closure-anno ... te.781487/)
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Welche Möglichkeut gibt es noch außer ".write"? Sonst funktioniert ja alles wenn ich nur ein Argument übergebe. Ich möchte aber mehrere übergeben.
Programmieren ist nicht raten und programmieren ist kein "ich wünsch mir, dass die API anders wäre". `write` nimmt halt genau ein Argument. Im gegebenen Fall musst du halt, bevor die in die Datei schreibst, deine X Textschnipsel zu einem zusammenfassen. Davon ausgehend, dass `div_textX` Strings sind ist das ja auch einfach. Wenn du nicht weißt wie -> nochmal das Python Tutorial durcharbeiten, das sind halt Grundlagen, die man drauf haben sollte.

Abgesehen davon halte ich deinen aktuellen Ansatz für zu simple, weil der nur Inhalt und keine Formatierung berücksichtigt. Die meisten (mir bekannten) Forum akzeptieren #ausgründen kein HTML als Eingabe, sondern Markup in irgendeiner Form. Das Forum hier z.B. BBCode, anderen Foren haben Markdown, andere Creole Markup oder eigene Implementierungen. D.h. wenn du die Posts aus diesem omniösen anderen Forum halbwegs lesbar halten willst musst du IMHO minimal aus dem HTML die korrekte Syntax für das Zielforum für Bilder, Links, Codeblöcke und Absätze generieren.

Je nach dem, wie populär das Format des Zielforums ist gibt es vielleicht schon fertige Konverter für HTML -> Markup $FOO.

Gruß, noisefloor
anonym111

noisefloor hat geschrieben: Sonntag 24. Dezember 2023, 13:17 Hallo,
Welche Möglichkeut gibt es noch außer ".write"? Sonst funktioniert ja alles wenn ich nur ein Argument übergebe. Ich möchte aber mehrere übergeben.
Programmieren ist nicht raten und programmieren ist kein "ich wünsch mir, dass die API anders wäre". `write` nimmt halt genau ein Argument. Im gegebenen Fall musst du halt, bevor die in die Datei schreibst, deine X Textschnipsel zu einem zusammenfassen. Davon ausgehend, dass `div_textX` Strings sind ist das ja auch einfach. Wenn du nicht weißt wie -> nochmal das Python Tutorial durcharbeiten, das sind halt Grundlagen, die man drauf haben sollte.

Abgesehen davon halte ich deinen aktuellen Ansatz für zu simple, weil der nur Inhalt und keine Formatierung berücksichtigt. Die meisten (mir bekannten) Forum akzeptieren #ausgründen kein HTML als Eingabe, sondern Markup in irgendeiner Form. Das Forum hier z.B. BBCode, anderen Foren haben Markdown, andere Creole Markup oder eigene Implementierungen. D.h. wenn du die Posts aus diesem omniösen anderen Forum halbwegs lesbar halten willst musst du IMHO minimal aus dem HTML die korrekte Syntax für das Zielforum für Bilder, Links, Codeblöcke und Absätze generieren.

Je nach dem, wie populär das Format des Zielforums ist gibt es vielleicht schon fertige Konverter für HTML -> Markup $FOO.

Gruß, noisefloor
Alles klar. Guten Rutsch.
anonym111

Haaahahahaha "fout.write" kann doch mehrere Argumente. Und man braucht nicht mal join oder Dergleichen.

So, das war es aber für mich hier. Allen einen guten Rutsch. In einer Stunde - 15:15 - lösche ich meinen Account.
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

derda hat geschrieben: Sonntag 24. Dezember 2023, 14:17 Haaahahahaha "fout.write" kann doch mehrere Argumente.
Haaahahahaha - Das halte ich für ein Gerücht.
Noisefloor hat schon Recht.
anonym111

sparrow hat geschrieben: Sonntag 24. Dezember 2023, 14:40
derda hat geschrieben: Sonntag 24. Dezember 2023, 14:17 Haaahahahaha "fout.write" kann doch mehrere Argumente.
Haaahahahaha - Das halte ich für ein Gerücht.
Noisefloor hat schon Recht.
Jaja, die Gerüchteküche schon wieder

Code: Alles auswählen

#!/usr/bin/env python3
from bs4 import BeautifulSoup
fin=open("Iranian Air Defense Systems Page 477 Pakistan Defence.html", "r", encoding="utf-8")
fout=open("blabla.html", "a", encoding="utf-8")
soup=BeautifulSoup(fin,"html.parser")
div_text=soup.find("div",{"class":"structItem-minor"}).get_text()
div_text1=soup.find("div",{"class":"message-userContent lbContainer js-lbContainer"}).get_text()
div_text2=soup.find("div",{"class":"message-cell message-cell--main"}).get_text()
#div_text3=soup.find("div",{"class":"bbImageWrapper  js-lbImage"}).get_text()

fout.write((div_text1)+(div_text)+(div_text2))
Und das wars dann. Tschü.
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Ja, das ist ein Argument, das aus schlecht zusammengestückelten Zeichenketten besteht.
Das verrät dir en gutes Tutorial.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

derda hat geschrieben: Sonntag 24. Dezember 2023, 14:17 Haaahahahaha "fout.write" kann doch mehrere Argumente. Und man braucht nicht mal join oder Dergleichen.
Doch, + ist wie join. Dieses Leute, die man um Hilfe bittet, für blöd zu erklären, wenn man selbst völlig ahnungslos ist - funktioniert das irgendwo anders gut?
anonym111

__deets__ hat geschrieben: Sonntag 24. Dezember 2023, 15:32
derda hat geschrieben: Sonntag 24. Dezember 2023, 14:17 Haaahahahaha "fout.write" kann doch mehrere Argumente. Und man braucht nicht mal join oder Dergleichen.
Doch, + ist wie join. Dieses Leute, die man um Hilfe bittet, für blöd zu erklären, wenn man selbst völlig ahnungslos ist - funktioniert das irgendwo anders gut?
Mach doch mal anstatt "print" mit "write"

https://www.python-lernen.de/string-methode-join.htm

Hmm, weißt du wo ich den Account-Löschbutton finde? Ich will meinen Acc löschen. Steht mir ja per Gesetz zu.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

https://docs.python.org/3/library/io.ht ... Base.write ist da recht eindeutig. Warum auch immer du glaubst diesen falschen Punkt weiter abreiten zu müssen 🤷🏼‍♂️

Zur rechtskonformen Löschung deines Accounts bitte an Damaskus wenden.
Antworten