2016-04-08 26 views
0

this sayfasından bazı bilgileri ayrıştırmaya çalışıyorum ve sayfayı "Packungsgröße" adındaki açılır menüden diğer seçeneklerle yeniden yükleyin. 3 seçenek var, bu yüzden tüm seçenekler için aynı sayfayı taramaya çalışıyorum.Form göndermek için Scrapy FormRequest.from_response() yöntemi nasıl kullanılır?

class="upprice_config" ve POST şeklini doğru verilerle kullanabileceğimi öğrendim. Tam olarak hangi veriyi temin etmem gerektiğini bilmiyorum, bu yüzden elimden gelen her şeyi tedarik ediyorum. Sonra ayrıştırma için aynı işlevi çağırırım.

Herhangi bir şekilde, istediğim şekilde çalışmıyor. Bana herhangi bir hata vermez ve form gönderimini yürütür gibi görünüyor, ancak gerekli sayfayı almıyorum.

... 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) 

birileri burada yanlış yapıyorum ne işaret edebilir:

İşte benim kodudur. Bunu yapmak için daha iyi bir yol varsa, lütfen benimle paylaşın.

cevap

2

Eğer firefox firebug yüklemek ve veri web sitesi gönderme olduğunu kontrol etmek deneyin kullanıyorsanız

onlar Ya bu verileri gönderebilir veya ben sadece seni kontrol seçenek değerini

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> 

gönderiyorsunuz görebilirsiniz GET çağrıları yapabilir çok

şey

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

İyi poi gibi 'GET' hakkında nt. Teşekkür ederim. Sanırım, isteği biraz farklı göndermem gerek. Chrome'da bu "POST" argümanlarını bulabilir miyim? – Olexandr

+0

neden, sadece google sorgusu ağda ağ istekleri görmek nasıl ve bir cevap bulacaksınız ... Eğer bu cevap sizin için yararlı ise sadece bir cevap olarak işaretlemek sadece –

+0

Teşekkür ederim. Dava için başka bir seçenek olan birinin olup olmadığını görmek için biraz beklemek istiyorum. – Olexandr