Wie zweistellige Werte von 00 an inkrementieren?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
snafu
User
Beiträge: 5384
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Wie zweistellige Werte von 00 an inkrementieren?

Beitragvon snafu » Samstag 13. September 2008, 12:44

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.?
Zuletzt geändert von snafu am Samstag 13. September 2008, 12:50, insgesamt 1-mal geändert.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 13. September 2008, 12:48

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.
Zuletzt geändert von Leonidas am Samstag 13. September 2008, 12:49, insgesamt 1-mal geändert.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Beitragvon HWK » Samstag 13. September 2008, 12:48

Code: Alles auswählen

>>> './/span[@id="bla%02d"]' % 00
'.//span[@id="bla00"]'
MfG
HWK
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Samstag 13. September 2008, 12:49

Code: Alles auswählen

>>> print "%02i" %5
05
Benutzeravatar
snafu
User
Beiträge: 5384
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Beitragvon snafu » Samstag 13. September 2008, 12:55

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. :)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 13. September 2008, 13:26

Code: Alles auswählen

'.//span[@id^="bla"]'

Müsste so funktionieren.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
snafu
User
Beiträge: 5384
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Beitragvon snafu » Sonntag 14. September 2008, 14:16

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.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 14. September 2008, 14:40

Was für einen Parser nutzt du denn?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
snafu
User
Beiträge: 5384
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Beitragvon snafu » Sonntag 14. September 2008, 15:36

Leonidas hat geschrieben:Was für einen Parser nutzt du denn?


Das Modul ist immer noch dieses hier.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 14. September 2008, 15:42

Mit lxml würde ich dann die CSS-Selektoren nutzen, damit sollte das gehen (vorrausgesetzt die funktionieren so wie in jQuery, wo sowas geht).
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
snafu
User
Beiträge: 5384
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Beitragvon snafu » Montag 15. September 2008, 07:15

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. :)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder