基本库的使用(续1)

第三章、基本库的使用

2.Request

import urllib.request
request=urllib.request.Request('https://python.org')
response=urllib.request.urlopen(request)
print(response.read().decode('uft-8'))

还是用urlopen()方法发送请求,只是参数由URL变为一个Request类型的对象。
Request的构造方法如下:
class urllib.request.Request(url,data=None,headers{},….)
第一个参数是必传参数;第二个参数data要传的话必须是bytes类型,如果是字典,先用urllib.parse模块里的urlencode()编码;第三个参数headers,可以在构造请求时通过headers参数直接构造,也可以通过调用请求实例的add_header()方法添加。
下面传入多个参数构造请求

from urllib import request,parse
url='http://httpbin.org/post'   # 参数1
headers={
'User-Agent':'Mozilla/4.0(compatible;MSIE 5.5;Windows NT)',
'Host':'httpbin.org'
}  #参数2
dict={
'name':'cai'
}  #参数3
data=bytes(parse.urlencode(dict),encoding='utf-8')  #参数4
req=request.Request(url=url,data=data,headers=headers,method='POST')
response=request.urlopen(req)
print(response.read().decode('utf-8'))

另外,headers也可以用add_header()方法添加:
req=request.Request(url=url,data=data,method=’POST’)
req.add_header(‘User-Agent’,’Mozilla/4.0(compatible;MSIE 5.5;Windows NT)’)
3.高级方法
虽然可以构造请求,但对于一些更高级的操作(Cookies处理、代理设置等),就需要Handler(理解为各种处理器)

  • 验证(略)
  • 代理 (略)
  • cookies
    将网站的cookies取下来,代码如下:
import http.cookiejar,urllib.request

cookie=http.cookiejar.CookieJar()  #声明CookieJar对象
handler=urllib.request.HTTPCookieProcessor(cookie)  #构建handler
opener=urllib.request.build_opener(handler)  #构建opener
response=opener.open('http://www.baidu.com')
for item in cookie:
    print(item.name+"="+item.value)

得到每条cookie的名称和值
将cookies以文本形式保存:

filename='cookies.txt'
cookie=http.cookiejar.MozillaCookieJar(filename) #替换
handler=urllib.request.HTTPCookieProcessor(cookie)  #构建handler
opener=urllib.request.build_opener(handler)  #构建opener
response=opener.open('http://www.baidu.com')
cookie.save(ignore_discard=Ture,ignore_expires=True) #替换

猜你喜欢

转载自blog.csdn.net/qq_32482091/article/details/80601841