Quelltext durchsuchen (search & match)[solved]

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
root_tux_linux
User
Beiträge: 36
Registriert: Sonntag 16. Dezember 2007, 04:18

Quelltext durchsuchen (search & match)[solved]

Beitragvon root_tux_linux » Mittwoch 26. Dezember 2007, 20:21

Hi

Ich würde gerne mittels url.open, search und match Quelltext nach Raum-ID's durchsuchen und alle auflisten.

Mein Problem ist das ich Python Anfänger bin und irgendwie bekomm ich die Schleife (falls nötig) nicht hin damit es mir den kompletten Quelltext durchläuft und die Raum-ID's in einer Liste abspeichert.

Kann mir jemand helfen? ^^

Habs schon mit for, while, read, readlines und readline versucht.


Code: Alles auswählen

from urllib2 import urlopen
from re import search, match

# domain
print 'Example: http://foobar.mainchat.de'

url = raw_input('URL: ')

domain = url[7:]

# search chat number
host = urlopen(url).read()
match = search("chat[0-9]", host)
chat = host[match.start() + 4: match.end()]# +4 : strip "chat"
print chat

# generate host
host = 'http://chat%s.fidion.de/index.php?http_host=%s' % (chat, domain)
print host

# login as guest
login = urlopen(host).read()
print login

# Ab hier komm ich nimmer weiter weil es z.B. 6 Raum-ID's gibt

# search room-id
match = search('VALUE="[0-9]+', login)
roomid = login[match.start() + 7: match.end()]
print roomid
Zuletzt geändert von root_tux_linux am Freitag 28. Dezember 2007, 01:09, insgesamt 1-mal geändert.
AMD Athlon 64 X2 6000+, ASUS M2N-SLI Deluxe, ASUS EN8600GTS Silent, 4GB Apacer DDR2 800Mhz | Gentoo Linux x86_64
AMD Sempron 2500+, MSI KT4, ASUS N6200, 2x 512MB Apacher DDR 400Mhz, Hauppauge PVR150 | Arch Linux i686
### Sorry for my bad english ###
root_tux_linux
User
Beiträge: 36
Registriert: Sonntag 16. Dezember 2007, 04:18

Beitragvon root_tux_linux » Mittwoch 26. Dezember 2007, 21:18

Ich habs jetzt mit findall() gemacht

Nur wie stell ich findall ein damit es mir das value= nicht in die liste aufnimmt?
AMD Athlon 64 X2 6000+, ASUS M2N-SLI Deluxe, ASUS EN8600GTS Silent, 4GB Apacer DDR2 800Mhz | Gentoo Linux x86_64

AMD Sempron 2500+, MSI KT4, ASUS N6200, 2x 512MB Apacher DDR 400Mhz, Hauppauge PVR150 | Arch Linux i686

### Sorry for my bad english ###
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Beitragvon HWK » Mittwoch 26. Dezember 2007, 21:29

Code: Alles auswählen

match = search('VALUE="([0-9]+)', login)
MfG
HWK
root_tux_linux
User
Beiträge: 36
Registriert: Sonntag 16. Dezember 2007, 04:18

Beitragvon root_tux_linux » Mittwoch 26. Dezember 2007, 23:52

Code: Alles auswählen

match = search('VALUE="([0-9]+)', login)


ähm dann wirds aber auch nur 1x gefunden? oO

Ich habs jetzt so gemacht:

Code: Alles auswählen

match = findall('VALUE="[0-9]+', roomurl)
    matches = len(match)


Code: Alles auswählen

while x < matches:
                room = str(match[x])
                roomid = room[7:]
                print roomid
                x += 1


Sowas wollte ich nur halt mit search() und start() & end()

Geht das damit nicht? oO
AMD Athlon 64 X2 6000+, ASUS M2N-SLI Deluxe, ASUS EN8600GTS Silent, 4GB Apacer DDR2 800Mhz | Gentoo Linux x86_64

AMD Sempron 2500+, MSI KT4, ASUS N6200, 2x 512MB Apacher DDR 400Mhz, Hauppauge PVR150 | Arch Linux i686

### Sorry for my bad english ###
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Beitragvon sma » Donnerstag 27. Dezember 2007, 10:28

Code: Alles auswählen

for v in re.findall('VALUE="(\d+)"', login):
  print v

Beachte die ( ) im regulären Ausdruck. Die Funktion findall liefert nur das, was in Klammern steht, als Ergebnis. Statt einer while-Schleife würde ich doch eine for-Schleife empfehlen.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Beitragvon HWK » Donnerstag 27. Dezember 2007, 12:09

root_tux_linux hat geschrieben:

Code: Alles auswählen

match = search('VALUE="([0-9]+)', login)

ähm dann wirds aber auch nur 1x gefunden? oO
:oops: Sollte natürlich so aussehen:

Code: Alles auswählen

match = findall('VALUE="([0-9]+)', login)
MfG
HWK
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 27. Dezember 2007, 15:56

Die Klammern definieren eine Gruppe, man kann auch mehrere Gruppen definieren, die dann gefunden werden.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
root_tux_linux
User
Beiträge: 36
Registriert: Sonntag 16. Dezember 2007, 04:18

Beitragvon root_tux_linux » Donnerstag 27. Dezember 2007, 22:42

perfekt :)

danke :)
AMD Athlon 64 X2 6000+, ASUS M2N-SLI Deluxe, ASUS EN8600GTS Silent, 4GB Apacer DDR2 800Mhz | Gentoo Linux x86_64

AMD Sempron 2500+, MSI KT4, ASUS N6200, 2x 512MB Apacher DDR 400Mhz, Hauppauge PVR150 | Arch Linux i686

### Sorry for my bad english ###

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder