Python中的CGI脚本用于搜索数据库并打印结果

时间:2011-08-02 14:06:29

标签: python cgi urllib

我想编写一个CGI脚本来获取表单数据,将其发送到搜索引擎,搜索,然后在运行我的cgi脚本的网页上显示结果。我一直在尝试使用urllib和urllib2。

在我的脚本中: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(data)

builtin TypeError = TypeError:不是有效的非字符串序列或映射对象       args =('不是有效的非字符串序列或映射对象',)

“打印数据”的结果是('','','TTBar','','','')和TTBar是我的查询。

1 个答案:

答案 0 :(得分:1)

不确定如何获取表单数据,但似乎datasearch = form["data_search"].value已经返回data_search param的值。使用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})