Crawling - Variablen miteinander verknüpfen

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
SeriousRuffy
User
Beiträge: 32
Registriert: Dienstag 16. Dezember 2014, 21:16

Hallo zusammen,

ich habe versucht multiple Seiten aus einer Webpage zu crawlen, was mir auch gelungen ist. Im nächsten Schritt würde ich gerne zwei Variablen miteinander verknüpfen.

D.h. mein Ziel wäre es, das wenn ich nach der RegionID= 7236 crawle, das mir das System automatisch die partnerID = 2 wiedergibt und wenn ich die RegionID = 7665 crawle, das ich dann die partnerID = 3 zurück bekomme u.s.w

Das ist mein Code:

Code: Alles auswählen

front_deeplink = ("http://www.spasso.com")
RegionID = [7236, 7665, 6543, 6666]

for page in range(1,20):
    r = requests.get("http://www.spasso.com/affiliatesearch.aspx?&regionid=" + str(RegionID) + "&pid=" + str(page))
    soup = BeautifulSoup(r.content)


    g_data = soup.find_all("div", {"class": "gridHeadOuter productInfoOuter"})
    for item in g_data:
        Header = item.find_all("div", {"class": "offerInto"})
        Header_final = (Header[0].contents[0].text.strip())

        price = item.find_all("strong", {"class": "priceBig priceBlock"})
        Price_final = (price[0].text.strip())

        Deeplink = item.find_all("a")
        for t in set(t.get("href") for t in Deeplink):        
        Deeplink_final = (str(front_deeplink) + t)
        
        partner_ID = 2

	print("Header: " + Header_final + " | " + "Price: " + Price_final[:-1] + " | " + "Deeplink: " + Deeplink_final + " | " + "PartnerID: " + str(partner_ID))
Output ist zum Beispiel:

Code: Alles auswählen

Header: 1-hour Berlin Sightseeing Cruise | Price: 12.50 | Deeplink:   http://www.spasso.com/productinfo.aspx?id=25779 | PartnerID: 2

Header: Washington DC Open Top Hop-On Hop-Off Tour & Madame Tussauds Ticket | Price: 46.49 | Deeplink: http://www.spasso.com/productinfo.aspx?id=23589 | PartnerID: 2
Wie ihr sehen könnt, sollte ich optimalerweise für Washington am besten die PartnerID 3 zurückbekommen, weil die mit der RegionID = 7665 verknüpft ist.

Daher sollte der Output idealerweise so aus sehen:

Code: Alles auswählen

Header: 1-hour Berlin Sightseeing Cruise | Price: 12.50 | Deeplink:   http://www.spasso.com/productinfo.aspx?id=25779 | PartnerID: 2

Header: Washington DC Open Top Hop-On Hop-Off Tour & Madame Tussauds Ticket | Price: 46.49 | Deeplink: http://www.spasso.com/productinfo.aspx?id=23589 | PartnerID: 3

Mir ist bewusst, das ich das mit einerm If else Statement lösen könnte, aber da ich eine Menge von RegionIDs haben würde, würde ich es gerne effizienter gestalten.

Zudem habe ich es auch mit zwei Listen versucht, was aber auch nicht funktioniert hat.

Code: Alles auswählen

RegionID = [7236, 7665, 6543, 6666]
partner_ID = [2, 3, 4, 5]
Sollte ich eine Liste mit Tupeln erstellen? Wäre super wenn Ihr mit weiterhelfen könnt, weil ich momentan nicht weiter weiß.Danke für euer Feedback
Zuletzt geändert von Anonymous am Samstag 21. November 2015, 23:51, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@SeriousRuffy: Dein Code hat viel zu viele Klammern, das kann man ja nicht lesen. Statt selbst Parameter von URLs zusammenzustückeln, solltest Du ausnutzen, das Du requests die Parameter auch als Dictionary übergeben kannst. Mit den Einrückungen stimmt da auch irgendetwas nicht. Schau Dir mal Stringformatierung an. Und was spricht gegen ein Wörterbuch mit region als Key und partner_id als Value?
Antworten