1

我正在尝试将一些文本传递给这个可读性 API,如下所示:

text = 'this reminds me of the Dutch 2001a caravan full of smoky people Auld Lang Syne'
# construct Readability Metrics API url
request_url = 'http://ipeirotis.appspot.com/readability/GetReadabilityScores?format=json&text=%s' % text
request_url = urllib.quote_plus(request_url.encode('utf-8'))
# make request
j = json.load(urllib.urlopen(request_url))

我在最后一行得到了这个错误:

[Errno 2] 没有这样的文件或目录:'http://ipeirotis.appspot.com/readability/GetReadabilityScores?format=json&text=this+reminds+me+of+the+Dutch+2001a+caravan+full+of+smoky +人+Auld+Lang+Syne'

但是,错误中的 URL 是有效的,并在您访问它时返回响应。如何对 URL 进行编码以便可以使用 urlopen?非常感谢。

4

2 回答 2

3

您引用了完整的 url,包括 http:// 等等。如果您尝试打印 request_url 的实际值,您会得到

>>> print request_url
http%3A%2F%2Fipeirotis.appspot.com%2Freadability%2FGetReadabilityScores%3Fformat
%3Djson%26text%3Dthis+reminds+me+of+the+Dutch+2001a+caravan+full+of+smoky+people
+Auld+Lang+Syne

这不是你想要的。您只想引用您想成为网站的单个参数的部分。我尝试了以下,它似乎工作:

text = 'this reminds me of the Dutch 2001a caravan full of smoky people Auld Lang Syne'
# construct Readability Metrics API url
request_url = 'http://ipeirotis.appspot.com/readability/GetReadabilityScores?format=json&text=%s' % urllib.quote_plus(text.encode('utf-8'))
# make request
j = json.load(urllib.urlopen(request_url))
于 2011-12-04T18:09:56.873 回答
1

使用 urllib.urlencode 仅对查询字符串进行编码,如下所示:

request_url = 'http://ipeirotis.appspot.com/readability/GetReadabilityScores?%s' % urllib.urlencode({'format': 'json', 'text': text})

对整个 URL 进行编码将对斜杠和冒号进行编码,并且您希望它们保持未编码,以便将其正确解析为 URL(并且不会被误认为是本地文件)。

于 2011-12-04T18:12:02.613 回答