【问题标题】:CGI Script in Python to search a database and print the resultsPython 中的 CGI 脚本,用于搜索数据库并打印结果
【发布时间】:2011-08-02 14:06:28
【问题描述】:

我想编写一个 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),将其发送到不同 url (www.example.com) 的搜索引擎,并在我的网页 (www.server.com) 上打印搜索结果/cgi-bin/hello.py)。

当前的脚本不工作。我不确定我只是犯了某种语法错误,或者我是否完全需要一种新方法。

第一个错误在

data2 = urllib.urlencode(数据)

内置类型错误 = TypeError:不是有效的非字符串序列或映射对象 args = ('不是一个有效的非字符串序列或映射对象',)

'print data' 的结果是 ('', '', 'TTBar', '', '', '') 并且 TTBar 是我的查询。

【问题讨论】:

  • 我不明白,有什么问题?
  • 我已经编辑了问题是否更清楚了?
  • 哪里出了问题?请打印您收到的任何堆栈跟踪(如果您只是收到 HTTP 500 错误,请查看并添加一些打印语句以查看您获得了多远/其中一些值是多少)。
  • “不工作”到底是什么意思?你得到一个错误或只是一个空白页?

标签: python cgi urllib


【解决方案1】:

不确定您是如何获取表单数据的,但似乎datasearch = form["data_search"].value 已经返回了您的data_search 参数的值。使用urlparse.urlparse 解析完整的url,即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})

【讨论】:

    猜你喜欢
    • 2022-01-14
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    • 2012-01-15
    • 2017-09-29
    相关资源
    最近更新 更多