inhalt einer internetseite abrufen

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.
Abooya
User
Beiträge: 8
Registriert: Freitag 5. Mai 2006, 15:29

hallo, ich beschäftige mich noch nicht lange mit python, und hätte dementsprechend eine dumme frage :P :
Wenn ich einen httpsocket geöffnet und eine anfrage ausgeführt habe,sieht mein code in etwa so aus:

Code: Alles auswählen

import httplib, Image, os, random

socket = httplib.HTTPConnection('lalilu.de', 80)

header = {'User_Agent': 'Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)'}

socket.request('GET', '/abc.php?xyz=123', '', header)
response = socket.getresponse()
wie kann ich jetzt aber den inhalt der seite abc.php?xyz=123 abrufen?

ich wäre dankbar, wenn jemand einem noob wie mir helfen könnte . :wink:

mit freundlichen Grüssen
Abooya
ryu
User
Beiträge: 41
Registriert: Dienstag 7. Februar 2006, 19:34

Hi,
das müsste so am einfachsten gehen:

Code: Alles auswählen

>>> from urllib import urlopen
>>> page = urlopen('http://google.de')
>>> print(page.read())
<html><head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><title>Google</title>...
Alternativ hat auch dein "response" Objekt eine Methode namens "read", mit der du den Inhalt auslesen kannst.

Chris
Abooya
User
Beiträge: 8
Registriert: Freitag 5. Mai 2006, 15:29

vielen dank, ich habe es gerade in der shell ausprobier und es hat super funktioniert. :)
jetzt hätte ich aber noch eine frage. in der seite, die ich auslese, ist die url einer weiteren seite, wenn ich allerdings versuche diese auszulesen, bekomme ich folgenden error:

Code: Alles auswählen

<bound method _fileobject.read of <socket._fileobject object at 0x00A65590
woran könnte das liegen? hat es etwas damit zu tun, dass auf der seite serverseitig weitergeleitet wird?
Schonmal danke im vorraus!

// Die Bytekennzeichnung variiert natürlich
mfg
Abooya
ryu
User
Beiträge: 41
Registriert: Dienstag 7. Februar 2006, 19:34

Du hast vermutlich

Code: Alles auswählen

obj.method
darum wurde nur das Objekt was sich hinter der Methode verbirgt angezeigt. Um die Methode richtig aufzurufen, müsstest du

Code: Alles auswählen

obj.method()
eingeben.
Abooya
User
Beiträge: 8
Registriert: Freitag 5. Mai 2006, 15:29

ja, du hast recht. nochmals vielen dank, jetzt funktioniert alles :D
// oder zumindest fast alles :(
ich schaffe es jetzt zwar, die seite anzeigen zu lassen, allerdings meint er nun, ich sollte Cookies zulassen, damit er die Php-Sessionid drin ablegen kann. die frage ist nur: wie moduliere ich in python cookies?
es wäre wirklich supernett, wenn mir nochmal jemand helfen könnte.

mfg
Abooya
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Abooya hat geschrieben:wie moduliere ich in python cookies?
Es gibt die Module Cookie und cookielib.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Abooya hat geschrieben:ich sollte Cookies zulassen, damit er die Php-Sessionid drin ablegen kann.
Hi Abooya!

Probiers damit: http://wwwsearch.sourceforge.net/ClientCookie/

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Abooya
User
Beiträge: 8
Registriert: Freitag 5. Mai 2006, 15:29

ich habe jetzt einen bekannten gefragt, und er meinte, dass ich einfach

Code: Alles auswählen

header['cookie'] = 'PHPSESSID=' + sessid
in verbindung mit der socket-variante machen soll. ich probiers mal aus.

// btw: gibt es in Python etwas wie 'getChar()' in C?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Abooya hat geschrieben:gibt es in Python etwas wie 'getChar()' in C?
Für die C-Unkundigen: was tut getChar()?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Abooya hat geschrieben:

Code: Alles auswählen

header['cookie'] = 'PHPSESSID=' + sessid

// btw: gibt es in Python etwas wie 'getChar()' in C?
String-Operation ist nicht gemeint, oder?

Code: Alles auswählen

header['cookie'] = 'PHPSESSID= %s'  % sessid
Oder vielleicht nur ASCII-Zeichen extrahieren:
http://www.python-forum.de/topic-5861.html

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Abooya
User
Beiträge: 8
Registriert: Freitag 5. Mai 2006, 15:29

getChar() hält das Programm einfach solange an, bis eine taste gedrückt wird :wink:
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dafür reicht ein raw_input() Allerdings muß man dann ENTER drücken... Was anderes kenn ich allerdings spontan nicht... Wobei, vielleicht sys.stdin.read(1) ???
Zuletzt geändert von jens am Freitag 5. Mai 2006, 19:54, insgesamt 1-mal geändert.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
icepacker
User
Beiträge: 49
Registriert: Dienstag 15. November 2005, 18:48

Abooya hat geschrieben:getChar() hält das Programm einfach solange an, bis eine taste gedrückt wird :wink:
:roll: *schüttel*

1. Heißt es getchar()
2. Liest die Funktion ein Zeichen von der Standardeingabe und gibt den ASCII
Wert des Zeichens zurück.
ubuntu linux !!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jens hat geschrieben:Was anderes kenn ich allerdings spontan nicht...
Aber ich: msvcrt.getch() ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Leonidas hat geschrieben:msvcrt.getch() ;)
Availability: Windows.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jens hat geschrieben:
Leonidas hat geschrieben:msvcrt.getch() ;)
Availability: Windows.
Wo steht denn dass er es für Unix braucht?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Abooya
User
Beiträge: 8
Registriert: Freitag 5. Mai 2006, 15:29

ich bin bekennender win XP-nutzer
@icepacker: also ich benutze es immer nur zum anhalten :lol:
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Aber gerade bei solchen Kleinigkeiten würde ich dann besser auf das portable raw_input() oder sys.stdin.read(1) setzten ;)
Wobei ich beim letzteren nicht weiß, ob es das gewollte auch wirklich tut... Kann das mal jemand testen???

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jens hat geschrieben:Wobei ich beim letzteren nicht weiß, ob es das gewollte auch wirklich tut... Kann das mal jemand testen???
Nein tuts nicht. Du kannst so lange tippen wie du willst, aber es wird nur das erste Byte welches du eingetippt hast gelesen und zurückgegeben, bis du Enter drückst. Bei weiteren Aufrufen werden die anderen Bytes die du eingegeben hast ausgegeben (also wird sozusagen der stdin-Puffer abgearbeitet).

Unter Linux gibt es getch() auch, das wird dann über Curses abgewickelt.

Zu guter Letzt ncoh etwas, was cross platform geht.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Abooya
User
Beiträge: 8
Registriert: Freitag 5. Mai 2006, 15:29

ok, nochmal vielen dank an alle!
jetzt habe ich noch eine letzte frage (wirklich die letzte :wink: )
und zwar würde ich gerne eine weitere internetadresse aus dem inhalt auslesen, die mir die nummer der entsprechenden adresse ausgibt.
Beispiel:
Bei

Code: Alles auswählen

funktion("<frame src='http://www.google.com'></frame>","http://*'>")
sollte er mir 10, 33 ausgeben (falls ich mich nicht verzählt habe :P)
bei den python docs finde ich aber nur funktionen, die mir die bytenummer zurückgeben :(
achso, und ausserdem fände ich es nett, wenn mir jemand gleich noch eine funktion zum splitten von strings geben könnte.

mit hoffenden Grüssen
Abooya
Antworten