一、urlopen的url参数
urllib.request.urlopen(url,data = None,[ timeout,] *,cafile = None,capath = None,cadefault = False,context = None )
其中,url不仅可以是一个字符串,也可以是一个request对象,这就需要我们先定义一个Request对象,然后将这个Request对象作为urlopen的参数使用
实例:
from urllib import request
import chardet
if __name__ == "__main__":
req = request.Request("http://fanyi.baidu.com")
response = request.urlopen(req)
html = response.read()
charset = chardet.detect(html)
html = html.decode(charset['encoding'])
print(html)
二,urlopen()返回的对象
可以使用read()进行读取,同样也可以使用geturl()方法、info()方法、getcode()方法。
geturl()返回的是一个url的字符串;
info()返回的是一些meta标记的元信息,包括一些服务器的信息;
getcode()返回的是HTTP的状态码,如果返回200表示请求成功。
实例:
from urllib import request
if __name__ == "__main__":
req = request.Request("http://fanyi.baidu.com/")
response = request.urlopen(req)
print("geturl打印信息:%s"%(response.geturl()))
print('**********************************************')
print("info打印信息:%s"%(response.info()))
print('**********************************************')
print("getcode打印信息:%s"%(response.getcode()))
3,urlopen的data参数
我们可以使用data参数,向服务器发送数据。根据HTTP规范,GET用于信息获取,POST是向服务器提交数据的一种请求
审查元素–>进行翻译—>查看network—>在headers中找到对应的Request URL以及Form Data
from urllib import request
from urllib import parse
import json
if __name__ == "__main__":
#注意:将traslate后面的_o去掉,可能是网站的真实请求地址发生了变动
Request_URL = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
#创建Form_Data字典,存储Form Data
Form_Data = {}
Form_Data['i'] = 'net'
Form_Data['from'] = 'AUTO'
Form_Data['to'] = 'AUTO'
Form_Data['smartresult'] = 'dict'
Form_Data['client'] = 'fanyideskweb'
Form_Data['doctype'] = 'json'
Form_Data['version'] = '2.1'
Form_Data['keyfrom'] = 'fanyi.web'
Form_Data['action'] = 'FY_BY_REALTlME'
#使用urlencode方法转换标准格式
data = parse.urlencode(Form_Data).encode('utf-8')
# 传递Request对象和转换完格式的数据
response = request.urlopen(Request_URL, data)
# 读取信息并解码
html = response.read().decode('utf-8')
# 使用json
translate_results = json.loads(html)
# 找到翻译结果
print(translate_results)