Seite 1 von 2
Request mehrmals durchführen, wie for Schleife benutzen?
Verfasst: Dienstag 16. Dezember 2014, 21:42
von SeriousRuffy
Hallo zusammen,
ich führe derzeit mein erstes Projekt mit Python durch, bin daher noch ein blutiger Anfänger was das Programmieren angeht. Hoffe, ihr könnt mir trotzdem helfen:)
Ich habe via import requests ein Request durchgeführt, was auch problemlos funktioniert hat (siehe unten) . Aber ich frage mich, wie ich es coden muss, das der Request z.B. 20 mal hintereinander durchgeführt/ausgeführt wird.
Ich nehme stark an, das ich hierfür die for Schleife benutzen muss, allerdings komme ich auf keine vernünftige Lösung.
Könnt ihr mir diesbezüglich weiter helfen. Danke für euer Feedback
Code: Alles auswählen
>>> import requests
>>> r = requests.get("http://Beispiel")
>>> r.content
b'[{"debuggerLink":"http://Beispielresponse}]'
Re: Request mehrmals durchführen, wie for Schleife benutzen?
Verfasst: Dienstag 16. Dezember 2014, 21:54
von BlackJack
@SeriousRuffy: Du musst halt eine ``for``-Schleife schreiben die 20 mal durchlaufen wird. Welches Tutorial verwendest Du denn zum lernen wo *nicht* irgendwo bei der ``for``-Schleife auch `xrange()` (Python 2) oder `range()` (Python 3) gezeigt wird?
Re: Request mehrmals durchführen, wie for Schleife benutzen?
Verfasst: Dienstag 16. Dezember 2014, 22:07
von SeriousRuffy
BlackJack hat geschrieben:@SeriousRuffy: Du musst halt eine ``for``-Schleife schreiben die 20 mal durchlaufen wird. Welches Tutorial verwendest Du denn zum lernen wo *nicht* irgendwo bei der ``for``-Schleife auch `xrange()` (Python 2) oder `range()` (Python 3) gezeigt wird?
Danke für dein Feedback Black Jack. Ehrlich gesagt, googele ich mich quasi durch.
Ich habe es auch bereits mit range() ausprobiert, leider macht es nicht was ich will;) Ich bekomme quasi die Zahlen von 1-20 wieder
habe eingegeben:
Code: Alles auswählen
>>> import requests
>>> r = requests.get("http://Beispiel")
>>> r.content
b'[{"debuggerLink":"http://Beispielresponse}]'
>>> for r in range(20):
print(r)
1
2
3
4
u.s.w
Kannst du mir diesbezüglich weiter helfen?
Re: Request mehrmals durchführen, wie for Schleife benutzen?
Verfasst: Dienstag 16. Dezember 2014, 22:39
von /me
Du bindest
r in der for-Schleife ja auch bei jedem Durchlauf an einen neuen Wert. Dein
r, welches du dir via requests.get() geholt hast ist damit unerreichbar geworden. Mal abgesehen davon ist die von dir gezeigte Ausgabe merkwürdig. Eigentlich müsstest du Werte von 0-19 erhalten, nicht Werte von 1-20.
Wirf mal einen Blick ins offizielle
Tutorial statt dir bei Bedarf Code-Fragmente via Suchmaschine zusammenzuklauben.
Re: Request mehrmals durchführen, wie for Schleife benutzen?
Verfasst: Mittwoch 17. Dezember 2014, 11:46
von SeriousRuffy
Hallo /me,
danke für dein Feedback und deine Tipps.
Hier nochmal der richtige Code:
Code: Alles auswählen
>>> import requests
>>> r = requests.get("http://Beispiel")
>>> r.content
b'[{"debuggerLink":"http://Beispielresponse}]'
>>> for r in range(20):
print(r)
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Habe mich mit den Tutorial auseinander gesetzt, bin leider nicht schlauer geworden. Deshalb habe ich angefangen zu googlen.
Kannst du mir eventuell ein Tipp geben, wie ich am besten vorgehe? Stehe grad echt auf den Schlauch
Re: Request mehrmals durchführen, wie for Schleife benutzen?
Verfasst: Mittwoch 17. Dezember 2014, 11:53
von EyDu
SeriousRuffy hat geschrieben:Habe mich mit den Tutorial auseinander gesetzt, bin leider nicht schlauer geworden.
Sich mit dem Tutorial "auseinandersetzen" ist etwas wenig, das musst du schon gründlich durcharbeiten. Alle Beispiele ausprobieren, die Beispiele erweitern und selbst etwas experimentieren. Das wird schon ein paar Tage dauern. Wenn du das Wissen aus dem Tutorial nicht drauf hast, dann wirst du nicht weit kommen. Mit Raten wird das nichts. Wer Texte schreiben will, der muss Wörter kennen. Du hast aber noch nicht alle Buchstaben drauf

Re: Request mehrmals durchführen, wie for Schleife benutzen?
Verfasst: Mittwoch 17. Dezember 2014, 13:58
von SeriousRuffy
Dann werde ich es gründlich durcharbeiten und hoffe, das ich es danach lösen kann. Werde es euch wissen lassen:)
Re: Request mehrmals durchführen, wie for Schleife benutzen?
Verfasst: Mittwoch 17. Dezember 2014, 14:07
von /me
SeriousRuffy hat geschrieben:Habe mich mit den Tutorial auseinander gesetzt, bin leider nicht schlauer geworden.
Das Tutorial kann man nicht einfach kurz lesend überfliegen und damit automatisch verstehen. Experimentiere mit den Beispielen dort.
Schau dir mal folgenden Code an.
Wenn du jetzt
x ausgibst, welchen Wert würdest du dann erwarten?
'Hallo'? Das kann es nicht sein, da x in der for-Schleife dauernd an einen neuen Wert gebunden wird und zwar der Reihe nach von 0 bis 4.
x hat also nach Ausführung des Codes den Wert 4. Jetzt übertrage das mal gedanklich auf deinen Code. Das
r, das du mit dem Aufruf von
requests.get() füllst, wird durch die Zuweisung in der Schleife direkt wieder weggeworfen und der Reihe nach mit den Werten von 0 bis 19 belegt.
Jetzt kommt man natürlich darauf, dass man unterschiedliche (und sinnvolle) Namen verwenden sollte.
Code: Alles auswählen
request_result = requests.get("http://www.example.com")
for loop in range(20):
print(request_result.content)
Jetzt wird 20 Mal hintereinander der gleiche Text ausgegeben. Deine Beschreibung klang allerdings so, als wolltest du in der Schleife den Wert aktualisieren. In dem Fall muss dann natürlich auch der Aufruf von
requests.get in der Schleife durchgeführt werden.
Re: Request mehrmals durchführen, wie for Schleife benutzen?
Verfasst: Mittwoch 17. Dezember 2014, 21:48
von SeriousRuffy
Vielen Dank für dein Feedback!!!
Re: Request mehrmals durchführen, wie for Schleife benutzen?
Verfasst: Donnerstag 8. Januar 2015, 11:19
von SeriousRuffy
Hallo zusammen,
bin mittlerweile weitergekommen, allerdings hake ich bei einem Schritt.
Ich habe nun ein Counter eingefügt weil ich wissen will, wieviel mal der gewünschte Wert nicht gefunden wurde.
Im Beispiel unten wurde dreimal was gefunden, d.h. der Counter sollte mir am Ende eigentlich darstellen : Anzahl: 0
Leider weiß ich nicht, was ich genau falsch mache. Könnt ihr mir weiter helfen?
Code: Alles auswählen
import requests
counter = {"empty": 0};
for r in range(3):
r = requests.get("http://blabla")
response = r.json()
Hallo = response[0]["List"][0].get("ID")
print(Hallo)
if not Hallo:
current_counter = counter['empty'];
current_counter +1;
counter['empty'] = current_counter;
print("Anzahl:", counter['empty'])
626
626
626
Re: Request mehrmals durchführen, wie for Schleife benutzen?
Verfasst: Donnerstag 8. Januar 2015, 12:36
von BlackJack
@SeriousRuffy: Du gibst den Zähler ja nur aus wenn etwas nicht gefunden wurde. Also jedes mal wenn etwas nicht gefunden wurde. Also niemals wenn immer etwas gefunden wurde.
Und das wird selbst wenn etwas nicht gefunden wurde immer bei 0 bleiben denn Du erhöhst den Wert nie. Du denkst vielleicht das Du das bei den Zeilen mit den unnötigen Semikolons am Ende tust, aber so funktioniert das nicht. Eine normale Addition mit ganzen Zahlen verändert keine Werte sondern hat die Summe als Ergebnis. Mit diesem Ergebnis tust Du dann aber nichts. Da drei Zeilen für zu schreiben ist sowieso ein wenig übertrieben. Und warum steckt das als einziges Schlüssel/Wert-Paar in einem Wörterbuch? Das sieht auch unnötig umständlich aus.
Re: Request mehrmals durchführen, wie for Schleife benutzen?
Verfasst: Donnerstag 8. Januar 2015, 12:45
von SeriousRuffy
BlackJack hat geschrieben:@SeriousRuffy: Du gibst den Zähler ja nur aus wenn etwas nicht gefunden wurde. Also jedes mal wenn etwas nicht gefunden wurde. Also niemals wenn immer etwas gefunden wurde.
Und das wird selbst wenn etwas nicht gefunden wurde immer bei 0 bleiben denn Du erhöhst den Wert nie. Du denkst vielleicht das Du das bei den Zeilen mit den unnötigen Semikolons am Ende tust, aber so funktioniert das nicht. Eine normale Addition mit ganzen Zahlen verändert keine Werte sondern hat die Summe als Ergebnis. Mit diesem Ergebnis tust Du dann aber nichts. Da drei Zeilen für zu schreiben ist sowieso ein wenig übertrieben. Und warum steckt das als einziges Schlüssel/Wert-Paar in einem Wörterbuch? Das sieht auch unnötig umständlich aus.
Danke für dein Feedback BlackJack.
Mir ist bewusst das es etwas umständlich ist, aber das liegt daran das ich mich nach und nach in das Thema einarbeite. Mein Knowledge ist nicht stark, aber versuche es ständig zu erweitern.
Kannst du mir eventuell sagen, wie ich weiter vorgehen kann?
Re: Request mehrmals durchführen, wie for Schleife benutzen?
Verfasst: Donnerstag 8. Januar 2015, 13:29
von Sirius3
@SeriousRuffy: laß einfach alles weg, was es kompliziert macht:
Code: Alles auswählen
import requests
counter = 0
for r in range(3):
r = requests.get("http://blabla")
response = r.json()
Hallo = response[0]["List"][0].get("ID")
print(Hallo)
if not Hallo:
counter = counter + 1
print("Anzahl:", counter['empty'])
man kann noch ausnutzen, das True 1 und False 0 ist:
Code: Alles auswählen
import requests
counter = 0
for r in range(3):
response = requests.get("http://blabla").json()
counter += not response[0]["List"][0].get("ID")
print("Anzahl:", counter['empty'])
Re: Request mehrmals durchführen, wie for Schleife benutzen?
Verfasst: Donnerstag 8. Januar 2015, 15:55
von SeriousRuffy
Vielen Vielen Dank für dein Feedback:)
Re: Request mehrmals durchführen, wie for Schleife benutzen?
Verfasst: Freitag 9. Januar 2015, 10:50
von SeriousRuffy
Noch eine kurze Frage, jetzt würde ich gerne wissen, wieviel mal der gewünschte Wert gefunden wurde. Leider kommt die folgende Meldung zurück:
else:
^
IndentationError: unexpected indent
Weiss aber ehrlich gesagt nicht, wo genau der Fehler liegt.
Kann mir diesbezüglich einer weiter helfen?
Code: Alles auswählen
import requests
counter = 0
for r in range(3):
r = requests.get("http://blabla")
response = r.json()
Hallo = response[0]["List"][0].get("ID")
print(Hallo)
if not Hallo:
counter = counter + 1
print("Missing: " + str(counter))
else:
counter[Hallo] = 1
print("Da " + str (counter[Hallo]))
Re: Request mehrmals durchführen, wie for Schleife benutzen?
Verfasst: Freitag 9. Januar 2015, 11:29
von /me
Dir ist schon klar, dass Einrückung in Python-Code eine Bedeutung hat?
Hast du mal in die Zeile vor dem else: geschaut? Dort beendest du bereits die for-Schleife.
Re: Request mehrmals durchführen, wie for Schleife benutzen?
Verfasst: Freitag 9. Januar 2015, 12:03
von SeriousRuffy
Sorry, das ist ein blöder Fehler von mir.
Code: Alles auswählen
import requests
counter = 0
for r in range(3):
r = requests.get("http://blabla")
response = r.json()
Hallo = response[0]["List"][0].get("ID")
print(Hallo)
if not Hallo:
counter = counter + 1
print("Missing: " + str(counter))
else:
counter[Hallo] = 1
print("Da " + str (counter[Hallo]))
Jetzt bekomme ich allerdings die folgende Meldung:
line 15, in <module>
counter[Hallo] = 1
TypeError: 'int' object does not support item assignment
Kannst du mir diesbzuglich Tipps geben wie ich hier weiter machen kann?
Re: Request mehrmals durchführen, wie for Schleife benutzen?
Verfasst: Freitag 9. Januar 2015, 13:10
von Sirius3
@SeriousRuffy: was soll denn counter[Hallo] sein? Warum wird 3 mal das selbe gemacht? Warum wird was gezählt und was soll damit angefangen werden?
Re: Request mehrmals durchführen, wie for Schleife benutzen?
Verfasst: Freitag 9. Januar 2015, 13:11
von Hyperion
Da steht es doch schon: ``TypeError`` und ``int object``... ein Integer-Objekt bietet eben keinen Zugriff über die "Klammeroperatoren", also ``1[42]`` geht eben nicht.
Außerdem sieht die Einrückung schon wieder falsch aus

Re: Request mehrmals durchführen, wie for Schleife benutzen?
Verfasst: Dienstag 13. Januar 2015, 13:59
von SeriousRuffy
Vielen Dank für euer Feedback. Nach einigen Hin und her habe ich es hinbekommen:
Code: Alles auswählen
import requests
counter = 0
times = 3
for r in range(times):
r = requests.get("blabla")
response = r.json()
Hallo = response[0]['enrichedList'][0].get("roomDesc")
print('>>'+Hallo+'<<')
if not Hallo:
counter = counter + 1
print("Missing: " + str(counter))
print("Successful: " + str(times-counter))
Allerdings habe ich bei einem anderen Request eine Frage:
Code: Alles auswählen
import requests
response = requests.get("blabla")
data = response.json()
Hallo = data[0]["responseBodies"][0]
print(Hallo)
{"diagnostic":{"status":200,"elapsetime":"0.2692","memoryusage":"9.07MB","unix_timestamp":1421153447,"confirm":"success","lang":"id","currency":"IDR"},"output_type":"json","result":[{"hotel_id":"144861","hotel_description":"Terletak strategis diwilayah Palembang, Zuri Express Palembang menawarkan kenyamanan dan nilai yang baik.","hotel_name":"Zuri Express Palembang","star_rating":"2","photo_primary":"https:\/\/www.tiket.com\/img\/business\/r\/o\/business-room-orange3.sq2.jpg","business_lat":"-2.96680950000000000000","business_long":"104.76957149999998000000","address":"Jl Dr. M. Isa no 988 , Ilir Timur II, Palembang","rooms":[{"room_available":"30","room_max_occupancy":"2","room_id":"2981","with_breakfast":"1","star_rating":"2","tripadvisor_rating":"{\"name\":\"Zuri Express Hotel\",\"url\":\"http:\\\/\\\/www.tripadvisor.com\\\/Hotel_Review-g608501-d2313959-Reviews-m18379-Zuri_Express_Hotel-Palembang_South_Sumatra_Sumatra.html\",\"reviewcnt\":\"34\",\"avgrating\":\"3.5\"}","average_rate_per_night":515000,"hotel_id":"144861","room_name":"Express Room","room_facility":["AC","Air mineral botol gratis","Surat kabar harian","Meja","Shower Panas & Dingin","Akses Internet - Wifi","Televisi LCD\/layar plasma","Bar kecil","Cermin","Satelit\/TV kabel","Shower","Sandal","Telepon"],"room_description":"Terletak strategis diwilayah Palembang, Zuri Express Palembang menawarkan kenyamanan dan nilai yang baik. Pengunjung bisnis akan menghargai bahwa semua bisnis lokal dalam jangkauan lokasi hotel ini. Hotel bintang tiga ini dekat Stadion Sultan Agung, Stadion Gelora Sriwijaya, 30-menit berkendara dari Sultan Mahmud Badaruddin II dan 20 menit dari Jembatan Ampera.\nHotel ini menawarkan kenyamanan pusat bisnis, layanan loundry, parkir gratis, sebuah restoran dan reseptionis 24-jam.\nKamar-kamar memiliki kamar mandi pribadi dengan fasilitas shower air panas dan dingin. Terang dan lapang, kamar dilengkapi dengan tempat tidur putih bersih dan TV satelit layar datar.","all_photo_room":["http:\/\/www.tiket.com\/img\/business\/r\/o\/business-room-orange1.room.jpg"],"bookUrl":"http:\/\/api.tiket.com\/hotel\/indonesia\/palembang\/palembang\/zuri-express-palembang?uid=business%3A144861&adult=2&child=0"}
type(Hallo)
<class 'str'>
Wie ihr sehen könnt, wurde die Response in "str" wiedergegeben. Jetzt würde ich gerne den Wert "Status" aus der Response extrahieren, allerdings weiß ich nicht wie ich genau vorgehen soll. Mit der get. Methode fuktioniert es nicht, da es sich ja nicht um ein Dict. handelt.
Sollte ich die Response erst wieder in einem Dict. umwandeln? Und dann mir den gewünschten Wert holen? Oder geht das einfacher? Wäre für jede Hilfe dankbar:)