Seite 1 von 1
Das Programm lädt nicht Zeile für Zeile die Zeilen :(
Verfasst: Donnerstag 27. März 2014, 12:56
von xXBlueWhiteXx
Guten Nachmittag,
ich habe folgendes Problem. Ich muss eine HTML Datei "Zeile für Zeile" einlesen , jedoch
tut das Programm dies nicht.
Programm:
lines = [line.strip() for line in open('/var/www/vp.html')]
print lines
Da der HTML Code zu lang ist, stelle ich es mal so da, wie es ausgegeben wird.
['<HTML>sadasdsadasd</HTML><a>hhuuihui</a><h1>jaiusdaud</h1>']
Bei einer txt Datei funktioniert dies jedoch. Ich habe das blöde Gefühl , das das nicht bei
HTML Dateien möglich ist , stimmt das ?
Danke schon mal im voraus
Mit freundlichen Grüßen
xXBlueWhiteXx
Re: Das Programm lädt nicht Zeile für Zeile die Zeilen :(
Verfasst: Donnerstag 27. März 2014, 13:15
von /me
xXBlueWhiteXx hat geschrieben:['<HTML>sadasdsadasd</HTML><a>hhuuihui</a><h1>jaiusdaud</h1>']
Mal abgesehen davon, dass das kein gültiges HTML ist, scheint das Ergebnis korrekt zu sein. Ich gehe dabei davon aus, dass die Datei einfach keine Zeilenumbrüche enthält.
Re: Das Programm lädt nicht Zeile für Zeile die Zeilen :(
Verfasst: Donnerstag 27. März 2014, 13:24
von Leonidas
xXBlueWhiteXx hat geschrieben:Bei einer txt Datei funktioniert dies jedoch. Ich habe das blöde Gefühl , das das nicht bei
HTML Dateien möglich ist , stimmt das ?
Nein, das stimmt natürlich nicht, da eine HTML-Datei
auch eine Textdatei ist und sofern Python da Zeilenumbrüche findet, kann man dort auch über die Zeilen iterieren.
Re: Das Programm lädt nicht Zeile für Zeile die Zeilen :(
Verfasst: Donnerstag 27. März 2014, 13:26
von BlackJack
@xXBlueWhiteXx: Öffne die Datei doch einfach mal in einem Texteditor, dann siehst Du ja wieviele Zeilen der Quelltext hat und was da jeweils drin steht.
Warum willst Du das denn überhaupt machen? Was ist das Ziel von dieser Aktion?
Re: Das Programm lädt nicht Zeile für Zeile die Zeilen :(
Verfasst: Donnerstag 27. März 2014, 13:39
von cofi
BlackJack hat geschrieben:Warum willst Du das denn überhaupt machen? Was ist das Ziel von dieser Aktion?
Und ergaenzend: Warum benuzt du keinen HTML-Parser?
HTML (wie auch XML) sollte man nicht als Textdateien behandeln und erwarten, dass man richtige Ergebnisse bekommt oder am Ende wieder valide HTML Dateien bekommt.
Und um $Gottes Willen, benutze keine RegExp dafuer um mit der Tag-Struktur umzugehen.
Zugegeben, da du scheinbar schon mit kaputtem HTML anfaengst ...
Re: Das Programm lädt nicht Zeile für Zeile die Zeilen :(
Verfasst: Donnerstag 27. März 2014, 14:04
von xXBlueWhiteXx
Danke erstmal für die schnelle Antwort
Ich weiß, dass das keine richtige HTML Datei ist. Ich habe ja geschrieben, dass ich wegen der länge mir eben was ausgedacht habe.
Der richtige Quellcode ist dieser:
Code: Alles auswählen
<HTML>
<HEAD>
<TITLE>Vertretungsplan</TITLE>
<link rel="stylesheet" href="stupas.css" type="text/css">
</HEAD>
<BODY BGCOLOR="#CCFFFF"><BR>
<BR>
<BR>
<FONT FACE="Arial" SIZE="0"></FONT>
<FONT FACE="Arial" SIZE="0"><H3>Vertretungsplan für Dienstag, 18. März 2014</H3></FONT><HR>
<HR><TABLE BORDER=1 BGCOLOR="#99CCFF">
<TR>
<TD COLSPAN = 5 BGCOLOR="#3399FF"><B><FONT FACE="Arial" SIZE="0">1.Std.</FONT></B></TD>
</TR>
<TR>
<TD>
<FONT FACE="Arial" SIZE="0">1.Std.</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">STW TTM8b M R9b</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">==></FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">HUM</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">Schüler zu HUM</FONT>
</TD>
</TR>
<TR>
<TD COLSPAN = 5 BGCOLOR="#3399FF"><B><FONT FACE="Arial" SIZE="0">2.Std.</FONT></B></TD>
</TR>
<TR>
<TD>
<FONT FACE="Arial" SIZE="0">2.Std.</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">STW TTM8b M R9b</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">==></FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">HUM</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">Schüler zu HUM</FONT>
</TD>
</TR>
<TR>
<TD COLSPAN = 5 BGCOLOR="#3399FF"><B><FONT FACE="Arial" SIZE="0">3.Std.</FONT></B></TD>
</TR>
<TR>
<TD>
<FONT FACE="Arial" SIZE="0">3.Std.</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">STW 09B M R9b</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">JAC</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">HALLO</FONT>
</TD>
</TR>
<TR>
<TD COLSPAN = 5 BGCOLOR="#3399FF"><B><FONT FACE="Arial" SIZE="0">4.Std.</FONT></B></TD>
</TR>
<TR>
<TD>
<FONT FACE="Arial" SIZE="0">4.Std.</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">STW 09B M R9b</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">==></FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">TIL</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0"></FONT>
</TD>
</TR>
<TR>
<TD COLSPAN = 5 BGCOLOR="#3399FF"><B><FONT FACE="Arial" SIZE="0">5.Std.</FONT></B></TD>
</TR>
<TR>
<TD>
<FONT FACE="Arial" SIZE="0">5.Std.</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">STW 06C SP RTh2</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">==></FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">HIN</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0"></FONT>
</TD>
</TR>
<TR>
<TD>
<FONT FACE="Arial" SIZE="0">5.Std.</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">KÖT TTE7b E R7b</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">==></FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">LUR</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">Schüler zu LUR</FONT>
</TD>
</TR>
<TR>
<TD COLSPAN = 5 BGCOLOR="#3399FF"><B><FONT FACE="Arial" SIZE="0">6.Std.</FONT></B></TD>
</TR>
<TR>
<TD>
<FONT FACE="Arial" SIZE="0">6.Std.</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">STW 06C SP RTh2</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">==></FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">HIN</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0"></FONT>
</TD>
</TR>
<TR>
<TD>
<FONT FACE="Arial" SIZE="0">6.Std.</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">KÖT TTE7b E R7b</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">==></FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">LUR</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">Schüler zu LUR</FONT>
</TD>
</TR>
<TR>
<TD COLSPAN = 5 BGCOLOR="#3399FF"><B><FONT FACE="Arial" SIZE="0">Aufsicht</FONT></B></TD>
</TR>
<TR>
<TD>
<FONT FACE="Arial" SIZE="0">Aufsicht</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">STW Aufs 1.P.Süd a</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">==></FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0">ONN</FONT>
</TD>
<TD>
<FONT FACE="Arial" SIZE="0"></FONT>
</TD>
</TR>
</TABLE>
<HR><P><FONT FACE="Arial" SIZE="0"><A HREF="index.html">zurück</A></FONT></P>
<BR>
<BR>
<BR>
</BODY>
</HTML>
Also sind Zeilenumbrüche wohl vorhanden.
Ich möchte gerne nur die Tabelle, aber den Tabellen Code rausfiltern und in eine andere Datei einfügen, weil ich eine andere Struktur
benötige.Die am Anfang genannte Methode ist nicht die Beste(habe die aus einem Forum), aber ich habe schon mehrere Methoden von anderen Leuten probiert und keine hat geholfen. Immer das selbe ....
Re: Das Programm lädt nicht Zeile für Zeile die Zeilen :(
Verfasst: Donnerstag 27. März 2014, 14:12
von Sirius3
@xXBlueWhiteXx: wenn Du die Tabellenstruktur extrahieren willst, brauchst Du auf jeden Fall einen HTML-Parser. Damit kann man sich auch leicht durch die TABLE-, TR- und TD-Tags hangeln.
Re: Das Programm lädt nicht Zeile für Zeile die Zeilen :(
Verfasst: Donnerstag 27. März 2014, 14:31
von xXBlueWhiteXx
Sowas habe ich ja schon , jedoch brauche ich nicht den reinen Inhalt , sondern
den Tabellen Code mit dem Inhalt.
Re: Das Programm lädt nicht Zeile für Zeile die Zeilen :(
Verfasst: Donnerstag 27. März 2014, 14:38
von EyDu
Benutze BeautifulSoup oder lxml.
Re: Das Programm lädt nicht Zeile für Zeile die Zeilen :(
Verfasst: Donnerstag 27. März 2014, 14:55
von xXBlueWhiteXx
Also BeautifulSoup habe ich schon probiert, jedoch ist bei der Installation anscheint was falsch gelaufen.
from bs4 import BeautifulSoup
Funktioniert nicht , aber import BeautifulSoup.Der Quellcode wäre ja dann:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc)
test = soup.find_all('table')
Oder ? Habe das aus der Dokumentation.
Re: Das Programm lädt nicht Zeile für Zeile die Zeilen :(
Verfasst: Donnerstag 27. März 2014, 15:17
von BlackJack
@xXBlueWhiteXx: Die Frage ist ob Du `BeautifulSoup` oder `bs4` installiert hast. Letzteres ist die aktuellere Version von BeautifulSoup.
Edit: Bei so etwas ist es auch immer hilfreich in einer Python-Shell mit den Daten zu experimentieren. Da kann man dann Live schauen welche Ausdrücke welches Ergebnis liefern.
Re: Das Programm lädt nicht Zeile für Zeile die Zeilen :(
Verfasst: Donnerstag 27. März 2014, 17:58
von xXBlueWhiteXx
Okay , also ich habe alle drei Sachen mal ausprobiert.
>>> import bs4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "bs4.py", line 15, in <module>
from bs4 import BeautifulSoup
ImportError: cannot import name BeautifulSoup
>>> from bs4 import BeautifulSoup
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "bs4.py", line 15, in <module>
from bs4 import BeautifulSoup
ImportError: cannot import name BeautifulSoup
>>> import BeautifulSoup
>>>
Also letzteres funktioniert.
Re: Das Programm lädt nicht Zeile für Zeile die Zeilen :(
Verfasst: Donnerstag 27. März 2014, 18:11
von xXBlueWhiteXx
Oho man :// Ich weiß einfach nicht mehr weiter.
Selbst bei dem einfachen lesen, kommt das falsche raus...
Programm:
import urllib
sock = urllib.urlopen("http://#IP/vp.html")
htmlSource = sock.read()
sock.close()
print htmlSource
Ausgabe
root@v255658:~# python test_copy.py
</HTML><FONT FACE="Arial" SIZE="0"><A HREF="index.html">zurück</A></FONT></P>/B></TD></FONT><HR>
Da kann doch etwas nicht stimmen
Re: Das Programm lädt nicht Zeile für Zeile die Zeilen :(
Verfasst: Donnerstag 27. März 2014, 18:33
von BlackJack
@xXBlueWhiteXx: Wenn ich mal raten müsste werden die Zeilen nur durch '\r' getrennt und dann auf einem Nicht-Apple-Rechner ausgegeben. Das sollte aber egal sein wenn man das mit einem HTML-Parser verarbeitet.
Es wäre übrigens nett wenn Du die Quelltexte demnächst mal in Code-Tags setzen könntest.
Re: Das Programm lädt nicht Zeile für Zeile die Zeilen :(
Verfasst: Donnerstag 27. März 2014, 18:48
von xXBlueWhiteXx
Oho , stimmt. Sorry, mache ich in Zukunft. Also meinst du, dass ich es mit dem Befehl "strip("\r")" probieren soll ?
Re: Das Programm lädt nicht Zeile für Zeile die Zeilen :(
Verfasst: Donnerstag 27. März 2014, 19:25
von EyDu
Nee. Du steckst das HTML einfach in BeautifulSoup und arbeitest dann auf dem BS-Objekt weiter. Das kümmert sich dann um alles andere (Parsen, Baum erstellen, etc.). Anschließend kannst du gemütlich auf den Elementen im Baum arbeiten. Verwirf den Gedanken, dass du irgendwie selbst auf den rohen HTML-Daten arbeitest, das möchtest du nicht. Wirklich!