第三节 、对比requests、urllib
首先在此声明,本节的对比主要基于前两节的内容,可能两个库中还有其它强大的功能函数,但小编没有遇到,所以读者见谅。这里主要对比前面两节的内容。
这一节我们主要对比requests、以及urllib库在发起请求上的的一些区别,避免我们在使用上出现知识点的混淆。对于这两个库的其他函数比如urlparse等函数,小编就不做比较了。我们主要比较urlopen、build_opener、requests.get、requests.Session四个发起请求之间的差距。
1.请求函数参数差别
先看urlopen、build_opener传入的参数的情况
# from urllib.request import Request,urlopen,build_opener
#uropen,Request,build_opener的使用方式
# r = Request(url,data = None,headers = None,origin_req_host = None,unverifiable = False,method = 'GET')
# urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT)
# urlopen(r)
# build_opener().open(r, timeout=socket._GLOBAL_DEFAULT_TIMEOUT)
# build_opener().open(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT)
# url, 请求连接 字符串
# timeout, 超时限制 浮点数类型
# headers, 请求头修改 以字典形式传入Request,再传入函数urlopen或open内
# data, 提交表单 以字节流方式函数,也能通过Request传入
# cookies, 设置cookies 见注释
# files, 上传文件 没有
# origin_req_hos 更改IP地址 以字典形式传入,通过Request传入
# method 请求方法 主要有GET,POST,通过Request传入
#注释1 若build_opener需要直接添加headers(不使用Request)需使用opener.addheaders = headers。urlopen不能直接传入headers
# 其中(headers类型为:sequence of two-element tuples,类似[(a,b)])
#注释2 cookies只能放入headers再传入函数(以键值对存入,值为cookies(字符串))
# 注释3 当我们向网站提交信息时(使用build_opener时)我们只需不需要特意设置方法
# 注释4 若build_opener需要使用IP代理,须使用如下方法:
# from urllib.request import build_opener,ProxyHandler
# proxy_hanler = ProxyHandler({'http':'http://'+'ip地址','https':'https://'+'ip地址'})
# opener = build_opener(proxy_hanler)
# html = opener.open(url)
再看requests.get、requests.Session传入的参数的情况,
当然requests.post或者其他方法请求参数都一致,故我我们只说了get方法中几个常见的参数
# import requests
# requests.get(url,timeout=socket._GLOBAL_DEFAULT_TIMEOUT,headers = None,data = None,cookies = None,files = None,proxies = None,allow_redirects = True)
# requests.Session().get(url,timeout=socket._GLOBAL_DEFAULT_TIMEOUT,headers = None,data = None,cookies = None,files = None,proxies = None,allow_redirects = True)
#这里列举了get的一些重要参数
# url, 请求连接 字符串
# timeout, 超时限制 浮点数类型
# headers, 请求头修改 以字典形式传入
# data, 提交表单 以字典形式传入
# cookies, 设置cookies 以字典形式传入函数。或者放入headers,以键值对存入
# files, 上传文件 以字典形式传入
# proxies, 更改IP地址 以字典形式传入{'http':'http://'+'ip地址','https':'https://'+'ip地址'}
# allow_redirects 是否允许重定向 True|False
# 请求方法 主要有get,post
# 注释3 当我们向网站提交信息时,我们只需需要设置方法为post
1.2 返回对象以及返回对象属性及方法
from urllib.request import Request,urlopen,build_opener,HTTPCookieProcessor
import requests
html_urlopen = urlopen('http://httpbin.org/get')
opener = build_opener()
html_opener = opener.open('http://httpbin.org/get')
html_get = requests.get('http://httpbin.org/get')
session = requests.Session()
html_session = session.get('http://httpbin.org/get')
# 属性方法\函数 html_urlopen html_opener html_get html_session
#返回类型 httpresponse httpresponse response response
# 状态码 .status_code .status_ .status_code .status_code
#返回当前请求连接 .url .url .url .url
#查看当前网页的编码方式 None None .apparent_encoding .apparent_encoding
#设置编码方式 .encoding .encoding .encoding .encoding
#输出响应头 .headers .headers .headers .headers
#输出方式 .read()(字节流输出) .read()(字节流输出) .text(以字符串输出) .text(以字符串输出)
#输出方式 .read()(字节流输出) .read()(字节流输出) .content(以二进制串输出) .content(以字二进制输出)
#关闭请求 .close() .close() .close() .close()
#使用cookies直接登陆 True True True True
#使用账号登陆 False True True True
#获取cookies None 须使用CookieJar类 .cookies .cookies
#注释1 build_opener获取cookie方式,见下
# from http.cookiejar import CookieJar
# cookie = CookieJar()
# cookie_handler = HTTPCookieProcessor(cookie)
# opener = build_opener(cookie_handler)
# html_opener = opener.open(url)
# print(cookie)
#小编是一个理科生,文笔不好,大家能理解我的意思就行了。
#转载则请标明文章出处,谢谢。
#文中若有任何错误,欢迎大家积极指出,小编洗耳恭听。