2016-09-17 3 views
0

I scrapy bin mit einer Website zu analysieren, die die folgende Form hat:Scrapy - Formulardaten mit mehreren Optionen senden

<form id="form1"...> 
    <select name="codes" multiple="multiple"...> 
     <option value="0">Option one</option> 
     <option value="1">Option two</option> 
     <option value="2">Option three</option> 
     .... 
    </select> 
</form> 

Ich Füllen und das Formular mit dem folgenden Code einreichen:

submit_form = FormRequest.from_response(response, 
             formxpath="//form[@id='form1']", 
             formdata={'codes': '0'}, 
             callback=self.parse_table) 
yield submit_form 

Wie kann ich mehrere Codes in die Formulardaten eingeben? Ich habe es versucht:

formdata={'codes': '["0", "1", "2"]'}, 
formdata={'codes': ['0', '1', '2']}, 

Ohne Glück.

EDIT:

Die Form hat zusätzliche Eingabesteuerungen, versteckt einige von ihnen, die in der Form korrekt übergeben werden. Nach dem Senden des Formulars sehe ich, dass der Server auf die gleiche Seite mit dem Formular zurückkehrt, wenn ich eine neue Seite mit einer Tabelle erwarte, die tatsächlich die Daten enthält, die ich abrufen möchte.

Ich weiß nicht viel über das Server-Backend mehr als dass es mit .NET 2.0 gebaut wurde. Es ist eine sehr alte Seite aus einer Regierungsabhängigkeit.

Danke.

+1

Gibt es versteckte Felder in diesem Formular, die nicht korrekt übergeben werden? –

+0

'formdata = {'codes': ['0', '1', '2']}, sollte es richtig codiert haben. Ich fürchte, da stimmt etwas nicht. Kannst du "Ohne Glück" im Fragenkörper beschreiben? Können Sie eine Beispiel-URL angeben? – starrify

+0

Danke @ kiran.koduru. Bitte sehen Sie meine aktualisierte Frage –

Antwort

1

Form mit mehreren Optionen zu schicken, sollten Sie versuchen, Formulardaten in folgendem Format

formdata = {} 
formdata['codes[]'] = ["0","1","2","3"] 

yield scrapy.FormRequest.from_response(
      response=response, 
      formid='UserLoginForm', 
      formdata=formdata, 
      callback=self.search_result, 
     ) 

zu überprüfen, ob Codes Wert im erforderlichen Format eingereicht, hier vorbei ist die Ausgabe von request_body

codes%5B%5D=0&codes%5B%5D=1&codes%5B%5D=2&codes%5B%5D=3 

unquote

codes[]=0&codes[]=1&codes[]=2&codes[]=3 

aufgeteilt auf &

codes[]=0 
codes[]=1 
codes[]=2 
codes[]=3 
Verwandte Themen