Seite 1 von 1
Kommentare in HTML finden
Verfasst: Dienstag 23. September 2014, 16:48
von _nohtyp_
Ich mache gerade die PyChallenge und versuche, die Quelltext-Kommentare zu finden. Leider finde ich keine Möglichkeit dazu. Bisher habe ich:
Code: Alles auswählen
import urllib.request
f = urllib.request.urlopen("http://www.pythonchallenge.com/pc/def/ocr.html")
html = f.read()
print(html)
Re: Kommentare in HTML finden
Verfasst: Dienstag 23. September 2014, 16:51
von BlackJack
@_nohtyp_: Ähm, hast Du Dir den Quelltext von der Webseite einfach mal angeschaut? Da muss man nicht grossartig suchen.
Re: Kommentare in HTML finden
Verfasst: Dienstag 23. September 2014, 16:59
von _nohtyp_
Ja, habe ich mir angeschaut

Ich würde trotzdem gerne wissen, wie es mit Python gehen würde.
Re: Kommentare in HTML finden
Verfasst: Dienstag 23. September 2014, 17:30
von cofi
@BlackJack: Darum doch auch der Thread Titel
@OP: Entweder du benutzt einen HTML-Parser oder - aber nur, weil der Code nie ernsthaft benutzt werden wird! - du benutzt String Methoden wie `find` und `rfind`.
An den relevanten Text kommst du zB hiermit:
Code: Alles auswählen
import urllib.request
f = urllib.request.urlopen("http://www.pythonchallenge.com/pc/def/ocr.html")
s = f.read()
problem = s[s.rfind('<--'):s.rfind('-->')]
Re: Kommentare in HTML finden
Verfasst: Dienstag 23. September 2014, 17:31
von cofi
cofi hat geschrieben:@BlackJack: Darum doch auch der Thread Titel
@OP: Entweder du benutzt einen HTML-Parser oder - aber nur, weil der Code nie ernsthaft benutzt werden wird! - du benutzt String Methoden wie `find` und `rfind`.
An den relevanten Text kommst du zB hiermit:
Code: Alles auswählen
import urllib.request
f = urllib.request.urlopen("http://www.pythonchallenge.com/pc/def/ocr.html")
s = f.read().decode('latin1')
problem = s[s.rfind('<!--')+4:s.rfind('-->')]
Edit: Decoding ergaenzt.
Re: Kommentare in HTML finden
Verfasst: Dienstag 23. September 2014, 17:53
von _nohtyp_
Leider erscheint die folgende Fehlermeldung:
Code: Alles auswählen
Traceback (most recent call last):
File "/Users/***/Desktop/Py_challenge/py.py", line 5, in <module>
html = s[s.rfind('<--'):s.rfind('-->')]
TypeError: Type str doesn't support the buffer API
Re: Kommentare in HTML finden
Verfasst: Dienstag 23. September 2014, 18:08
von cofi
Dann musst du die Bytes eben dekodieren

Re: Kommentare in HTML finden
Verfasst: Dienstag 23. September 2014, 18:13
von BlackJack
Die Fehlermeldung verwirrt mich gerade. Es ist laut Fehlermeldung vom Typ `str` also ist es unter Python 3 doch schon dekodiert!?
Re: Kommentare in HTML finden
Verfasst: Dienstag 23. September 2014, 18:50
von cofi
@BlackJack: Da hast du recht, aber das ist tatsaechlich der Grund:
Code: Alles auswählen
>>> f = urllib.request.urlopen('http://www.pythonchallenge.com/pc/def/ocr.html')
>>>s = f.read()
>>> type(s)
<class 'bytes'>
>>> s[s.rfind('<!--')+4:s.rfind('-->')]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Type str doesn't support the buffer API
Da stimmt wohl was nicht mit der Exception.
Re: Kommentare in HTML finden
Verfasst: Dienstag 23. September 2014, 19:52
von BlackJack
@cofi: Ah, wahrscheinlich ist das Problem das hier `bytes.rfind()` eine *Zeichenkette* als Argument übergeben wird. Da muss man sehr wahrscheinlich auch `bytes` übergeben.
Re: Kommentare in HTML finden
Verfasst: Dienstag 23. September 2014, 20:12
von cofi
@BlackJack: Mit einheitlichen `bytes` funktioniert es wieder. Da sieht man mal wieder, dass man keinen Python3 Code in einer Python2 Umgebung schreiben sollte .. und es mit dem Mindset auch nicht "korrigieren" sollte

Re: Kommentare in HTML finden
Verfasst: Dienstag 23. September 2014, 20:58
von BlackJack
@cofi: Manchmal denke ich ja man sollte einfach gar keinen Python 3-Code schreiben, egal in welcher Umgebung.

Re: Kommentare in HTML finden
Verfasst: Mittwoch 24. September 2014, 10:58
von Hyperion
Wobei ich das an dieser Stelle schon logisch finde. Wenn man auf Bytes operiert, will man dann wirklich ein implizites Encoding (z.B. von einem String-Literal) haben? Ich denke das bietet viel mehr Fehlerpotenzial, als das es nützt! Insofern ist es doch gut, dass die Methoden wie ``rfind`` bei Bytes *keine* Strings als Argumente entgegen nehmen.
Zudem steht es einem ja frei, *direkt* beim Einlesen die Daten decodieren und dann im Verlauf nur noch mit Strings arbeiten. Dann muss man sich bei den Parametern ja auch keinen Kopf mehr machen...