urllib HTML mit Variable

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
evd
User
Beiträge: 34
Registriert: Donnerstag 20. Juni 2013, 19:19

hallo zusammen

Ich wollte mir ein Programm schreiben das auf der Seite von Amazon, unter den "Album für unter 5€" angeboten mir alle rausfiltert die von meinen Lieblingsbands sind...

das habe ich auch so weit schon geschafft. Geschrieben wird die Band, Album und Preis.

Nur Leider habe ich ein Problem mehr als nur eine Seite aufzurufen

Hier mal mein Quelltext:

Code: Alles auswählen

import urllib.request

#geht alle Seiten durchm (hier 400)
for i in range (1,401):
    f="http://www.amazon.de/s/ref=sr_pg_", i, "?rh=n%3A77195031%2Cp_36%3A200-499%2Cp_n_format_browse-bin%3A180848031&bbn=77195031&ie=UTF8&qid=1394899533"
    response = urllib.request.urlopen(f)
    amazon = str(response.read())
    
    #Suchen aller "Die Drei ???" CD auf der Seite + Preis
    a = "Die Drei ???"
    print(a)
    anfang = 0
    ende = 0
    while ende <= 0:
        
        #Sind (noch andere) CD's da?
        try:
            h1 = amazon.index(a,anfang)
            h2 = amazon.index("/a",h1)
            Preis = amazon.index("EUR",h1)
            Album1 = amazon.index('srTitle', h1-300)
            Album2 = amazon.index("span", Album1+10)
            print(amazon[Album1+9:Album2-2])
            print(amazon[Preis+4:Preis+8],"€")
            anfang = Preis
            nächstes=input("")
            
        #wenn nicht dann raus, und zur nächsten Seite!
        except ValueError:
            if i==401:
                print("_________________________________das war alles von'",a,"'")
                ende = 1
            else:
                ende = 1
Habt ihr eine Ahnung wie ich die Fehlermeldung:
Traceback (most recent call last):
File "/home/evd/Schreibtisch/Amazon/amazon.py", line 6, in <module>
response = urllib.request.urlopen(f)
File "/usr/lib/python3.3/urllib/request.py", line 156, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib/python3.3/urllib/request.py", line 460, in open
req.timeout = timeout
AttributeError: 'tuple' object has no attribute 'timeout'
beheben kann?

Ich würde mich über eine Antwort Freuen

Grüße
EvD
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Lies mal ein Tutorial über Stringformatierung, das sollte relativ früh kommen. Tupel trennt man mit Komma.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@evd: was soll denn »f« sein? Und was ist es wirklich?
»read« liefert schon einen String, die Umwandlung ist also unsinnig. Das ganze Durchsuchen der Seite ist sehr magisch und fragil. Schau Dir mal eine HTML-Parserbibliothek wie Beautifulsoup oder lxml an.
evd
User
Beiträge: 34
Registriert: Donnerstag 20. Juni 2013, 19:19

@Sirius3

ich dachte auch das read mir ein string liefert, aber wenn ich es weg nehme meckert er herum, das er keinen String habe... also... ka

"f" soll dann die zusammengesetzte Version der URL sein... die nach jedem Durchlauf die nächste Seite aufruft.
Antworten