要通过urllib2库获取带有中文参数的url内容,需要注意以下几点:
- 中文参数需要转码为url能够识别的utf-8格式。
- urllib2库默认使用的User-Agent为Python-urllib/2.7,容易被服务器拦截,建议修改为浏览器的User-Agent。
- 使用Request对象传递参数和Header。
下面给出两个示例来说明:
示例1:获取有道翻译的结果
# -*- coding: utf-8 -*-
import urllib
import urllib2
def youdao_translate(q):
# 构造url
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
data = {'type': 'AUTO', 'doctype': 'json', 'version': '2.1', 'keyfrom': 'fanyi.web', 'action': 'FY_BY_REALTIME',
'typoResult': 'false'}
data['i'] = q.encode('utf-8')
# 修改User-Agent
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:63.0) Gecko/20100101 Firefox/63.0'}
# 构造Request对象
req = urllib2.Request(url=url, data=urllib.urlencode(data), headers=headers)
response = urllib2.urlopen(req)
result = response.read()
print result
if __name__ == '__main__':
youdao_translate(u'中文')
上述代码中,我们构造了url,并将中文参数转换成了utf-8格式,将修改过的User-Agent放入headers中,最后构造出了Request对象并传入urllib2.urlopen()中获取结果。
示例2:在知乎中搜索Python相关内容
# -*- coding: utf-8 -*-
import urllib
import urllib2
def search(keyword):
# 构造url
url = 'https://www.zhihu.com/search?type=content&q='
query = keyword.encode('utf-8')
url += urllib.quote(query)
# 修改User-Agent
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:63.0) Gecko/20100101 Firefox/63.0'}
# 构造Request对象
req = urllib2.Request(url=url, headers=headers)
response = urllib2.urlopen(req)
result = response.read()
print result
if __name__ == '__main__':
search(u'Python')
上述代码中,我们先构造出搜索Python相关内容的url,将中文参数进行url编码,将修改过的User-Agent放入headers中,最后构造出了Request对象并传入urllib2.urlopen()中获取结果。
从上述两个示例可以看出,获取带有中文参数的url内容的方法就是将中文参数转码为utf-8格式,修改User-Agent,构造Request对象并传递参数和Header。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python通过urllib2获取带有中文参数url内容的方法 - Python技术站