Seite 1 von 1

Quelltext durchsuchen (search & match)[solved]

Verfasst: Mittwoch 26. Dezember 2007, 20:21
von root_tux_linux
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

Verfasst: Mittwoch 26. Dezember 2007, 21:18
von root_tux_linux
Ich habs jetzt mit findall() gemacht

Nur wie stell ich findall ein damit es mir das value= nicht in die liste aufnimmt?

Verfasst: Mittwoch 26. Dezember 2007, 21:29
von HWK

Code: Alles auswählen

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

Verfasst: Mittwoch 26. Dezember 2007, 23:52
von root_tux_linux

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

Verfasst: Donnerstag 27. Dezember 2007, 10:28
von sma

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.

Verfasst: Donnerstag 27. Dezember 2007, 12:09
von HWK
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

Verfasst: Donnerstag 27. Dezember 2007, 15:56
von Leonidas
Die Klammern definieren eine Gruppe, man kann auch mehrere Gruppen definieren, die dann gefunden werden.

Verfasst: Donnerstag 27. Dezember 2007, 22:42
von root_tux_linux
perfekt :)

danke :)