爬虫的“黄金搭档”---requests库的详细介绍

什么是requests

Requests is an elegant an simple HTTP library for Python.
Requests是一个优雅而简单的HTTP库。

requests库是一个常用的用于http请求的模块,它使用python语言编写,可以方便的对网页进行爬取,是学习python爬虫的较好的http请求模块。

requests的安装

Win平台:“以管理员身份运行” cmd -> 执行 pip install requests
当然,前提是已经安装好python环境。。。。。

requests的安装小测试

在这里插入图片描述
上述语句中,通过import导入requests库,使用requests的get()方法访问了百度,r.status_code返回的是HTTP请求的返回状态(200表示成功),r.text返回的是HTTP响应内容的字符串形式。

Requests库的七个主要方法

方法 说明
requests.request() 构造一个请求,是以下各方法的基础方法
requests.get() 获取HTML网页的主要方法,对应于HTTP的GET
requests.head() 获取HTML网页头信息的方法,对应HTTP的HEAD
requests.post() 获取HTML网页提交POST请求的方法,对应HTTP的POST
requests.put() 向HTML网页提交PUT请求的方法,对应HTTP的PUT
requests.patch() 向HTML网页提交局部修改请求,对应HTTP的PATCH
requests.delete() 向HTML网页提交删除请求,对应HTTP的DELETE
1.requests.request(method,url,**kwargs)

构造并发送一个Request对象,返回一个Response对象,支撑各方法的基础方法.。

method :请求方式,对应新建Request对象要使用的HTTP方法,包括:GET,POST,PUT,DELETE等
url:新建Request对象的URL链接
**kwargs:13个控制访问的可选参数,均为可选项

13个可选参数(**kwargs)解析:
在这里插入图片描述
在这里插入图片描述

2.requests.get(url,params=None,**kwargs

请求获取URL位置的资源。

url:新建Request对象的URL链接
params:url中的额外参数,字典或字节流格式,可选
**kwargs:12个控制访问的可选参数

3.requests.head(url,**kwargs)

请求获取URL位置资源的响应消息报告,即获得该资源的响应的头部信息。

url:新建Request对象的URL链接
**kwargs:13个控制访问的可选参数

4.requests.post(url,data=None,json=None,**kwargs)

请求向URL位置的资源后附加新的数据。

url:新建Request对象的URL链接
data:字典、字节序列,文件对象,Request的内容
json:JSON格式的数据,Request的内容
**kwargs:11个控制访问参数

5.requests.put(url,data=None,**kwargs)

请求向URL位置存储的一个资源,覆盖原URL位置的资源。

url:新建Request对象的URL链接
data:字典、字节序列,文件对象,Request的内容
**kwargs:12个控制访问参数

6.requests.patch(url,data=None,**kwargs)

请求局部更新URL位置的资源,即改变该处资源的部分内容。

url:新建Request对象的URL链接
data:字典、字节序列,文件对象,Request的内容
**kwargs:12个控制访问参数

7.requests.delete(url,**kwargs)

请求删除URL位置存储的资源。

url:新建Request对象的URL链接
params:url中的额外参数,字典或字节流格式,可选
**kwargs:13个控制访问的可选参数

Requests库的2个重要对象

Request
Response

如:r = requests.get(url)
即构造并发送一个Request对象,返回一个Response对象(r)。

Response对象包含服务器返回的所有信息,也包括请求的Request信息。

Response对象的属性

以 r 表示一个Response对象

属性 说明
r.status_code HTTP请求的返回内容,200表示连接成功,404表示失败
r.text HTTP响应内容的字符串形式,即url 对应的页面内容
r.encoding 从HTTP header 中猜测的响应内容编码方式
r.apparent_encoding 从内容中分析出的响应内容编码方式(备选编码方式)
r.content HTTP响应内容的二进制形式

在这里插入图片描述
如上图所示,获取的Response对象的text属性出现了乱码;这里我们可以通过修改Response对象的encoding属性来修正:
在这里插入图片描述

Response对象的编码解析

涉及Response对象的编码的属性有:encoding,apparent_encoding,其中:
encoding:如果headers中不存在charset,则默认编码为ISO-8859-1,text属性根据encoding属性显示网页内容。
apparent_encoding:根据网页内容分析出来的编码方式,可以看作encoding的备选。

Requests库的异常

Request库的异常
在这里插入图片描述
Response的异常
在这里插入图片描述

Requests库的简易使用—爬取网页的通用代码框架

import requests

def getHTMLText(url):
    try:
        r=requests.get(url,timeout=30)
        r.raise_for_status()  # 如果状态不是200,则引发HTTPError异常
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "error"

if __name__=="__main__":
    url="http://www.baidu.com"  #爬取百度首页
    print(getHTMLText(url))

使用案例

使用通用框架try-except爬取图片

import requests as req
import os

url="https://i.sso.sina.com.cn/images/login/qq.png"
root="./imgs//"
dst=root+"picture1.png"

try:
    if not os.path.exists(root):
        os.mkdir(root)
    if not os.path.exists(dst):
        r=req.get(url)
        with open(dst,'wb') as f:
            f.write(r.content)
            f.close()
            print("文件保存成功")
    else:
        print("文件已存在")
except:
    print("爬取失败")
发布了20 篇原创文章 · 获赞 10 · 访问量 1022

猜你喜欢

转载自blog.csdn.net/qq_42964349/article/details/104562723
今日推荐