urllib3.urlencode来自字符串的googlescholar网址

时间:2016-02-21 20:57:43

标签: python python-3.x urllib3

我正在尝试将字符串编码为url以搜索谷歌学者,很快就会发现,urlencode中未提供urllib3

>>> import urllib3
>>> string = "https://scholar.google.com/scholar?" + urllib3.urlencode( {"q":"rudra banerjee"} )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'urlencode'

所以,我检查了urllib3 doc并发现,我可能需要request_encode_url。但我没有使用它的经验而且失败了。

>>> string = "https://scholar.google.com/scholar?" +"rudra banerjee"
>>> url = urllib3.request_encode_url('POST',string)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'request_encode_url'

那么,我如何将字符串编码为url?

NB 我对urllib3没有任何特别的兴趣。所以,任何其他模块也会这样做。

2 个答案:

答案 0 :(得分:1)

要简单地对网址中的字段进行编码,您可以使用urllib.urlencode

在Python 2中,这应该可以解决问题:

import urllib
s = "https://scholar.google.com/scholar?" + urllib.urlencode({"q":"rudra banerjee"})
print(s)
# Prints: https://scholar.google.com/scholar?q=rudra+banerjee

在Python 3中,它位于urllib.parse.urlencode之下。

答案 1 :(得分:0)

编辑:我认为你想要下载网址,而不是简单地对其进行编码。我的错误。我会将此答案作为其他人的参考,但请参阅编码的其他答案URL。)

如果您将字典传递到fields,urllib3将负责为您编码。首先,您需要为您的连接实例化一个池。这是一个完整的例子:

import urllib3
http = urllib3.PoolManager()

r = http.request('POST', 'https://scholar.google.com/scholar', fields={"q":"rudra banerjee"})
print(r.data)

调用.request(...)将根据方法为您计算编码。

入门示例如下:https://urllib3.readthedocs.org/en/latest/index.html#usage