我想编写一个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是我的查询。
答案 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})