![Python网络爬虫从入门到精通](https://wfqqreader-1252317822.image.myqcloud.com/cover/915/44509915/b_44509915.jpg)
5.1 请求方式
由于requests模块为第三方模块,所以在使用requests模块时需要通过执行pip install requests代码进行该模块的安装。requests功能特性如下。
Keep-Alive &连接池。
国际化域名和URL。
带持久Cookie的会话。
浏览器式的SSL认证。
自动内容解码。
基本/摘要式的身份认证。
优雅的key/value Cookie。
自动解压。
Unicode响应体。
HTTP(S)代理支持。
文件分块上传。
流下载。
连接超时。
分块请求。
支持.netrc。
说明
如果使用了Anaconda,则不需要单独安装requests模块。
5.1.1 GET请求
【例5.1】 实现不带参数的GET网络请求。(实例位置:资源包\Code\05\01)
最常用的HTTP请求方式分别为GET和POST,在使用requests模块实现GET请求时可以使用两种方式来实现,一种带参数,另一种为不带参数,以百度为例实现不带参数的网络请求。代码如下:
![](https://epubservercos.yuewen.com/8BF9E9/23721540501937606/epubprivate/OEBPS/Images/Figure-P71_52563.jpg?sign=1739522070-oeIdhzCtOTay4PedDEPW4eP8tXRgo0DE-0-8e6068e8e745088b2fdb44591a720c2c)
程序运行结果如图5.1所示。
![](https://epubservercos.yuewen.com/8BF9E9/23721540501937606/epubprivate/OEBPS/Images/Figure-P71_13870.jpg?sign=1739522070-siSfuXCBLs6be0v0z9LnTgeVGCvhoFIx-0-7d4e615a9e53f56dba76195259a8136a)
图5.1 实现不带参数的网络请求
5.1.2 对响应结果进行utf-8编码
【例5.2】 获取请求地址所对应的网页源码。(实例位置:资源包\Code\05\02)
当响应状态码为200时说明本次网络请求已经成功,此时可以获取请求地址所对应的网页源码,代码如下:
![](https://epubservercos.yuewen.com/8BF9E9/23721540501937606/epubprivate/OEBPS/Images/Figure-P71_52564.jpg?sign=1739522070-LETc7WZzhhvpHfkO5BEPjhOfrs5EydK9-0-f73c37d7d7364b59c1852aaad3ce0d85)
程序运行结果如图5.2所示。
![](https://epubservercos.yuewen.com/8BF9E9/23721540501937606/epubprivate/OEBPS/Images/Figure-P72_13927.jpg?sign=1739522070-werI6I7pGsDgvkRwhCML7JI6dDbNHZG1-0-8ff961838e5f17a7638df7c589fdbc3b)
图5.2 获取请求地址所对应的网页源码
注意
在没有对响应内容进行utf-8编码时,网页源码中的中文信息可能会出现如图5.3所示的乱码。
![](https://epubservercos.yuewen.com/8BF9E9/23721540501937606/epubprivate/OEBPS/Images/Figure-P72_13986.jpg?sign=1739522070-m2hm8CgYmi86T87wzIxP3otQ0TeYTJrp-0-6d41c89c1e7c7a7aec0912928ff2b465)
图5.3 中文乱码
5.1.3 爬取二进制数据
【例5.3】 下载百度首页中的logo图片。(实例位置:资源包\Code\05\03)
使用requests模块中的get函数不仅可以获取网页中的源码信息,还可以获取二进制文件。但是在获取二进制文件时,需要使用Response.content属性获取bytes类型的数据,然后将数据保存在本地文件中。例如下载百度首页中的logo图片即可使用如下代码:
![](https://epubservercos.yuewen.com/8BF9E9/23721540501937606/epubprivate/OEBPS/Images/Figure-P72_52565.jpg?sign=1739522070-0GClrlJNBv3k1si0eoyBbQFHOowROQqP-0-2193c4200e48bafc79f3b6acc758fdc9)
程序运行后打印的二进制数据如图5.4所示。程序运行后,当前目录下将自动生成如图5.5所示的“百度logo.png”图片。
![](https://epubservercos.yuewen.com/8BF9E9/23721540501937606/epubprivate/OEBPS/Images/Figure-P73_14007.jpg?sign=1739522070-ZKOo8PtsjdCZhpA0OOBIRaogcwdzo7tx-0-e26a3bba2a68c6756da832e92754afa2)
图5.4 打印的二进制数据
![](https://epubservercos.yuewen.com/8BF9E9/23721540501937606/epubprivate/OEBPS/Images/Figure-P73_14014.jpg?sign=1739522070-lK0MHOQQDawVr6nJzWa9SaFqmtSJW4wK-0-c285e86da8bf528047581050afb327c9)
图5.5 百度logo图片
5.1.4 GET(带参)请求
1.实现请求地址带参
如果需要为GET请求指定参数时,则可以直接将参数添加在请求地址URL的后面,然后用问号(?)进行分隔,如果一个URL地址中有多个参数,参数之间用(&)进行连接。GET(带参)请求代码如下:
![](https://epubservercos.yuewen.com/8BF9E9/23721540501937606/epubprivate/OEBPS/Images/Figure-P73_52566.jpg?sign=1739522070-gE6qhRmq3ya86wuku14R79qfVblKIlQf-0-201d2c910f5c771936ddc2d8d2bb0a7b)
程序运行结果如图5.6所示。
![](https://epubservercos.yuewen.com/8BF9E9/23721540501937606/epubprivate/OEBPS/Images/Figure-P73_14056.jpg?sign=1739522070-AjuIUsajDt6tWmiF6tOX21PePAhzebMK-0-44e840093cecca79579d001b9a7f15d7)
图5.6 输出的响应结果
说明
这里通过http://httpbin.org/get网站进行演示,该网站可以作为练习网络请求的一个站点使用,该网站可以模拟各种请求操作。
2.配置params参数
requests模块提供了传递参数的方法,允许使用params关键字参数,以一个字符串字典来提供这些参数。例如,想传递key1=value1和key2=value2到httpbin.org/get,那么可以使用如下代码:
![](https://epubservercos.yuewen.com/8BF9E9/23721540501937606/epubprivate/OEBPS/Images/Figure-P73_52567.jpg?sign=1739522070-0NdLLdeg4zsdpqYmeSQyZmKDPdkK4a0p-0-5d7547b3552d8d6a3d7cfc7fd9310a58)
程序运行结果如图5.7所示。
![](https://epubservercos.yuewen.com/8BF9E9/23721540501937606/epubprivate/OEBPS/Images/Figure-P74_14124.jpg?sign=1739522070-YvLaKz2B1P1DBwpcZuyD0YBEOUXonfiK-0-3f65fdc2440a450f684b2cf4d1f8a786)
图5.7 输出的响应结果
5.1.5 POST请求
【例5.4】 实现POST请求。(实例位置:资源包\Code\05\04)
POST请求方式也叫作提交表单,表单中的数据内容就是对应的请求参数。使用requests模块实现POST请求时需要设置请求参数data。POST请求的代码如下:
![](https://epubservercos.yuewen.com/8BF9E9/23721540501937606/epubprivate/OEBPS/Images/Figure-P74_52569.jpg?sign=1739522070-OKHlLavXq7pNdJPkrkjfpkT8zb00GEm4-0-3669adb576b1e1cee838607f6caafff7)
程序运行结果如图5.8所示。
![](https://epubservercos.yuewen.com/8BF9E9/23721540501937606/epubprivate/OEBPS/Images/Figure-P74_14204.jpg?sign=1739522070-99fifBBHI4ktMtAGELzcgDfArydPRxZm-0-5e01fbe12b056fd9c3c3d4779623bdf2)
图5.8 输出的响应结果
说明
POST请求中data参数的数据格式也可以是列表、元组或者是JSON。参数代码如下:
![](https://epubservercos.yuewen.com/8BF9E9/23721540501937606/epubprivate/OEBPS/Images/Figure-P75_53250.jpg?sign=1739522070-myjwjkiuJc2svxM9mgMpDZHFJqEr2BC0-0-28058da52f1755fa96c1a862f39ea848)
注意
requests模块中GET与POST请求的参数分别是params和data,所以不要将两种参数填写错误。