urllib库的使用(二)-----python3

这便是urllib库中request模块的基本用法,如果想实现更多的功能,可以参考官方文档的说明
HTTP
HTTPDefaultErrorHandler:用于处理HTTP响应错误,错误都会抛出HTTPError类型的异常。
HTTPRedirectHandler:用于处理重定向。
HTTPCookieProcessor:用于处理Cookies。
ProxyHandler:用于设置代理,默认代理为空。
HTTPPasswordMgr:用于管理密码,它维护了用户名和密码的表。
HTTPBasicAuthHandler:用于管理认证,如果一个链接打开时需要认证,那么可以用它来解决认证问题。
esponse = opener.open(‘网址’)
代理

from urllib.request import ProxyHandler, build_opener
from urllib.error import URLError
#ProxyHandler:用于设置代理,默认代理为空
proxy_handler = ProxyHandler({
    'http':'http://127.0.0.1:9743', 
    'https':'https://127.1.1.1:9743'
})
opener = build_opener(proxy_handler)
try:
    response = opener.open('https://www.baidu.com')
    print(response.read().decode('utf-8'))
except URLError as e:
    print(e.reason)

搭建了一个代理,它运行在9743端口上。proxy_handler = ProxyHandler(参数),其参数是一个字典,键名是协议类型(比如http或者https等),键值是代理链接,可以添加多个代理。然后,利用这个Handler及build_opener()方法构造一个Opener,之后发送请求即可。用try:…except URLError as e:…出错处理。所以需要提前引用 urllib.request 中的 ProxyHandler, build_opener,还有出错处理
urllib.error中的 URLError

Cookies先用实例将网站的Cookies获取下来

import http.cookiejar, urllib.request
cookie = http.cookiejar.CookieJar()#必须声明一个CookieJar对象
handler = urllib.request.HTTPCookieProcessor(cookie)#用于处理Cookies,利用HTTPCookieProcessor来构建一个Handler
opener = urllib.request.build_opener(handler)#利用build_opener()方法构建出Opener
response = opener.open('https://www.baidu.com')#执行open()函数
#输出了每条Cookie的名称和值
for item in cookie:
    print(item.name + '=' + item.value)

运行结果:

BAIDUID=ACAE046E69F4FEB1F128326541EFDC63:FG=1
BIDUPSID=ACAE046E69F4FEB106748254A656B3D0
PSTM=1579617897
BD_NOT_HTTPS=1

将Cookies以文本形式保存。

import http.cookiejar, urllib.request
filename = 'cookies.txt'
cookie = http.cookiejar.MozillaCookieJar(filename)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('https://www.baidu.com')
cookie.save(ignore_discard=True, ignore_expires=True)

读取和保存Cookies时,运行之后,在当前目录下生成一个cookies.txt文件,用于保存Cookies的内容
这时CookieJar就需要换成MozillaCookieJar,它在生成文件时会用到,是CookieJar的子类,可以用来处理Cookies和文件相关的事件,比如读取和保存Cookies,可以将Cookies保存成Mozilla型浏览器的Cookies格式。

运行结果:

Netscape HTTP Cookie File http://curl.haxx.se/rfc/cookie_spec.html
This is a generated file! Do not edit.

.baidu.com TRUE / FALSE 1611197170 BAIDUID
2CD1C4092638B0A63729B0E010C8D529:FG=1 .baidu.com TRUE / FALSE
3727144817 BIDUPSID 2CD1C4092638B0A6471FB396DD99FD27 .baidu.com TRUE /
FALSE 3727144817 PSTM 1579661192 www.baidu.com FALSE / FALSE
1579661470 BD_NOT_HTTPS 1

要保存成LWP格式的Cookies文件

filename = 'cookies.txt'
cookie = http.cookiejar.LWPCookieJar(filename)#LWPCookieJar同样可以读取和保存Cookies,它会保存成libwww-perl(LWP)格式的Cookies文件。
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('https://www.baidu.com')
cookie.save(ignore_discard=True, ignore_expires=True)

运行结果:

#LWP-Cookies-2.0
Set-Cookie3: BAIDUID="FE2536E4F58ED38A067B74CAF7D1D819:FG=1"; path="/"; domain=".baidu.com"; path_spec; domain_dot; expires="2021-01-21 02:59:29Z"; comment=bd; version=0
Set-Cookie3: BIDUPSID=FE2536E4F58ED38A54461D1439016C25; path="/"; domain=".baidu.com"; path_spec; domain_dot; expires="2088-02-09 06:13:36Z"; version=0
Set-Cookie3: PSTM=1579661992; path="/"; domain=".baidu.com"; path_spec; domain_dot; expires="2088-02-09 06:13:36Z"; version=0
Set-Cookie3: BD_NOT_HTTPS=1; path="/"; domain="www.baidu.com"; path_spec; expires="2020-01-22 03:04:29Z"; version=0

生成了Cookies文件后,怎样从文件中读取并利用呢?
我们以LWPCookieJar格式为例来看一下:

#前提是已经生成了LWPCookieJar格式的Cookies,并保存成文件,例如下面的cookies.txt,在上面已经生成
import http.cookiejar, urllib.request
cookie = http.cookiejar.LWPCookieJar()
cookie.load('cookies.txt', ignore_discard=True, ignore_expires=True)#调用load()方法来读取本地的Cookies文件,获取到了Cookies的内容
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('https://www.baidu.com')
print(response.read().decode('utf-8'))#运行结果会输出指定网页的源代码。

运行结果:
在这里插入图片描述
HTTP协议请求实战

如果要进行客户端与服务器端之间的消息传递,我们可以使用HTTP协议请求进行。
HTTP协议请求主要分为6种类型,各类型的主要作用如下:

  • GET(get)请求:GET请求会通过URL网址传递信息,可以直接在URL中写上要传递的信息,也可以由表单进行传递。如果使用表单进行传递,这表单中的信息会自动转为URL地址中的数据,通过URL地址传递。
  • POST(post)请求:可以向服务器提交数据,是一种比较主流也比较安全的数据传递方式,比如在登录时,经常使用POST请求发送数据。
  • PUT(put)请求:请求服务器存储一个资源,通常要指定存储的位置。
  • DELETE(delete)请求:请求服务器删除一个资源。
  • HEAD(head)请求:请求获取对应的HTTP报头信息。
  • OPTIONS(options)请求:可以获取当前URL所支持的请求类型。
    除此之外,还有TRACE(trace)请求与CONNECT(connect)请求等。

接下来,将通过实例讲解HTTP协议请求中的GET请求和POST请求,这两种请求相对来说用的最多。
GET请求示例分析

发布了30 篇原创文章 · 获赞 8 · 访问量 1810

猜你喜欢

转载自blog.csdn.net/ingenuou_/article/details/104065816