学习目标:
  1. 了解 requests模块的介绍
  2. 掌握 requests的基本使用
  3. 掌握 response常见的属性
  4. 掌握 requests.text和content的区别
  5. 掌握 解决网页的解码问题
  6. 掌握 requests模块发送带headers的请求
  7. 掌握 requests模块发送带参数的get请求

1 为什么要重点学习requests模块,而不是urllib

  • requests的底层实现就是urllib
  • requests在python2 和python3中通用,方法完全一样
  • requests简单易用
  • Requests能够自动帮助我们解压(gzip压缩的等)响应内容

2 requests的作用

作用:发送网络请求,返回响应数据

中文文档 : http://docs.python-requests.org/zh_CN/latest/index.html

通过观察文档来学习:如何使用requests来发送网络请求

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 响应对应请求的cookie
  • response.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”)

获取网页源码的通用方式:

  1. response.content.decode()
  2. response.content.decode("GBK")
  3. 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.com'response = requests.get(url)print(response.content)# 打印响应对应请求的请求头信息
print(response.request.headers)
4.1 思考

对比浏览器上百度首页的网页源码和代码中的百度首页的源码,有什么不同?

代码中的百度首页的源码非常少,为什么?

4.2 为什么请求需要带上header?

模拟浏览器,欺骗服务器,获取和浏览器一致的内容

4.3 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.4 用法

requests.get(url, headers=headers)

4.5 完整的代码
import requestsurl = 'https://www.baidu.com'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"}# 在请求头中带上User-Agent,模拟浏览器发送请求
response = requests.get(url, headers=headers) # print(response.content)# 打印请求头信息
print(response.request.headers)

5 发送带参数的请求

我们在使用百度搜索的时候经常发现url地址中会有一个 ?,那么该问号后边的就是请求参数,又叫做查询字符串

5.1 什么叫做请求参数:

例1: http://www.webkaka.com/tutorial/server/2015/021013/

例2:https://www.baidu.com/s?wd=python&a=c

例1中没有请求参数!例2中?后边的就是请求参数

5.2 请求参数的形式:字典

kw = {'wd':'长城'}

5.3 请求参数的用法

requests.get(url,params=kw)

5.4 关于参数的注意点

在url地址中, 很多参数是没有用的,比如百度搜索的url地址,其中参数只有一个字段有用,其他的都可以删除 如何确定那些请求参数有用或者没用:挨个尝试! 对应的,在后续的爬虫中,越到很多参数的url地址,都可以尝试删除参数

5.5 两种方式:发送带参数的请求

5.5.1 对https://www.baidu.com/s?wd=python发起请求可以使用requests.get(url, params=kw)的方式
# 方式一:利用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?wd=python' # 最后有没有问号结果都一样
url = 'https://www.baidu.com/s?' # 请求参数是一个字典 即wd=python
kw = {'wd': 'python'} # 带上请求参数发起请求,获取响应
response = requests.get(url, headers=headers, params=kw) # 当有多个请求参数时,requests接收的params参数为多个键值对的字典,比如 '?wd=python&a=c'-->{'wd': 'python', 'a': 'c'}print(response.content)
5.5.2 也可以直接对https://www.baidu.com/s?wd=python完整的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?wd=python'# kw = {'wd': 'python'}# url中包含了请求参数,所以此时无需params
response = requests.get(url, headers=headers)

6 作业

1.获取新浪首页,查看response.text 和response.content.decode()的区别

2.实现任意贴吧的爬虫,保存网页到本地


小结

  1. requests模块的介绍:能够帮助我们发起请求获取响应
  2. requests的基本使用:requests.get(url)
  3. 以及response常见的属性:
    • response.text 响应体 str类型
    • respones.content 响应体 bytes类型
    • response.status_code 响应状态码
    • response.request.headers 响应对应的请求头
    • response.headers 响应头
    • response.request._cookies 响应对应请求的cookie
    • response.cookies 响应的cookie(经过了set-cookie动作)
  4. 掌握 requests.text和content的区别:text返回str类型,content返回bytes类型
  5. 掌握 解决网页的解码问题:
    • response.content.decode()
    • response.content.decode("GBK")
    • response.text
  6. 掌握 requests模块发送带headers的请求:requests.get(url, headers={})
  7. 掌握 requests模块发送带参数的get请求:requests.get(url, params={})

