做印刷品去哪个网站,东莞常平做网站,wordpress设置积分阅读,福州网站建设推广公司学习目标#xff1a;
了解 requests模块的介绍掌握 requests的基本使用掌握 response常见的属性掌握 requests.text和content的区别掌握 解决网页的解码问题掌握 requests模块发送带headers的请求掌握 requests模块发送带参数的get请求
1 为什么要重点学习requests模块…学习目标
了解 requests模块的介绍掌握 requests的基本使用掌握 response常见的属性掌握 requests.text和content的区别掌握 解决网页的解码问题掌握 requests模块发送带headers的请求掌握 requests模块发送带参数的get请求
1 为什么要重点学习requests模块而不是urllib
requests的底层实现就是urllibrequests在python2 和python3中通用方法完全一样requests简单易用Requests能够自动帮助我们解压(gzip压缩的等)响应内容
2 requests的作用
作用发送网络请求返回响应数据
补充Python爬虫踩坑UnicodeEncodeError: ‘gbk‘ codec can‘t encode character 全有效解的决方法
PyCharm设置我注意到我已经用utf-8来解码了但是解释器的报错信息还是暴出gbk方面的解码错误。会对这串二进制流进行处理的只有三方一方是Chrome浏览器一方是Python解释器另一方是PyCharm事实证明Chrome浏览器用utf-8格式是可以解析的那么格式肯定是对的StreamReader类已经考虑到了异常字符的处理方式所以Python本身也不会有问题那么问题只有可能出在PyCharm的设置上了。点击File - Settings…
将下面的GBK改成UTF-8就可以解决这个问题了 大功告成
3 requests模块发送简单的get请求、获取响应
需求通过requests向百度首页发送请求获取百度首页的数据
import requests# 目标url
url https://www.baidu.com# 向目标url发送get请求
response requests.get(url)# 打印响应内容
print(response.text)response的常用属性
response.text 响应体 str类型respones.content 响应体 bytes类型response.status_code 响应状态码response.request.headers 响应对应的请求头response.headers 响应头response.request._cookies 响应对应请求的cookieresponse.cookies 响应的cookie经过了set-cookie动作
思考text是response的属性还是方法呢
一般来说名词往往都是对象的属性对应的动词是对象的方法
3.1 response.text 和response.content的区别 response.text 类型str解码类型 requests模块自动根据HTTP 头部对响应的编码作出有根据的推测推测的文本编码如何修改编码方式response.encoding”gbk” response.content 类型bytes解码类型 没有指定如何修改编码方式response.content.deocde(“utf8”)
获取网页源码的通用方式
response.content.decode()response.content.decode(GBK)response.text
以上三种方法从前往后尝试能够100%的解决所有网页解码的问题
所以更推荐使用response.content.deocde()的方式获取响应的html页面
3.2 练习把网络上的图片保存到本地
我们来把www.baidu.com的图片保存到本地
思考
以什么方式打开文件保存什么格式的内容
分析
图片的url: https://www.baidu.com/img/bd_logo1.png利用requests模块发送请求获取响应以2进制写入的方式打开文件并将response响应的二进制内容写入
import requests# 图片的url
url https://www.baidu.com/img/bd_logo1.png# 响应本身就是一个图片,并且是二进制类型
response requests.get(url)# print(response.content)# 以二进制写入的方式打开文件
with open(baidu.png, wb) as f:# 写入response.content bytes二进制类型f.write(response.content)4 发送带header的请求
我们先写一个获取百度首页的代码
import requestsurl https://www.baidu.comresponse requests.get(url)print(response.content)# 打印响应对应请求的请求头信息
print(response.request.headers)为什么请求需要带上header 模拟浏览器欺骗服务器获取和浏览器一致的内容
4.1 header的形式字典
headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36}
4.2 用法
requests.get(url, headersheaders)
4.3 完整的代码
import requestsurl https://www.baidu.comheaders {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36}# 在请求头中带上User-Agent模拟浏览器发送请求
response requests.get(url, headersheaders)# print(response.content)# 打印请求头信息
print(response.request.headers)5 发送带参数的请求
我们在使用百度搜索的时候经常发现url地址中会有一个 ?那么该问号后边的就是请求参数又叫做查询字符串
5.1 什么叫做请求参数
例1https://blog.csdn.net/weixin_51390582
例2https://blog.csdn.net/weixin_51390582?spm1011.2415.3001.5343
例1中没有请求参数例2中?后边的就是请求参数
5.2 请求参数的形式字典
kw {wd:长城}
5.3 请求参数的用法
requests.get(url,paramskw)
5.4 关于参数的注意点
在url地址中 很多参数是没有用的比如百度搜索的url地址其中参数只有一个字段有用其他的都可以删除 如何确定那些请求参数有用或者没用挨个尝试 对应的,在后续的爬虫中越到很多参数的url地址都可以尝试删除参数
5.5 两种方式发送带参数的请求
对https://www.baidu.com/s?wdpython发起请求可以使用requests.get(url, paramskw)的方式
# 方式一利用params参数发送带参数的请求
import requestsheaders {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36}# 这是目标url
# url https://www.baidu.com/s?wdpython# 最后有没有问号结果都一样
url https://www.baidu.com/s?# 请求参数是一个字典 即wdpython
kw {wd: python}# 带上请求参数发起请求获取响应
response requests.get(url, headersheaders, paramskw)# 当有多个请求参数时requests接收的params参数为多个键值对的字典比如 ?wdpythonac--{wd: python, a: c}print(response.content)也可以直接对https://www.baidu.com/s?wdpython完整的url直接发送请求不使用params参数
# 方式二直接发送带参数的url的请求
import requestsheaders {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36}url https://www.baidu.com/s?wdpython# kw {wd: python}# url中包含了请求参数所以此时无需params
response requests.get(url, headersheaders) 小结
requests模块的介绍能够帮助我们发起请求获取响应requests的基本使用requests.get(url)以及response常见的属性
response.text 响应体 str类型respones.content 响应体 bytes类型response.status_code 响应状态码response.request.headers 响应对应的请求头response.headers 响应头response.request._cookies 响应对应请求的cookieresponse.cookies 响应的cookie经过了set-cookie动作
掌握 requests.text和content的区别text返回str类型content返回bytes类型掌握 解决网页的解码问题
response.content.decode()response.content.decode(GBK)response.text
掌握 requests模块发送带headers的请求requests.get(url, headers{})掌握 requests模块发送带参数的get请求requests.get(url, params{})