前言
学习使我快乐,游戏使我伤心。今天rushB,又是白给的一天。
HXDM,让我们一起学习requests库的方法和使用,沉浸在代码的世界里。呜呜呜~~
目录
一、requests库介绍
首先列出requests库的官方网站。它在这里:requests库中文官网
requests库的宣言 Requests: HTTP for Humans(霸气嗷)
它的官方网站里面有详细的使用文档,而且还有一些小例子,不想看罗里吧嗦的博客可以去官方网站学习。
requests库是基于urllib框架编写的。
二、requests库常见方法及说明
方法 | 说明 |
---|---|
requests.get() | 获取某个网页 |
requests.post() | 发送 HTTP POST 请求 |
requests.put() | 提交HTTP PUT 请求 |
requests.delete() | 提交HTTP 删除请求 |
requests.head() | 获取HTTP HEAD(头)信息 |
requests.options() | 提交HTTP OPTINS 请求 |
三、response对象的属性及说明
在了解response对象的属性之前,先看一下什么是response对象。当我们使用浏览器时,比如说搜索CSDN,按F12打开开发者工具,在Network中我们可以看到下图红圈中的两种Headers。
request对象就是浏览器向服务器发送的请求,而response对象就是服务器对浏览器请求的响应。我们看一下下面的代码。
import requests
r = requests.get('https://www.baidu.com')
所以我们可以把'www.baidu.com'
看成request请求,而方法requests.get()
返回的就是response响应,所以我们就得到来response对象r
。我们来直接打印一下r
试试。
import requests
r = requests.get('https://www.baidu.com')
print(r)
执行结果:
可以看到结果并不是我们想象的百度网页的html代码,而是响应状态码,这就是因为r
在这里是一个response对象,我们需要通过对它属性的访问来得到我们想要的信息。
response对象的属性:
属性 | 说明 |
---|---|
response.text | HTTP 响应的页面内容 |
response.encoding | 文本的编码格式 |
response.apparent_encoding | 从内容分析出的响应内容编码方式 |
response.status_code | HTTP 响应状态 |
response.content | HTTP 响应页面内容的二进制格式 |
我们在来看一下下面的代码
import requests
r = requests.get('https://www.baidu.com')
r.encoding = 'utf-8'
print(r.text)
执行结果:
我们得到了百度首页的html代码
四、requests库常见方法的使用
1、requests.get()的使用
get方法是requests库最常用的方法,我们可以通过改变参数来获取我们想要的HTTP 响应。
比如说我们直接访问豆瓣网站,看看会有什么
代码:
import requests
r = requests.get('https://www.douban.com')
r.encoding = 'utf-8'
print(r.text)
执行结果:
哎,怎么回事,啥东西也没有,代码没有写错呀!为什么没有文本呢?
我们来打印一下HTTP 的状态响应码。
代码:
import requests
r = requests.get('https://www.douban.com')
r.encoding = 'utf-8'
print(r.status_code)
执行结果:
可以看到HTTP 的状态响应码是418
,这个状态码是什么意思呢?418
:它的含义是当客户端给一个茶壶发送泡咖啡的请求时,那就就返回一个错误的状态码表示:I’m a teapot,即:“我是一个茶壶”。这个HTTP状态码在某些网站中用作彩蛋,另外也用于一些爬虫警告。意思就是,我们被警告了,豆瓣告诉我们,“你这个坏爬虫,不遵守规定,人家就不给你看!哼╭(╯^╰)╮!”。所以我们需要通过正常的途径访问豆瓣网,还好requests.get()
方法允许我们添加一些参数模拟浏览器访问,这下我们可以说,“嘿嘿,跑不掉了吧”。
如何模仿浏览器访问呢?
打开一个网页,按F12打开开发者模式,在network中,随便点击一个name下的项目,
可以看到下面的情况
Request Headers下面的大红圈里的User-Agent
就是告诉服务器浏览器的信息。我们可以在代码中怎样写:
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 \
(KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36'
} # 模拟浏览器访问
r = requests.get('https://www.douban.com', headers=headers)
r.encoding = 'utf-8'
print(r.text)
print('状态码:')
print(r.status_code)
执行结果:
可以看到我们得到了豆瓣的html代码,状态码也是200
。requests.get()
方法还有很多有用的参数,比如说可以用
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=payload)
来代替
r = requests.get("http://httpbin.org/get?key1=value1&key2=value2")
你可以去requests库官网自行探索,多写代码,才能提高。
2、requests.post()方法的使用
requests库还允许我们以post方式请求HTTP 响应,因为有些网页并不接受在URL
后面添加Vaule
,它可能只接受表单。我们可以这样写:
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("http://httpbin.org/post", data=payload)
这样我们就可以自己定制表单的内容。emmm至于表单是什么,这需要你去学习。
3、put、delete等方法的使用
其他方法的使用自然和上面都是大同小异,学习了关于HTTP 请求方面的知识,自然就知道我们在爬取网页资源该用哪种方法了。
使用例子:
r = requests.put('http://httpbin.org/put', data = {'key':'value'})
r = requests.delete('http://httpbin.org/delete')
r = requests.head('http://httpbin.org/get')
r = requests.options('http://httpbin.org/get')
4、练手网站
http://httpbin.org是一个接受request和响应response的网站,平常可以在上面练手。
加油!