2013-08-29 59 views
3

我試圖做一些webscrapping,它包括髮送一個多選框列表看起來類似於這樣的形式:pycurl,如何發送多個選擇窗體的POST數據?

<select name="multipleSelectForm" multiple="multiple" size="5"> 
    <option value="value1">value1</option> 
    <option value="value2">value2</option> 
</select> 

現在,我想用pycurl同時發送value1和值2,爲例如:

import urllib 
import pycurl 

c = pycurl.Curl() 

data = {'multipleSelectForm':'value1', 
     'multipleSelectForm':'value2'} 

c.setopt(c.URL, 'http://www.example.com') 

c.setopt(c.POST, 1) 
post = urllib.urlencode(data) 
c.setopt(c.POSTFIELDS, post) 

c.perform() 

現在很明顯的問題是它發送multipleSelectForm多次。我很確定所請求的頁面可能正在尋找一個multipleSelectForm數組,而不僅僅是單個變量(這只是一個猜測,我不確定),因此它收到的POST數據是不正確的。

我嘗試使用谷歌Chrome瀏覽器的開發工具看到它在做什麼業務,當我看着表單數據,它是這樣的:

multipleSelectForm:value1 
multipleSelectForm:value2 

我有點失去了對如何處理這一切,如果有人會關心,幫助

回答

1

從它看起來像你發送打算只是

{ 'multipleSelectForm':'value2' } 

因爲它是一本字典的數據。如果你把它設置成元組對,它會做你想做的。

data = (('multipleSelectForm', 'value1'), ('multipleSelectForm', 'value2')) 

您可以通過設置一個很小的調試http服務器測試這個你自己:

from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer                                                      

class hand(BaseHTTPRequestHandler):           
    def __init__(self, socket, *args):          
     print socket.recv(10000)            

server = HTTPServer(('', 8080), hand)           
server.serve_forever()              

,然後用你的腳本擊中它。我用這個來確認傳遞元組列表是否符合我的期望。