0

所以我在我的 apache 服务器上运行了一个 Python CGI 脚本。基本上,用户从网页中输入一个单词到表单中,然后将该单词传递给脚本。然后使用该词查询 Twitter 搜索 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>"
4

2 回答 2

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>
于 2013-05-15T02:58:36.123 回答
1

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

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

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

于 2013-05-15T02:59:36.513 回答