爬虫---发起请求获得响应的方式有两种:

发起请求获得响应的方式有两种:

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)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值