Requests 库入门

2021-10-05  本文已影响0人  汪小鱼

1 Requests 库的安装

Win 平台:“以管理员身份运行” cmd,执行 pip install requests,等待安装

Requests 库的安装小测

Python IDLE

2 Requests 库的 get() 方法

get 方法

response n. 响应;反应;回答
Response 对象包含服务器返回的所有信息,也包含请求的 Request 信息

r = requests.get( url , params=None , **kwargs )
//---url:拟获取页面的 url 链接
//---params:url 中的额外参数,字典或字节流格式,可选
//---**kwargs:12 个控制访问的参数

[补充]:参考 get 方法的文档可以看出 get 方法使用了 request 方法进行封装,也就是说 request 库一共提供 7 常用方法,除了第一个 request 方法外,其它的 6 个方法都是通过调用 request 方法实现的。其实也可以这样认为 requests 库其实只有一个方法,就是 request 方法,但是为了让大家编写程序更方便,提供了额外 6 个方法。

Requests 库的 2 个重要对象

Response 对象

Response 对象的属性

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

!r.status_code:只要不是200其实都是连接失败的

在使用 get 方法获取网上资源的基本流程:

理解 Response 的编码:

为什么将 r.apparent_encoding 解析出来的编码方式赋给 r.encoding 后,网页中的中文就可以分析出来,难道 r.text 是以 r.encoding 的方式进行编码的吗?为什么头部分析出来的编码方式会与内容解析出来的不同?
答:r.text 是以 r.encoding 的方式进行编码

3 爬取网页的通用代码框架

在介绍爬取网页的通用代码框架之前,我们需要理解 Requests 库的异常

r.raise_for_status():在方法内部判断 r.status_code 是否等于 200,不需要增加额外的 if 语句,该语句便于利用 try-except 进行异常处理,如果状态码不是200,产生异常 requests.HTTPError。

import requests
def getHTMLText(url):
    try:
        r = requests.get(url)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        # print(r.status_code)
        return "产生异常!"
if __name__=="__main__":
    url = "http://www.baidu.com"
    print(getHTMLText(url))

4 HTTP 协议及 Requests 库方法

HTTP,HyperText Transfer Protocol,超文本传输协议。是一个基于 “请求与响应” 模式的、无状态的应用层协议。无状态指的是第一次请求与第二次请求之间并没有相关的关联。HTTP 协议采用 URL 作为定位网络资源的标识。

URL 格式如下:http://host[:port][path]
       host:合法的 Internet 主机域名或 IP 地址
       port:端口号,缺省端口为 80
       path:请求资源的路径
HTTP 实例:http://www.bit.edu.cn
      http://220,181,111,188/duty

URL 是通过 HTTP 协议存取资源的 Internet 路径,它就像我们电脑里边的一个文件的路径一样,只不过这个文件不在电脑里,在 internet 上,那每一个 URL,对应了 internet 上的一个数据资源。

HTTP 协议对资源的操作

理解 PATCH 和 PUT 的区别
假设 URL 位置有一组数据 UserInfo,包括 UserID、UserName 等20个字段
需求:用户修改了 UserName,其他不变。
⿻采用 PATCH,仅向 URL 提交 UserName 的局部更新请求。
⿻采用 PUT,必须将所有 20 个字段一并提交到 URL,未提交字段被删除。
PATCH 的最主要好处:节省网络带宽(当 URL 对应的资源是很庞大资源的时候)

HTTP 协议与 Requests 库

Requests 库的 head() 方法

Requests 库的 post() 方法

向 URL POST 一个字典,自动编码为 form(表单)

向 URL POST 一个字符串,自动编码为 data

Requests 库的 put() 方法

5 Requests 库主要方法解析

Requests 库的 7 个主要方法

方法 说明
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网页提交PUT请求的方法,对应于HTTP的PATCH
requests.delete() 向HTML页面提交删除请求,对应于HTTP的DELETE
requests.request(method, url, **kwargs)

使用示例:

import requests
kv = {'key1':'value1','key2':'value2'}
r = requests.request('GET','http://python123.io/ws',params=kv) 
print(r.url) 
# https://python123.io/ws?key1=value1&key2=value2

这两种方法是等价的:
r = requests.request("get", "http://www.baidu.com")
r = requests.get("http://www.baidu.com")

fs = {'file':open('data.x1s','rb')}
r = requests.request('pOST','http://python123.io/ws',files=fs) 
pxs = { 'http':'http://user:pass@10.10.10.1:1234'
        'https':'https://1e.10.10.1:4321'         }
r = requests.request('GET','http://www.baidu.com',proxies=pxs) 

http 协议中,向某一个 url 提交资源的功能在服务器上是严格受控的,因为这存在很大的安全问题。

网络爬虫的尺寸:

小规模,数据量小 中规模,数据规模较大 大规模,搜索引擎
爬取速度不敏感 爬取速度敏感 爬取速度关键
Requests 库 Scrapy 库 定制开发
爬取网页、玩转网页 爬取网站、爬取系列网站 爬取全网
上一篇下一篇

猜你喜欢

热点阅读