Python CGI脚本返回不一致的结果

时间:2013-05-15 02:27:27

标签: python twitter cgi python-webbrowser

所以我在我的apache服务器上运行了一个Python CGI脚本。基本上,从网页中,用户将单词输入到表单中,并将该单词传递给脚本。然后使用该单词查询Twitter Search API并返回该单词的所有推文。所以问题是,我在一个循环中运行这个查询,所以我得到三页结果返回(大约300条推文)。但是我称之为脚本(将所有推文打印成HTML页面),该页面有时会显示5条推文,有时候会显示18条完整的随机数。这是一个超时问题,还是我在代码中遗漏了一些基本问题? Python CGI脚本发布在下面,提前感谢。

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 
import urllib
import json

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
topic = form.getvalue('topic')


results=[]


for x in range(1,3):
    response = urllib.urlopen("http://search.twitter.com/search.json?q="+topic+"&rpp=100&include_entities=true&result_type=mixed&lang=en&page="+str(x))
    pyresponse= json.load(response)
    results= results + pyresponse["results"]



print "Content-type:text/html\r\n\r\n"
print "<!DOCTYPE html>"
print "<html>"
print "<html lang=\"en\">"
print "<head>"
print "<meta charset=\"utf-8\" />"
print "<meta name=\"description\" content=\"\"/>"
print "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/>"
print "<title>Data analysis for %s </title>" %(topic)
print "</head>"
print "<body>"
print "<label>"
for i in range(len(results)):
    print str(i)+": "+results[i]["text"]+ "<br></br>"
print "</label>"
print "</body>"
print "</html>"

2 个答案:

答案 0 :(得分:1)

首先,我要指出range(1,3)不会像你期望的那样得到三页。

但是,在解释器中运行Python代码时会遇到异常:

>>> for i in range(len(results)):
...   print str(i) + ": "+ results[x]["text"]

<a few results print successfully>

UnicodeEncodeError: 'latin-1' codec can't encode character u'\U0001f611' 
in position 121: ordinal not in range(256)

然后修改编码将全部打印出来:

>>> for i in range(len(results)):
...   print str(i) + ": "+ results[i]["text"].encode('utf-8')
<success>

答案 1 :(得分:1)

好的,明白了。 这实际上是一个非常愚蠢的修复。基本上,由于Python正在解析JSON,因此需要将所有文本编码为UTF-8格式,以便正确显示。

print str(i)+": "+results[i]["text"].encode('utf-8')+ "<br></br>"

与脚本或服务器本身无关。