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.
Antworten
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 (former) Modvoice
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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

Code: Alles auswählen

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

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. :)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Code: Alles auswählen

'.//span[@id^="bla"]'
Müsste so funktionieren.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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

Leonidas hat geschrieben:Was für einen Parser nutzt du denn?
Das Modul ist immer noch dieses hier.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 (former) Modvoice
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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