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
Das Programm lädt nicht Zeile für Zeile die Zeilen :(
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.xXBlueWhiteXx hat geschrieben:['<HTML>sadasdsadasd</HTML><a>hhuuihui</a><h1>jaiusdaud</h1>']
-
Leonidas
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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.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 ?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
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?
Warum willst Du das denn überhaupt machen? Was ist das Ziel von dieser Aktion?
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Und ergaenzend: Warum benuzt du keinen HTML-Parser?BlackJack hat geschrieben:Warum willst Du das denn überhaupt machen? Was ist das Ziel von dieser Aktion?
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 ...
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
-
xXBlueWhiteXx
- User
- Beiträge: 13
- Registriert: Dienstag 17. Juli 2012, 14:45
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:
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 ....
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>
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 ....
-
xXBlueWhiteXx
- User
- Beiträge: 13
- Registriert: Dienstag 17. Juli 2012, 14:45
Sowas habe ich ja schon , jedoch brauche ich nicht den reinen Inhalt , sondern
den Tabellen Code mit dem Inhalt.
den Tabellen Code mit dem Inhalt.
-
xXBlueWhiteXx
- User
- Beiträge: 13
- Registriert: Dienstag 17. Juli 2012, 14:45
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.
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.
-
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.
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.
-
xXBlueWhiteXx
- User
- Beiträge: 13
- Registriert: Dienstag 17. Juli 2012, 14:45
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.
>>> 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.
-
xXBlueWhiteXx
- User
- Beiträge: 13
- Registriert: Dienstag 17. Juli 2012, 14:45
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
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
-
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.
Es wäre übrigens nett wenn Du die Quelltexte demnächst mal in Code-Tags setzen könntest.
-
xXBlueWhiteXx
- User
- Beiträge: 13
- Registriert: Dienstag 17. Juli 2012, 14:45
Oho , stimmt. Sorry, mache ich in Zukunft. Also meinst du, dass ich es mit dem Befehl "strip("\r")" probieren soll ?
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!
Das Leben ist wie ein Tennisball.
