全方面的掌握Requests库的使用【python爬虫入门进阶】(02)

举报
码农飞哥 发表于 2021/10/29 13:37:41 2021/10/29
【摘要】 用好Request库挺简单的

您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦
本文是爬虫专栏的第二篇,重点介绍requests库的使用。
干货满满,建议收藏,需要用到时常看看。 小伙伴们如有问题及需要,欢迎踊跃留言哦~ ~ ~。

前言(为什么写这篇文章)

上一篇文章简单的介绍了爬虫相关的基础知识点,介绍了一个标准爬虫程序的三个步骤。这篇文章就让我们接着来学习。
本文重点介绍requests库的使用以及爬虫协议。之前也写了一篇Requests库使用的博客,有兴趣的小伙伴可以去看看。
Python学习群
在这里插入图片描述

Requests库的介绍

前面介绍了Requests库是用来抓取网页源码,请求接口的利器,整体上是要比urllib库的request更加好用的库。官网上将其称之为唯一一个非转基因的Python HTTP库,人类可以安全享用。
Requests库有7个主要方法。

方法 说明
requests.request() 构造一个请求,支撑以下各方法的基础方法
requests.get() 获取HTML网页的主要方法,对应于HTTP的GET
requests.head(() 获取HTML网页头信息的方法,对应于HTTP的HEAD
requests.post() 向服务器指定的接口发起POST请求方法,对应于HTTP的POST
requests.put() 向服务器指定的接口发起PUT请求的方法,对应于HTTP的PUT
requests.patch() 向服务器指定的接口提供局部修改请求,对应于HTTP的PATCH
requests.delete() 向HTML页面提交删除请求,对应于HTTP的DELETE

不过我们平常最常用的方法还是GET方法和POST方法。

get请求方法(不带参数)

get请求方法是爬虫中最常用到的方法,因为爬虫主要就是爬取网页的信息。最基础的使用是

res = requests.get('https://feige.blog.csdn.net/')
res.encoding = 'utf-8'
print(res.text)

这里需要通过res.encoding='utf-8' 设置响应结果的编码格式是utf-8。不然可能会出现中文乱码
如果响应结果是二进制数据的话则需要通过 res.content 方法来提取响应结果。
设置编码的方式也可以是res.content.decode('utf-8')

res = requests.get('https://feige.blog.csdn.net/')
print(res.content.decode('utf-8'))

传递URL参数

有时候get请求也需要传入参数,这里可以直接将参数拼接到URL上或者通过params参数传入一个字典。

params = {'id': 12, 'name': 'zhangsan'}
# url拼接
res = requests.get(url='https://feige.blog.csdn.net/', params=params)
# 打印url
print(res.url)
# 或者
res = requests.get(url='https://feige.blog.csdn.net/?id={0}&name={1}'.format(13, 'lisi'))
print(res.url)

运行结果是:

https://feige.blog.csdn.net/?id=12&name=zhangsan
https://feige.blog.csdn.net/?id=13&name=lisi

post请求方法

get请求只能传入简单的参数,如果参数比较复杂或者传入的参数比较多的话则GET请求就不再适用了,这时候就需要适用post请求方法了。
Post请求的请求类型有三种:

  1. application/x-www-form-urlencoded 这是以form表单的方式来提交post请求。
  2. application/json;charset=utf-8 这是以json字符串的格式,将请求参数放在RequestBody中的方式。
  3. form-data 这种方式一般是用来上传文件用的。

以表单的方式提交

以表单的方式提交数据是POST请求的默认的请求格式,只需要将参数放在一个字典中进行传入即可。

 	url = "http://127.0.0.1:8080/v1/ls/voice/save"
    data = {"dst_audio": "9d62ca66-326f-4070-9993-5f89f790dc68.wav"}
    res = requests.post(url, data)
    content = res.content.decode('utf-8')
    print(content)

以json字符串的方式提交

# 自定义Headers
header = {
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36',
    'content-type': 'application/json;charset=utf-8'
}
data = '{\"coupon\": true}'
res = requests.post('https://msg.csdn.net/v1/web/message/view/unread', headers=header, data=data)
print(res.content.decode('utf-8'))

这里将请求头的数据放在一个名为header的字典中,然后在请求时通过headers参数传入。在请求中设置了内容类型是application/json,编码格式是charset=utf-8
传入的是一个json字符串,通过data参数进行传入。json字符串可以直接写也可以通过json.dumps(dict)方法将一个字典序列化,就像下面这样。

import json
data = json.dumps({'coupon': True})

文件上传

文件上传与本节爬虫的内容无关,在此就不过多介绍了。有兴趣的小伙伴可以看看Python中如何编写接口,以及如何请求外部接口 这篇文章。

重定向

在网络请求中,我们常常会遇到状态码是3开头的重定向问题,在Requests中是默认开启允许重定向的,即遇到重定向时,会自动继续访问。通过将allow_redirects 属性设置为False不允许重定向。

requests.get('https://www.baidu.com/', allow_redirects=False)

设置超时

通过timeout属性可以设置超时时间,单位是秒。get方法和post方法均可设置。

requests.get('https://www.baidu.com/', timeout=0.1)

获取响应码

通过status_code属性可以获取接口的响应码。

# 状态码(status_code)
res = requests.get('https://www.baidu.com/')
print('响应码是=', res.status_code)

禁止证书验证

有时候我们使用了抓包工具,这时候由于抓包证书提供的证书并不是受信任的数字证书颁发机构颁发的,所以证书的验证会失败,所以我们就需要关闭证书验证。在请求的时候把verify参数设置为False就可以关闭证书验证了。

requests.get('https://www.baidu.com/', verify=False)

爬虫协议

爬虫协议也叫做robots协议,告诉网络蜘蛛哪些页面可以爬取,哪些页面不能爬取
爬虫文件的规范是:

  1. 必须将robots.txt 代码保存为文本文件
  2. 必须将该文件保存到网站的顶级目录下
  3. robots.txt 文件必须命名为robots.txt 文件
    比如要查看百度网站的robots.txt文件,只需要输入 https://www.baidu.com/robots.txt 即可
    在这里插入图片描述
    拦截所有的机器人:
User-agent:* 
Disallow:/

允许所有的机器人

User-agent:*
Disallow:

豆瓣登录案例

import requests

# 登录页面
img_url = "https://accounts.douban.com/j/mobile/login/basic"
# 添加请求头
header = {
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'
}

data = {
    'ck': '5oo_',
    'name': '1211****',
    'password': '121211',
    'remember': 'false'
}
# 发送登录信息到服务器
images = requests.post(img_url, data=data, verify=False, headers=header)
# 接收服务器返回的cookies
cookies = images.cookies
# 发送请求
idex = requests.get('https://www.douban.com/', headers=header, cookies=cookies)
print(idex.text)

总结

本文详细介绍了Request库的使用

粉丝专属福利

软考资料:实用软考资料

面试题:5G 的Java高频面试题

学习资料:50G的各类学习资料

脱单秘籍:回复【脱单】

并发编程:回复【并发编程】

											👇🏻 验证码 可通过搜索下方 公众号 获取👇🏻 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。