Seite 1 von 1

Wie zweistellige Werte von 00 an inkrementieren?

Verfasst: Samstag 13. September 2008, 12:44
von snafu
Hi!

Ich brauche zum Scrapen einer Website immer zweistellige Werte, quasi von 00-99. Nur dass er halt aufhören soll zu inkrementieren, wenn es keine höhere Zahl mehr gibt. Python behandelt ja offenbar zahl=00 als zahl=0. Zur Verdeutlichung:

Code: Alles auswählen

<span id="bla00">blupp</span>
<span id="bla01">blubber</span>
[...]
<span id="bla55">blubbeldiblupp</span>
...sollen aus der Seite geparst werden. Es soll also sowas wie doc.findall('.//span[@id="bla%d"]') % nr generiert werden. Wie stelle ich das am besten an?

Ich glaube, man kann festlegen, dass die einzusetzende Zahl eine bestimmte Anzahl von Stellen haben muss und notfalls Nullen vorangestellt werden sollen, oder? Das habe ich mal irgendwo gelesen, wenn ich mich recht entsinne, weiß aber nicht mehr wo. Wie lautet eigentlich das Fachwort für das Einsetzen von %s, %d usw.?

Verfasst: Samstag 13. September 2008, 12:48
von Leonidas
String-Formatting heißt das. Was du suchst ist ``"%.2d" % zahl``.

Aber ich würde einfach im vorliegenden Fall sowas wie startswith nutzen und nicht exakt auf die Nummer testen.

Verfasst: Samstag 13. September 2008, 12:48
von HWK

Code: Alles auswählen

>>> './/span[@id="bla%02d"]' % 00
'.//span[@id="bla00"]'
MfG
HWK

Verfasst: Samstag 13. September 2008, 12:49
von numerix

Code: Alles auswählen

>>> print "%02i" %5
05

Verfasst: Samstag 13. September 2008, 12:55
von snafu
Leonidas hat geschrieben:Aber ich würde einfach im vorliegenden Fall sowas wie startswith nutzen und nicht exakt auf die Nummer testen.
Hast recht, so rum hatte ich gar nicht gedacht.

Danke auch den anderen. :)

Verfasst: Samstag 13. September 2008, 13:26
von Leonidas

Code: Alles auswählen

'.//span[@id^="bla"]'
Müsste so funktionieren.

Verfasst: Sonntag 14. September 2008, 14:16
von snafu
Leonidas hat geschrieben:

Code: Alles auswählen

'.//span[@id^="bla"]'
Müsste so funktionieren.
Leider wohl nicht:

Code: Alles auswählen

>>> html2 = '<html><span id="bla01">blupp</span><span>murks</span><span id="eek">jepp</span></html>'
>>> doc = parser.parse(html2)
>>> for elem in doc.findall('.//span[@id]'): print elem.text

blupp
jepp
>>> for elem in doc.findall('.//span[@id^="bla"]'): print elem.text

>>> 
Soll heißen: Es kommt keine Ausgabe.

Verfasst: Sonntag 14. September 2008, 14:40
von Leonidas
Was für einen Parser nutzt du denn?

Verfasst: Sonntag 14. September 2008, 15:36
von snafu
Leonidas hat geschrieben:Was für einen Parser nutzt du denn?
Das Modul ist immer noch dieses hier.

Verfasst: Sonntag 14. September 2008, 15:42
von Leonidas
Mit lxml würde ich dann die CSS-Selektoren nutzen, damit sollte das gehen (vorrausgesetzt die funktionieren so wie in jQuery, wo sowas geht).

Verfasst: Montag 15. September 2008, 07:15
von snafu
Hab's letztlich etwas anders gelöst: Der jeweils gewünschte Bereich war immer ein Kind eines td-Elements mit der Klasse col2 als Attribut. :)