Re: Etwas auswählen und anklicken
Verfasst: Montag 30. Januar 2012, 12:29
@BlackJack:
HTTP ist das einzige Protokoll, dessen Grundprinzip er hier kennen sollte. Die Einarbeitung in "Netzwerk-Protokolle" vorzuschlagen oder zu fordern ist IMO etwas überzogen. Die unteren Schichten des TCP/IP-Modells braucht er erstmal sowieso nicht zu kennen.
@ente:
Wenn die Nummer, nach der du suchst, in einem HTML-Code eingebettet ist, der nicht überall auf der Seite ständig auftaucht, dann wäre ein regulärer Ausdruck das einfachste:
"In computing, a regular expression provides a concise and flexible means for "matching" (specifying and recognizing) strings of text, such as particular characters, words, or patterns of characters."
Man kann reguläre Ausdrücke also dafür nutzen, bestimmte Muster in Strings (auch Byte-Strings) zu finden. In Python kann dafür das re-Modul genutzt werden.
Primitives Beispiel:
Ausgabe:
Anderes Beispiel, um ganz bestimmte Teile eines Musters zu extrahieren (hier geheime Nummern aus einem HTML-Code):
Ausgabe:
Die dritte secret-number wird nicht erfasst, weil das angegebene Pattern fordert, dass exakt "<span id='secret-number'>" am Anfang steht. Wenn auch nur irgendein Leerzeichen anders gesetzt ist oder andere Hochkommata benutzt werden oder, wie in diesem Fall, irgendein zusätzlicher Text drinsteckt, dann wird es nicht klappen. Reguläre Ausdrücke wissen nichts von HTML - es werden einfach nur exakte Übereinstimmungen mit dem angegebenen Muster gesucht.
Da kann man sich dann sehr komplizierte reguläre Ausdrücke ("pattern") überlegen, die all das beachten. Das ist aber relativ anspruchsvoll und erfordert häufig eine Menge Erfahrung mit regulären Ausdrücken; die Syntax ist für Anfänger erstmal relativ kompliziert. In deinem Fall reicht aber vllt. schon etwas ganz simples. (Das pattern in meinem Beispiel ist ja jetzt auch nicht so mörder-schwer, oder?)
Das wäre das erste, was ich versuchen würde. Wenn du so etwas häufiger machst, solltest du aber vielleicht doch mal einen HTML-Parser ausprobieren. Damit ist auf Dauer auch angenehmer zu arbeiten.
Viele Grüße
EDIT: id-Attribute durch class-Attribute ersetzt. Danke @BlackJack.
HTTP ist das einzige Protokoll, dessen Grundprinzip er hier kennen sollte. Die Einarbeitung in "Netzwerk-Protokolle" vorzuschlagen oder zu fordern ist IMO etwas überzogen. Die unteren Schichten des TCP/IP-Modells braucht er erstmal sowieso nicht zu kennen.
@ente:
Wenn die Nummer, nach der du suchst, in einem HTML-Code eingebettet ist, der nicht überall auf der Seite ständig auftaucht, dann wäre ein regulärer Ausdruck das einfachste:
"In computing, a regular expression provides a concise and flexible means for "matching" (specifying and recognizing) strings of text, such as particular characters, words, or patterns of characters."
Man kann reguläre Ausdrücke also dafür nutzen, bestimmte Muster in Strings (auch Byte-Strings) zu finden. In Python kann dafür das re-Modul genutzt werden.
Primitives Beispiel:
Code: Alles auswählen
import re
strings = ["Hallo ente!", "Tschüß ente!", "bla bla ...guten MoRgEn bruder... bla bla"]
# Das angegebene pattern passt auf alle Kombinationen von "hallo", "guten tag", "guten morgen",
# "guten abend" und einem beliebigen Wort, das nur aus Buchstaben besteht.
pattern = r"(?:hallo|guten tag|guten morgen|guten abend) [a-zA-Z]+"
for string in strings:
match_obj = re.search(pattern, string, re.I) # re.I <-> case-insensitive
if match_obj:
print("Der string '%s' enthält eine Begrüßung!" % string)
else:
print("Der string '%s' enthält keine bekannte Begrüßung!" % string)
Code: Alles auswählen
Der string 'Hallo ente!' enthält eine Begrüßung!
Der string 'Tschüß ente!' enthält keine bekannte Begrüßung!
Der string 'bla bla ...guten MoRgEn bruder... bla bla' enthält eine Begrüßung!
Code: Alles auswählen
import re
from pprint import pprint
html = """
<html>
<head>
<title>bla bla bla</title>
</head>
<body>
<span class='secret-number'>1337</span>
<div id='irgendein-super-dummer-html-code'>
<span class='secret-number'>42</span>
<span class='tja-das-wird-nicht-klappen secret-number'>73</span>
</div>
</body>
</html>
"""
# In Klammern stehendes kann vom regulären Ausdruck separat erfasst und später ausgelesen werden.
pattern = r"<span class='secret-number'>([0-9]+)</span>"
matches = re.findall(pattern, html, re.I)
pprint(matches)
Code: Alles auswählen
['1337', '42']
Da kann man sich dann sehr komplizierte reguläre Ausdrücke ("pattern") überlegen, die all das beachten. Das ist aber relativ anspruchsvoll und erfordert häufig eine Menge Erfahrung mit regulären Ausdrücken; die Syntax ist für Anfänger erstmal relativ kompliziert. In deinem Fall reicht aber vllt. schon etwas ganz simples. (Das pattern in meinem Beispiel ist ja jetzt auch nicht so mörder-schwer, oder?)
Das wäre das erste, was ich versuchen würde. Wenn du so etwas häufiger machst, solltest du aber vielleicht doch mal einen HTML-Parser ausprobieren. Damit ist auf Dauer auch angenehmer zu arbeiten.
Viele Grüße
EDIT: id-Attribute durch class-Attribute ersetzt. Danke @BlackJack.