python day1-requests
一、什么是requests
Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库。
相对于urllib库(自带,无需手动安装)而言,requests库的使用显得简单便捷(本质就是封装了urllib3)。
官方文档:http://cn.python-requests.org/zh_CN/latest/
二、requests的安装
1.电脑运行ctrl+R输入cmd(命令提示符)
2.运行pip install requests安装
三、requests库的使用
在requests库中,我们常用的是requests.get()和requests.post()
post请求与get请求区别:
1.在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTML HEADER内提交。
2.GET方式提交的数据最多只能有1024 Byte,而POST则没有此限制。
3.安全性问题。正如在(1)中提到,使用Get的时候,参数会显示在地址栏上,而Post不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用get;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用post为好。
requests.get()
import requests response = requests.get('http://www.baidu.com') #获取百度的源码
response.encoding = response.apparent_encoding #程序分析源码采用的编码格式
print(response.text) #打印源码
其实,我们在使用过程中经常需要传递一些参数,如百度搜索python,这时我们就可以通过拼接构造URL的方式实现,那么数据会以键/值对的形式置于 URL 中,跟在一个问号的后面。
例如:http://www.baidu.com/s?wd=python中Requests 允许你使用 params 关键字参数,以一个字典来提供这些参数。
import requests url = 'http://www.baidu.com/s'
params = {
'wd':'python'
}
response = requests.get(url,params=params) #传入参数
response.encoding = response.apparent_encoding
print(response.url) #返回http://www.baidu.com/s?wd=python
当然,你也可以使用最简单的拼接
url = 'http://www.baidu.com/s?wd=' + 'python'
response = requests.get(url)
print(response.url) #返回http://www.baidu.com/s?wd=python
拓展知识:
你还可以将一个列表作为值传入:
import requests
params = {'key1': 'value1', 'key2': ['value2', 'value3']}
r = requests.get('http://httpbin.org/get', params=params)
print(r.url)
# 打印的结果是
#http://httpbin.org/get?key1=value1&key2=value2&key2=value3
requests.post()
import requests data = {
"name":"zhaofan",
"age":23
}
response = requests.post("http://httpbin.org/post",data=data)
print(response.text)
'''
返回
{
"args": {},
"data": "",
"files": {},
"form": {
"age": "23",
"name": "zhaofan"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "19",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.20.0"
},
"json": null,
"origin":,
"url": "https://httpbin.org/post"
} '''
其他HTTP请求类型:PUT,DELETE,HEAD 以及 OPTIONS其实都是差不多的用法
r = requests.put('http://httpbin.org/put', data = {'key':'value'})
r = requests.delete('http://httpbin.org/delete')
r = requests.head('http://httpbin.org/get')
r = requests.options('http://httpbin.org/get')
四、定制请求头
网站建立的最终目的是让人来访问的,其实几乎每个网站都是拒绝爬虫的,因此引出各种各样的反爬手段,那么网站是靠什么来判定我们是爬虫的?
方法有很多,其中最普遍的是通过请求头来判断。
在发送HTTP请求的时候浏览器都会带上请求头信息等,如果我们的程序没有带上,或者带上的请求头信息是错误的,也就是不被服务器认可的,那么就会遭到服务器的拒绝!
import requests url = 'http://www.baidu.com/s'
params = {
'wd':'python'
}
#请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
}
response = requests.get(url,params=params,headers=headers)
此外,我们也可以通过fake_useragent来随机生成一个请求头
from fake_useragent import UserAgent us = UserAgent()
print(us.random) #打印随机生成的请求头
注意:我们只是加上了User-Agent信息就可以正常访问了,但是浏览器是发送了比我们更多的信息的。如果遇到加上请求头User-Agent信息也不成功的网站,可以尝试添加其他请求头信息。
五、响应状态码
import requests url = 'http://www.baidu.com/'
response = requests.get(url)
print(response.status_code) #返回200
相关的响应状态码请访问网友的博客:https://www.cnblogs.com/dekui/p/7801289.html
六、cookie
现在的网站中有这样的一种网站类型,也就是需要用户注册以后,并且登陆才能访问的网站,或者说在不登录的情况下不能访问自己的私有数据,例如微博,微信等。
网站记录用户信息的方式就是通过客户端的Cookie值。例如:当我们在浏览器中保存账号和密码的同时,浏览器在我们的电脑上保存了我们的用户信息,并且在下次访问这个页面的时候就会自动的为我们加载Cookie信息。
在需要登陆的网站中,浏览器将Cookie中的信息发送出去,服务器验证Cookie信息,确认登录。既然浏览器在发送请求的时候带有Cookie信息,那么我们的程序同样也要携带Cookie信息。
Cookie是当你访问某个站点或者特定页面的时候,留存在电脑里的一段文本,它用于跟踪记录网站访问者的相关数据信息,比如:搜索偏好、行为点击,账号,密码等内容。
通常Cookie值信息可以在浏览器中复制过来,放到headers中:
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Length': '',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Cookie': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', # 浏览器中复制
'Host': 'www.lagou.com',
'Origin': 'https://www.lagou.com',
'Referer': 'https://www.lagou.com/jobs/list_Python?labelWords=&fromSearch=true&suginput=',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36',
'X-Anit-Forge-Code': '',
'X-Anit-Forge-Token': 'None',
'X-Requested-With': 'XMLHttpRequest',
}
python day1-requests的更多相关文章
- Python爬虫之使用Fiddler+Postman+Python的requests模块爬取各国国旗
介绍 本篇博客将会介绍一个Python爬虫,用来爬取各个国家的国旗,主要的目标是为了展示如何在Python的requests模块中使用POST方法来爬取网页内容. 为了知道POST方法所需要传 ...
- Python——安装requests第三方库
使用pip安装 在cmd下cd到这个目录下C:\Python27\Scripts,然后执行pip install requests 在cmd 命令行执行 E: 进入e盘 cd Python\pr ...
- 关于Python ,requests的小技巧
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xie_0723/article/details/52790786 关于 Python Request ...
- Python之Requests的高级用法
# 高级用法 本篇文档涵盖了Requests的一些更加高级的特性. ## 会话对象 会话对象让你能够跨请求保持某些参数.它也会在同一个Session实例发出的所有请求之间保持cookies. 会话对象 ...
- python的requests快速上手、高级用法和身份认证
https://blog.csdn.net/qq_25134989/article/details/78800209 快速上手 迫不及待了吗?本页内容为如何入门 Requests 提供了很好的指引.其 ...
- Python 安装requests和MySQLdb
Python 安装requests和MySQLdb 2017年10月02日 0.系统版本 0.1 查看系统版本 [root@localhost ~]# uname -a Linux localhost ...
- 【转】使用Python的Requests库进行web接口测试
原文地址:使用Python的Requests库进行web接口测试 1.Requests简介 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写, ...
- Python+Unittest+Requests+PyMysql+HTMLReport 接口自动化框架
整体框架使用的是:Python+Unittest+Requests+PyMysql+HTMLReport 多线程并发模式 主要依赖模块 Unittest.Requests.PyMysql.HTMLR ...
- 对比3种接口测试的工具:jmeter+ant;postman;python的requests+unittest或requests+excel
这篇随笔主要是对比下笔者接触过的3种接口测试工具,从实际使用的角度来分析下3种工具各自的特点 分别为:jmeter.postman.python的requests+unittest或requests+ ...
- python day1 python介绍,安装及运算符
目录 python day1 1. 不同编程语言的对比 2. 为什么学python? 3. python的种类 4. python的安装(windows系统) 5. 导入模块或包 6. pyc文件 7 ...
随机推荐
- MySQL错误日志显示(Got an error reading communication packets)的问题
错误显示: 2019-05-28T12:54:08.267934+08:00 820396 [Note] Aborted connection 820396 to db: 'Databaseplatf ...
- 6.LINUX32位和64位系统的区别和选择
- Linux基本命令使用(三)
1.压缩解压命令:gzip, .gz格式的 gzip 文件名 就压缩了. Linux压缩的放到Windows下可以解压,但是Windows下压缩到Linux解压就不一定可以. (1)只能压 ...
- JMS学习十一(ActiveMQ Consumer高级特性之独有消费者(Exclusive Consumer))
一.简介 Queue中的消息是按照顺序被分发到consumers的.然而,当你有多个consumers同时从相同的queue中提取消息时, 你将失去这个保证.因为这些消息是被多个线程并发的处理.有的时 ...
- 《Effective Java》读书笔记 - 3.对于所有对象都通用的方法
Chapter 3 Methods Common to All Objects Item 8: Obey the general contract when overriding equals 以下几 ...
- Mybaits 运行原理流程时序图
1 .初始化sqlsessionFactory 2openSession 3.getMapper返回接口的代理对象 包含了SqlSession对象 4.查询流程
- 配置 setting镜像在nexus私服上下载
在你的本地仓库上 setting文件中配置,一旦nexus服务关闭是无法下载的 1 配置nexus镜像 <mirror> <id>central1</id> < ...
- 网站模板-AdminLTE:AdminLTE
ylbtech-网站模板-AdminLTE:AdminLTE 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 1. https://adminlte.io/ 1. ...
- delphi 跨版本DLL调用嵌入窗体实现
delphi 能实现把别的DLL的窗体句柄查到后,贴到PANL之中,此类文章网上不少,而如果是delphi不同版本开发的DLL互调时,一些控件内部的定义有所区别,因为无法(至少目前我觉得理论上不可行) ...
- delphi DLL image 动态绘图 句柄处理
在调用DLL 动态在T Image 绘图时,传入 Image.Canvas.Handle 后,却总是绘不上,有时偶尔能绘上,却没搞清原因,而同样的代码,传入窗体的 Handle ,绘图却正常. 经过 ...