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

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

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

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

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的各类学习资料

脱单秘籍:回复【脱单】

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

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

全网同名【码农飞哥】。不积跬步,无以至千里,享受分享的快乐
我是码农飞哥,再次感谢您读完本文

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容