2016-04-08 2 views
0

Ich versuche einige Informationen von der Seite this zu parsen und lade dann die Seite mit anderen Optionen aus dem Drop-Down-Menü "Packungsgröße" neu. Es gibt 3 Möglichkeiten, also versuche ich die gleiche Seite für alle Optionen zu kratzen.Wie verwende ich die Scrapy FormRequest.from_response() Methode um ein Formular zu senden?

Ich fand heraus, dass ich die Form von class="upprice_config" und POST es mit den richtigen Daten verwenden kann. Ich weiß nicht genau, welche Daten ich liefern muss, also versorge ich alles, was ich habe. Dann rufe ich die gleiche Funktion zum Parsen auf.

Irgendwie funktioniert es nicht so, wie ich es möchte. Es gibt mir keinen Fehler und scheint, dass es die Formularübermittlung ausführt, aber ich bekomme die erforderliche Seite nicht.

Hier ist mein Code:

... def parse_product(self, response): 
120  sc_menu = response.xpath('//form[@class="upprice_config"]/div/select') 
121   if sc_menu: 
122    sel_name = sc_menu[0].xpath('@name').extract()[0] 
124    for opt in sc_menu[0].xpath('option'): 
126     if opt.xpath('@selected'): 
127      selected = opt.xpath('text()').extract()[0] 
129      product['options'] = selected.strip() 
130 
131      yield product 
132 
133     # extract value 
134     value = opt.xpath('@value').extract()[0] 
136     # submit form for the new option 
137     self.submit_form(response, value, sel_name) 
138   else: 
139    product['options'] = '' 
140 
141    yield product 
142 
143 
144 # submit form for the new option 
145 def submit_form(self, response, value, sel_name): 
146  formdata = {'method': 'POST', 
147     'action': response.url, 
148     'value': value} 
149  scrapy.http.FormRequest.from_response(response, 
150     formdata = formdata, 
151     clickdata = {'name': sel_name}, 
152     callback = self.parse_product) 

jemand mir zeigen kann, was ich falsch hier tue. Wenn es einen besseren Weg gibt, teilen Sie das bitte mit mir.

Antwort

2

, wenn Sie mit Firefox versuchen Firebug zu installieren und überprüfen, welche Daten Website

postet kann ich sehen, dass sie eine Mitteilung verfassen Optionswert

select class="form-control" onchange="this.form.submit();" name="group[1]"> 
    <option value="3"> 3kg </option> 
    <option value="233" selected="selected"> 10kg </option> 
    <option value="3603"> 25kg </option> 

entweder können Sie diese Daten veröffentlichen oder ich Sie gerade überprüft etwas get Anfragen Stellen zu

wie

http://www.zooroyal.de/muehldorfer-pferdeleckerli-bio-bronchial?c=6259&group[1]=233 
http://www.zooroyal.de/muehldorfer-pferdeleckerli-bio-bronchial?c=6259&group[1]=3603 
+0

Gut poi können über das 'GET'. Vielen Dank. Ich denke, ich muss die Anfrage etwas anders posten. Kann ich diese 'POST'-Argumente in Chrome finden? – Olexandr

+0

warum nicht, machen Sie einfach eine Google-Abfrage, wie Sie Netzwerk-Anfragen in Chorme sehen und Sie werden eine Antwort finden ... Wenn diese Antwort hilfreich für Sie ist, markieren Sie es einfach als Antwort –

+0

Vielen Dank. Ich möchte ein wenig warten, um zu sehen, ob es jemanden mit einer anderen Option für meinen Fall gibt. – Olexandr

Verwandte Themen