2017-10-23 1 views
0

Ich erstelle eine URL mit {} -Format, um die URL im laufenden Betrieb zu ändern. Es funktioniert völlig gut auf meinem PC. Aber sobald ich es von scrapinghub hochladen und ausführen eine der vielen Substitutionen (andere funktionieren) funktioniert nicht, gibt es% 7B% 7D & in der URL, die geschweifte geschweifte Klammern codiert ist. Warum passiert das? Was vermisse ich beim Referenzieren der Zustandsvariablen?Textersetzung {} funktioniert nicht bei scrapinghub

Dies ist die URL von meinem Code:

def __init__(self): 

    self.state = 'AL' 
    self.zip = '35204' 
    self.tax_rate = 0 
    self.years = [2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017] 

def parse_m(self, response): 
    r = json.loads(response.text) 
    models = r['models'] 
    year = response.meta['year'] 
    make = response.meta['make'] 
    for model in models: 
     for milage in [40000,50000,60000,70000,80000,90000,100000]: 
      url = '****/vehicles/?year={}&make={}&model={}&state={}&mileage={}&zip={}'.format(year,make, model, self.state, milage, self.zip) 

und dies ist die URL i im Protokoll von scrapinghub sehen:

***/vehicles/?year=2010&make=LOTUS&model=EXIGE%20S&state=%7B%7D&mileage=100000&zip=35204 
+0

Bitte den Code richtig einrücken. Wenn Ihre for-Schleifen nicht in einer Klassenmethode enthalten sind, gibt der self.state nichts von Wert zurück und formatiert die Zeichenfolge wahrscheinlich nicht wie gewünscht. –

+0

Feste Einrückungen. Nicht sicher, was du mit Klassenmethoden meinst. Aber wie Sie sehen, funktioniert die Variable self.zip perfekt. Obwohl sie die gleiche Formatierung und Verwendung haben, soweit ich sehe. –

+0

Das scheint wirklich seltsam ... Eine schnelle und dreckige Lösung wäre, sie einfach durch ein '.replace ('{}', '')' am Ende der URL zu ersetzen. Hast du versucht, das lokal auszuführen? Wie lädst du deinen Code in scrapinghub hoch? –

Antwort

0

Dieses Problem ist kein scrapinghub ist. Es muss nur dein Code sein. Wenn ich unter

>>> "state={}".format({}) 
'state={}' 

tun am Ende Dies würde

state=%7B%7D 

zu sein, würde ich

assert type(self.state) is str 

zu meinem Code hinzufügen, um diese Situation zu gewährleisten, nicht passieren, und wenn es funktioniert, dann Sie erhalten Sie eine AssertionError

Verwandte Themen