python
  • cgi
  • urllib
  • 2011-08-02 53 views 1 likes 
    1

    我想編寫一個CGI腳本,它將表單數據,發送到搜索引擎,搜索,然後在網頁上顯示我的CGI腳本它的結果跑。我一直在嘗試使用urllib和urllib2。Python中的CGI腳本來搜索數據庫並打印結果

    在我的腳本:hello.py

    if form.has_key("data_search"): 
        datasearch = form["data_search"].value 
    
        url = 'http://www.example.com/' 
    
        data = urlparse.urlparse(datasearch) 
        data2 = urllib.urlencode(data) 
    
    
        req = urllib2.Request(url, data2) 
        response = urllib2.urlopen(url, data2) 
        the_page = response.read() 
    
        print response 
        response.close() 
    

    所以我想借用戶輸入(datasearch),它在不同的網址(www.example.com)發送到搜索引擎,以及在我的網頁上打印搜索結果(www.server.com/cgi-bin/hello.py)。

    此當前腳本不起作用。我不確定我是否犯了某種語法錯誤,或者是否需要完全使用新的方法。

    第一個錯誤是在

    DATA2 = urllib.urlencode(數據)

    內建類型錯誤= 類型錯誤:不是一個有效非字符串序列或映射對象 ARGS =('不是一個有效的非('','','TTBar','','',''),而TTBar是我的查詢的結果。

    +0

    我不明白,是什麼問題? – MatthewWilkes

    +0

    現在我編輯的問題更清楚了嗎? – Katie

    +0

    事情出錯了?請打印您收到的任何堆棧跟蹤(如果您剛剛獲得HTTP 500錯誤,請通過並添加一些打印語句來查看您獲得了多少/某些值)。 –

    回答

    1

    不知道如何獲取表單數據,但看起來datasearch = form["data_search"].value已返回您的data_search參數的值。使用urlparse.urlparse解析完整的網址,即http://somesite.com/?datasearch=TTBAR。因此,考慮到這一點,你可以這樣做:

    import urllib2 
    
    url = 'http://example.com' 
    datasearch = 'TTBAR' 
    req = urllib2.Request(url, {'param': datasearch}) 
    resp = urllib2.urlopen(req) 
    

    甚至更​​好用出色的requests庫:

    resp = requests.post(url, {'param': datasearch}) 
    
    相關問題