转载于:https://www.cnblogs.com/zc2018/p/9464299.html

requests模块的入门使用相关推荐

  1. python requests下载图片_python读取图片大小Python Requests模块快速入门

    requests是python的一个HTTP客户端库,跟urllib,urllib2类似.它比 urllib 更加方便,可以节约我们大量的工作,它比 urllib 更加 Pythoner. 安装 Re ...

  2. python requests 示例_Python Requests模块的简单示例

    这篇文章主要为大家详细介绍了Python Requests模块的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! ...

  3. requests模块用法举例

    json 请求 #! /usr/bin/python3 import requests import jsonclass url_request():def __init__(self):''' in ...

  4. 爬虫入门—requests模块基础之关键字搜狗搜索信息页面爬取

    爬虫入门-requests模块基础之关键字搜狗搜索信息页面爬取 Author: Labyrinthine Leo   Init_time: 2021.02.16 Key Words: Spider.r ...

  5. 爬虫入门—requests模块基础之药监企业信息爬取

    爬虫入门-requests模块基础之药监企业信息爬取 Author: Labyrinthine Leo   Init_time: 2021.02.22 Key Words: Spider.reques ...

  6. 爬虫入门—requests模块之搜狗首页下载

    爬虫入门-requests模块之搜狗首页下载 Author: Labyrinthine Leo   Init_time: 2021.02.16 Key Words: Spider.requests库 ...

  7. python的requests模块功能_requests模块的入门使用

    学习目标: 了解 requests模块的介绍 掌握 requests的基本使用 掌握 response常见的属性 掌握 requests.text和content的区别 掌握 解决网页的解码问题 掌握 ...

  8. 04. requests模块入门与三个案例(搜狗搜索/百度翻译/豆瓣电影)

    目录 前言 requests的安装 1. cmd中输入安装 2. PyCharm中运行安装 3. Anaconda虚拟环境中安装 4. 检查是否安装成功 案例1. 抓取搜狗搜索内容 案例2 利用百度翻 ...

  9. Python——requests模块详解

    1.模块说明 requests是使用Apache2 licensed 许可证的HTTP库. 用python编写. 比urllib2模块更简洁. Request支持HTTP连接保持和连接池,支持使用co ...

最新文章

  1. 全面开放270多项AI能力!百度大脑背后的技术到底有多强?
  2. kotlin 初始化数组
  3. Ocelot(六)- 架构图
  4. java命令行参数工具_Java方法中的参数太多,第8部分:工具
  5. 强力推荐几种多媒体播放器方案(jQuery、Flash、HTML5)
  6. 关于机器学习 Machine Learning中loss函数参数正则化的一点思考
  7. effective_transformer
  8. 命令行编译并运行JAVA
  9. WordPress主题Ripro子主题美化包wori-child 1.3+下载插件美化
  10. 光谱预处理最简单实现方法--基于OpenSA光谱分析库
  11. 量子计算机能做到0延迟吗,延迟选择量子擦除实验
  12. 服务器2012分辨率不能修改,《F1 2012》无法修改分辨率解决方法
  13. 一个比较稳定的PLC通讯模块设计
  14. macbook pro开机后自动关机
  15. 计算机会计期中考试,2017会计从业资格考试《会计电算化》基础阶段备考题
  16. mysql cursor nodata_mysql游标的使用 No data - zero rows fetched, selected
  17. 最小树形图——朱刘算法学习小记
  18. 江南电子计算机研究所,我的中国“芯” | 江南计算所SW1600:国产超算“神威蓝光”的“心脏”-控制器/处理器-与非网...
  19. 什么是 IconFont?有什么优缺点?
  20. 7 面向对象(成员变量和局部变量的区别,类作为形式参数的问题,匿名对象,封装,private关键字,this关键字,构造方法,类的初始化过程,static关键字)

热门文章

  1. 【CyberSecurityLearning 52】Web架构安全分析(web工作机制、HTTP协议)
  2. 【CyberSecurityLearning 45】PHP基础+变量、运算符、流程控制语句
  3. Java对象容器——集合Set
  4. 环形链表解法一:快追慢
  5. sizeof(函数名)=?
  6. Linux 0.00 的编译和运行
  7. 寄存器(内存访问)---汇编学习笔记
  8. UNIX再学习 -- 信号处理
  9. hdu-2209 dfs
  10. 干货 | 算法工程师入门第一期——罗恒讲深度学习