07《Python 原生爬虫教程》requests 第三方库
off999 2024-10-08 06:20 23 浏览 0 评论
官方定义:Requests is the only Non-GMO HTTP library for Python, safe for human consumption. 简单翻译一下就是:Requests 是唯一适用于 Python 的 Non-GMO HTTP 库,可供开发人员安全使用。
上面是 requests 库的官方定义。简单来说 requests 库是 Python 的第三方 HTTP 库,以 urllib 为基础。因为使用简单,人性化,安全的特性,被广泛的用来爬虫的请求发送。
1. requests 安装
可以通过 PIP 进行安装:
Tips:Python 环境安装之后 PIP 也会自动安装,直接打开 CMD 命令行使用即可。
pip install requests
也可以到 官网下载,然后通过以下命令进行安装。然后进入到下载的目录,输入以下命令:
python setup.py install
2. requests 请求
下面我们使用慕课网作为目标网站,并使用 requests 库进行请求:
2.1 get 无参数请求
我们直接使用 request 的 get 方法来请求慕课网,然后打印返回结果:
import requests
r = requests.get('https://www.imooc.com/')
print(r.text)
请求结果如下,格式为 HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>慕课网-程序员的梦工厂</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1">
<meta name="renderer" content="webkit" />
<meta name="mobile-agent" content="format=wml"; url="https://m.imooc.com/">
<link rel="alternate" media="only screen and (max-width: 640px)" href="https://m.imooc.com/">
<meta name="mobile-agent" content="format=xhtml"; url="https://m.imooc.com/">
<meta name="mobile-agent" content="format=html5"; url="https://m.imooc.com/">
<meta property="qc:admins" content="77103107776157736375" />
......
2.2 get 有参数请求
下面我们给 get 请求加上参数,来看看返回结果:
import requests
r = requests.get('https://www.imooc.com/common/adver-getadverlistbymarking?marking=global_newcomer
', {marking: global_newcomer})
print(r.text)
请求结果如下,格式为 Json:
{"result":0,"data":{"global_newcomer":{"id":"2696","name":"\u65b0\u4eba\u6709\u793c","column_id":"366","description":"","pic":"\/\/img3.mukewang.com\/5df2084b096514ff25600136.png","links":"https:\/\/www.imooc.com\/act\/newcomer","type":"99","type_id":"0","create_time":"1576142925","uid":"10001","is_open":"0","seqid":"0","status":"0","start_time":"0","end_time":"0","skillid_list":""}},"msg":"\u6210\u529f"}
2.3 无参数的 post 请求
import requests
r = requests.post('https://www.imooc.com/search/hotwords')
print(r.text)
请求结果如下,格式为 Json:
{"result":0,"data":["Vue","Python","Java","flutter","springboot","docker","React","\u5c0f\u7a0b\u5e8f"],"msg":"\u6210\u529f"}
2. 4 有参数的 post 请求
import requests
r = requests.post('https://httpbin.org/post', data = {'key':'value'})
print(r.text)
请求结果如下,格式为 Json:
{
"args": {},
"data": "",
"files": {},
"form": {
"key": "value"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "9",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.22.0",
"X-Amzn-Trace-Id": "Root=1-5e3bde61-bb0c787463f0852c81b7faa8"
},
"json": null,
"origin": "124.78.170.82",
"url": "https://httpbin.org/post"
}
代码块1234567891011121314151617181920除了 get,post 等基本请求,Request 也支持其他的请求类型。以下罗列的是官方提供的其他请求方法:
r = requests.put('https://httpbin.org/put', data = {'key':'value'})
r = requests.delete('https://httpbin.org/delete')
r = requests.head('https://httpbin.org/get')
r = requests.options('https://httpbin.org/get')
3. requests 的响应
3.1 获取二进制响应内容
import requests
r = requests.post('https://www.imooc.com/')
print(r.content)
返回的二进制文本如下所示:
b'\n\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n<meta charset="utf-8">\r\n<title>\xe6\x85\x95\xe8\xaf\xbe\xe7\xbd\x91-\xe7\xa8\x8b\xe5\xba\x8f\xe5\x91\x98\xe7\x9a\x84\xe6\xa2\xa6\xe5\xb7\xa5\xe5\x8e\x82</'
......
某些情况下,我们需要获取二进制的内容,比如图片或者一些视频的信息流。
3.2 获取响应状态码和响应编码
import requests
r = requests.post('https://www.imooc.com/')
print(r.status_code)
print(r.encoding)
请求成功后将会得到以下的状态码。另外,request 库同时也提供了 requests.codes.ok 来表示请求成功。
通过响应码,我们可以知道我们请求的是否发送成功,是否被正确的解析,以及是否正确的返回。通过检验程序的编码,来防止编码不一致导致的乱码问题。
4. 自定义请求头
这里,我们把程序的请求头封装在了字典里,然后通过字典的形式传给 requests 进行请求,这样做,有助于我们代码的整洁性和可维护性。
url = 'https://www.imooc.com/'
headers = {'user-agent': 'app/1.0'}
r = requests.get(url, headers=headers)
print(r.request.headers) # 响应状态码
上述代码,我们仍然可以请求成功,只是更改了 user-agent 字段而已,返回的结果如下所示:
{'user-agent': 'muke_app/1.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
5. 高级内容
上面的内容我们只是罗列了一些 requests 库经常使用的功能,但是已经足够我们进行爬虫开发了。当然 requests 库还有许多的高级功能比如设置请求时间,会话,代理,以及身份认证等。有兴趣的同学可以参考去 Requests 官网 学习。这里我们就不一一赘述了。
6. 小结
这一个小节,我们讲解了 Requests 第三方库,介绍了安装,以及请求和响应。Reqeusts 库的设计非常的简单方便,绝大多数的爬虫程序都是使用 Requests 库进行网页的爬取。
相关推荐
- office ltsc版(Office LTSC版本区别)
-
office2021和2021ltsc的区别如下:1.更新策略不同。前者采用每个月月度更新的方法,提供功能更新、安全更新。后者不采用每个月月度更新的方法,且不提供功能更新。2.界面不同。2021采用了...
- 安装win7需要激活吗(现在安装win7旗舰版还需密钥吗)
-
要激活 Windows7如果是预装在计算机中的,买来之后便不用激活,这里预装指的是在厂商那里。正版的Windows7安装到计算机中,有三十天的试用期,若要永久使用,就要使...
- originos 3升级计划公布(originos升级包)
-
2023年2月。1.OriginOS3.0系统第一批升级时间为11月25日。2、包含iQOONeo7,X80系列,S15系列,iQOO9、iQOO10系列,以及折叠屏XFold系列和大屏XNo...
- 鸿蒙系统适配第三方机型(鸿蒙 第三方适配)
-
最新华为官方公布了鸿蒙系统3.0支持的机型名单,具体如下。鸿蒙系统3.0升级名单:1.Mate系列:MateXs2、MateX2、MateXs、Mate40、Mate40Pro、Mate...
- imei怎么下载(imei changer apk)
-
如果您的steam序列号激活了,可以尝试以下方法下载:1.使用steam自带的下载工具,如“下载工具”,在软件的“下载”选项卡中选择“序列号下载”。2.在下载页面中,选择要下载的游戏,然后点击“下...
- 电脑系统优化软件哪个好(系统优化软件排行榜)
-
有必要用,非常好用,WINDOWS优化大师是一个网络上下载率极高的系统维护软件。多年未曾清理过系统和硬盘的电脑,系统内部将产生大量的垃圾文件、临时文件、废旧程序等等win10系统不需要经常更新,关闭...
- 重装系统后硬盘不见了(重装系统后磁盘不见了)
-
硬盘不见可能是因为重装系统时未正确安装驱动程序或未对硬件进行正确设置。你可以按以下步骤排查问题:进入BIOS检查硬盘是否被识别,尝试重新连接数据线和电源线,更新或安装适当的硬件驱动程序,或者使用硬件故...
- 冰封u盘装win7系统教程图解(冰封u盘启动装机教程)
-
1.查找激活工具:通常来说,Win7冰封系统已经包含了必要的驱动,所以如果你的电脑上并没有出现设备错误,那你就可以正常使用。如果你需要添加任何驱动,请尝试从厂商下载相应的驱动并执行自动安装程序。如果...
- uefi模式下找不到硬盘(uefi引导找不到硬盘)
-
首先你的安装盘必须是从UEFI启动的,然后它才能安装为UEFI启动。(条件:Fat32文件系统,efi文件夹)其次你MBR+BIOS的系统想换成GPT+EFI的,分区得做一点改动,腾出来100M的空...
- win7怎么安装蓝牙驱动程序(win7电脑安装蓝牙驱动教程)
-
方法如下: 1、再开始里点击控制版面,点击【硬件和声音】找到【添加设备】 2、之后再选择你要添加的蓝牙耳机。 3、系统就会提示正在与蓝牙适配器连接,然后提示添加成功。 4、点击“开始”-“...
- 怎么装系统win7旗舰版(电脑怎么装win7旗舰版)
-
1、目前支持64位的Wincc版本有:WinccV7Sp3、WinccV11Sp2、WinccV12。2、Wincc的V11与V12两个版本不能共存,即不能同时安装在同一台电脑上。上述这两...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
慕ke 前端工程师2024「完整」
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
