发起请求获得响应的方式有两种:
1.urllib:
from urllib import request
url = "http://www.baidu.com"
headers = {
......
}
#创建一个request对象
request1 = request.Request(url=url, headers=headers)
#发送请求,返回一个response对象
response = request.urlopen(request1)
print(response)
#用read()读出这个response是一个二进制文件
print(response.read())
print(type(response.read()))
如果是post请求 ,就在request对象里面再加参数(字典)。
如果就是一个url,没有headers可以不写请求对象。
urllib.parse:
1.urlparse
urlparse()把url拆分为6个部分:{
scheme(协议),
netloc(域名),
path(路径),
params(可选参数),
query(连接键值对),
fragment(特殊锚) },并且以元组形式返回。
2.quote和unquote
# 编码(加密成url可以访问格式)
print(parse.quote(word))
# 解码
print(parse.unquote(parse.quote(word)))
编码、解码
3.urlencode
from urllib import parse
url = "http://www.baidu.com/s?"
params = {
"wd": "中国",
# "ie": "utf8"
}
# 普通的方法将其转化成可以访问的url
for key, value in params.items():
print(key)
print(parse.quote(value))
params_str1 = key + "=" + parse.quote(value)
print(params_str1)
url1 = url + params_str1
print(url1)
# 用parse中的urlencode方法将其转化成可以访问的url
params_str2 = parse.urlencode(params)
print(params_str2)
url2 = url + params_str2
print(url2)
给一个字典,将字典拼接为query_string,并且实现了编码的功能
urllib.request:
1.urlopen
from urllib import request
url = "http://www.baidu.com/s?wd=%E4%B8%AD%E5%9B%BD"
# 发送请求
response = request.urlopen(url)
# http对象
print(response)
发送请求
2.urlretrieve
from urllib import request
url = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1543822196&di=f8fc54b563102f38240995ca7a3fad7b&imgtype=jpg&er=1&src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201508%2F01%2F20150801195140_3uCwe.thumb.700_0.jpeg"
# 用read复写一个文件
response = request.urlopen(url)
with open("gu.jpeg", mode="wb") as file:
file.write(response.read())
# 用request中的urlretrieve下载一个文件
request.urlretrieve(url=url, filename="dian.jpeg")
下载
response:
url = "http://www.baidu.com/s?wd=%E4%B8%AD%E5%9B%BD"
# 发送请求
response = request.urlopen(url)
# http对象
print(response)
#获取真实的路径
print(response.geturl())
#获取请求头,返回列表里面有元祖
print(response.getheaders())
#获取状态码
print(response.getcode())
#按行读取,返回列表,都是字节类型
print(response.readlines())
2.requests:
import requests
url = "http://www.baidu.com"
# 发送请求,返回一个response对象
response1 = requests.get(url=url,headers=headers,data=data)
print(response1)
print(type(response1))
# 读出响应里面的内容,返回str类型
a = response1.text
print(a)
print(type(a))
# 读出响应里面的内容,返回二进制类型
b = response1.content
print(b)
print(type(b))
# 读出响应的状态码,返回int类型
c = response1.status_code
print(c)
print(type(c))
# 读出请求头的信息
d = response1.request.headers
print(d)
print(type(d))
# 读出响应头的信息
e = response1.headers
print(e)
print(type(e))
# 读出请求时的cookie
f = response1.request.cookies
print(f)
print(type(f))
# 读出响应是的cookie
g = response1.cookies
print(g)
print(type(g))
requests 提供了一个叫做session类,来实现客户端和服务端的会话保持
会话保持有两个内涵:
- 保存cookie,下一次请求会带上前一次的cookie
- 实现和服务端的长连接,加快请求速度
- 还可以防止重定向太多次,造成的请求报错
使用方法
session = requests.session()
response = session.get(url,headers)