【Python爬虫】爬虫利器 requests 库小结

requests库

Requests 是一个 Python 的 HTTP 客户端库。 支持许多 HTTP 特性,可以非常方便地进行网页请求、网页分析和处理网页资源,拥有许多强大的功能。

本文主要介绍 requests 库的基础使用。

1. 安装与导入

安装requests库:快捷键 Windows+r 打开运行控制框,输入 cmd,进入命令行,输入:

pip install requests

导入:

import requests

2. 主要方法

2.1 常见的网页请求方法

常见的网页请求方法有两种:get 和 post。

get 方法,一般是直接通过发送请求,来获取网页信息。在浏览器中直接输入 URL 并回车,我们便发送了一个get请求,请求的参数会直接包含在 URL 里。比如,直接通过 get 方法获取网页上的豆瓣电影排行榜等。。

post 请求大多在表单提交时发起。比如登录网站时,填写了账号和密码后点击登录,这通常便发起了一个 post 请求,其数据以表单的形式传输,而不会体现在 URL 中。

get 请求和 post 请求的区别:

  • get 请求中的参数包含在 url 里面,传递的数据可以再 url 中看到。而 post 请求的 url 不会包含这些数据,数据通过表单的形式传输,而不会体现在 url 中。
  • get 请求提交的数据最多只有 1024 字节,而 post 方式则没有这个限制

对于 get 和 post 方法应用方面的选择,通常在登录时提交账号和密码,包含了敏感信息。若使用 get 请求,那么用户密码会暴露在 url 中,容易造成信息泄露,因此常用 post 方法发送。上传文件时,由于文件可能过大,也会选用 post 方式。

2.2 七个主要方法:

方法 描述
requests.request 发送请求,支撑以下各方法
requests.get 向网页发送get请求,获取网页信息(GET)
requests.post 向网页发送post请求(POST)
requests.put 向网页发送put请求(PUT)
requests.head 获取网页请求头信息(HEAD)
requests.patch 向网页提交局部修改请求(PATCH)
requests.delete 向网页提交删除请求(DELETE)
requests.Session 会话,相比于直接requests请求,具有保持功能

3. 主要的使用方法

3.1 requests.request(method, url, **kwargs)

  • method 设置请求方式(get、post、put、head、patch、delete)

  • url 设置请求地址

  • kwargs 控制访问参数

request 方法中各方法的参数与以下相应的方法相同。

3.2 requests.get(url, params=None, **kwargs)

  • url 设置请求地址。一般地址中问号后面的可以省略,问号后面的即是请求参数。
  • params 设置发送请求时所带的参数,字典或字节流格式,作为额外参数连接到url中(问号后的部分)。可选
  • kwargs 控制访问参数,见 kwargs参数表。可选

发送请求:

url = 'https://blog.csdn.net/weixin_52132159' # 我的博客主页
#url = 'https://blog.csdn.net/weixin_52132159?spm=1019.2139.3001.5343'
headers = {
'cookie': '...',
'Referer': '...'
}
params = {'spm': '1019.2139.3001.5343'} response = requests.get(url, headers=headers, params=params) # 发送请求

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

  • url 设置请求地址
  • data 为字典、字节序列或文件对象,作为请求的内容,向服务器提交资源时使用,可选
  • json 为 JSON格式的数据,作为内容向服务器提交。可选
  • kwargs 控制访问参数,见 kwargs参数表。可选

发送请求:

url = 'https://fanyi.so.com/index/search' # 360翻译
headers = {
'pro': 'fanyi'
}
data = {
'eng': 0, # 是否从英文转中文
'query': '你好' # 翻译的单词
} response = requests.post(url, headers=headers, data=data) # 发送请求

3.4 requests.Session

Session 方法可以实现回话,持续性地发送requests请求,能够跨请求保持cookie。

经实例化后,可用 get、post 等方法发送请求,用法不变。

示例:

response = requests.Session()

response.post('https://fanyi.so.com/index/search')
response.get('https://blog.csdn.net/weixin_52132159')

3.4 其他

  • requests.put(url, data=None, **kwargs)
  • requests.head(url, **kwargs)
  • requests.patch(url, data=None, **kwargs)
  • requests.delete(url, **kwargs)

其他的方法使用过程与 get 与 post 类似,都有着kwargs参数表 中的参数,依实际情况选择使用。

4. kwargs 参数表

参数 说明
params 送请求时所带的参数,字典或字节流格式,作为额外参数连接到url中
data 字典、字节序列或文件对象,作为requests的内容,向服务器提交资源时使用
json JSON格式的数据,作为内容向服务器提交
headers 字典类型,请求头
cookies 字典或 CookieJar 对象,从HTTP协议中解析 cookie。字典形式的 cookie 也可放入 headers中
auth 元组类型,支持HTTP认证功能
files 字典类型,向服务器传输文件时使用
timeout 设定等待响应的时间,单位为秒
proxies 字典类型,设定访问代理服务器
allow_redirects 布尔类型,默认为True,重定向开关
stream 布尔类型,默认为True,判断是否对获取内容立即下载
verify 布尔类型,默认为True,认证SSL证书的开关
cert 保存本地SSL证书路径的字段

参考文章:https://blog.csdn.net/qq_43406976/article/details/104538316

5. 响应内容

发送请求后,返回的是一个 response 对象。我们可以通过该对象的属性和方法获取返回内容。

方法或属性 说明
response.url 返回请求的URL
response.text 返回headers中的编码解析的结果,可以通过r.encoding='gbk’来变更解码方式
response.content 返回二进制结果
response.status_code 返回响应码,如200、404等
response.headers 返回请求头
response.cookies 返回一个RequestsCookieJar对象
response.history 返回以列表存储的请求历史记录
response.json() 返回返回结果经json解码后的内容,一般返回一个字典(这是个方法,要带括号)

6. 使用格式示例

6.1 爬取360翻译(POST)

url = 'https://fanyi.so.com/index/search'
headers = {
'pro': 'fanyi',
}
data = {
'eng': 1,
'query': 'hello'
} r = requests.post(url, data=data, headers=headers)
print(r.url)
print(r.status_code)
print(r.json()['data']['fanyi'])

输出:

https://fanyi.so.com/index/search
200
你好

6.2 爬取图片/视频

import requests
pic = requests.get('https://profile.csdnimg.cn/E/5/9/3_weixin_52132159').content
with open ('作者头像.jpg','wb') as i:
i.write(pic)

更多爬虫的教学和案例可以见作者的专栏:Python爬虫

– the End –

这篇文章就到这里了,点个赞支持一下吧!

本文收录于专栏:Python爬虫
关注作者,持续阅读作者的文章,学习更多Python知识!
https://blog.csdn.net/weixin_52132159


2021/8/6

已完成的爬虫教程:

推荐阅读

上一篇:asp.net mvc表单提交的几种方式


下一篇:Java基础 之软引用、弱引用、虚引用 ·[转载]