1)requests模块
一:requests 介绍
requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,
从而使得Pythoner进行网络请求时,变得美好了许多,使用requests可以轻而易举的完成浏览器可有的任何操作。
二:requests 安装
pip install requests
三:requests常用方法
response=requests.get(url) #以GET方式请求
response=requests.post(url) #以POST方式请求
response.text #获取内容
response.content
response.encoding #设置编码格式
response.apparent_encoding#自动获取编码
response.code_status #200,404 #返回数据的状态码 response.cookies.get_dict() #获取cookies信息 requests.get(url,cookie={}) requests.get
requests.post
requests.delete
requests.request(
'get',#post,get,delete...
)
四:requests常用参数
def request(method, url, **kwargs):
"""Constructs and sends a :class:`Request <Request>`. :param method: method for the new :class:`Request` object.
:param url: URL for the new :class:`Request` object.
:param params: (optional) Dictionary or bytes to be sent in the query string for the :class:`Request`.
:param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`.
:param json: (optional) json data to send in the body of the :class:`Request`.
:param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`.
:param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`.
:param files: (optional) Dictionary of ``'name': file-like-objects`` (or ``{'name': file-tuple}``) for multipart encoding upload.
``file-tuple`` can be a 2-tuple ``('filename', fileobj)``, 3-tuple ``('filename', fileobj, 'content_type')``
or a 4-tuple ``('filename', fileobj, 'content_type', custom_headers)``, where ``'content-type'`` is a string
defining the content type of the given file and ``custom_headers`` a dict-like object containing additional headers
to add for the file.
:param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth.
:param timeout: (optional) How long to wait for the server to send data
before giving up, as a float, or a :ref:`(connect timeout, read
timeout) <timeouts>` tuple.
:type timeout: float or tuple
:param allow_redirects: (optional) Boolean. Set to True if POST/PUT/DELETE redirect following is allowed.
:type allow_redirects: bool
:param proxies: (optional) Dictionary mapping protocol to the URL of the proxy.
:param verify: (optional) whether the SSL cert will be verified. A CA_BUNDLE path can also be provided. Defaults to ``True``.
:param stream: (optional) if ``False``, the response content will be immediately downloaded.
:param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair.
:return: :class:`Response <Response>` object
:rtype: requests.Response Usage:: >>> import requests
>>> req = requests.request('GET', 'http://httpbin.org/get')
<Response [200]>
""" 参数列表
参数详细说明
#参数
requests.request - method:提交方式
- url:提交地址
- params:在url上传递的参数 GET http://www.oldboyedu.com
params={"k1":"v1","k2":"v2"}
requests.request(
method="GET,
url="http://www.oldboyedu.com",
params={"k1":"v1","k2":"v2"}
)
http://www.oldboyedu.com?k1=v1&k2=v2 - data: 在请求体里面传递的数据(字典,字节,字符串)(form表单提交以这种形式) requests.request(
method="POST,
url="http://www.oldboyedu.com",
params={"k1":"v1","k2":"v2"}
data={"user1":"alex","pwd":""}
) #以这种形式传递会在请求头增加
content-type:application/x-www-form-urlencoded
#这有什么作用
在django里面
request.POST是从request.body提取,就是根据application/x-www-form-urlencoded 判断,如果你修改了
request.body有值 但是request.POST里面没有
#会把数据封装成
user=alex&pwd=123 - json 在请求体里传递的数据 requests.request(
method="POST,
url="http://www.oldboyedu.com",
params={"k1":"v1","k2":"v2"}
json={"user1":"alex","pwd":""}#当作字符串发送
) #请求头
content-type:application/json
#会把数据封装成字符串
{"user1":"alex","pwd":""}转字符串 #这两种有什么区别:
data={"user1":"alex","pwd":"",“x":[1,2,3]}这种data不行
json可以传递字典中嵌套字典时 - headers请求头 requests.request(
method="POST,
url="http://www.oldboyedu.com",
params={"k1":"v1","k2":"v2"}
json={"user1":"alex","pwd":""}
headers={
"Referer":"http://dig.chouti.com", #上次访问的地址
"User-Agent":"...",是什么客户端发的
}
)
- cookies cookies是怎么发给服务器端,是放在请求头里面 - files 上传文件 requests.request(
method="POST,
url="http://www.oldboyedu.com",
files={
"f1":open("a.txt",'rb"),
或者"f2":("文件名",open("a.txt",'rb"))
}
)
- auth 认证 用的比较多的是路由器如FTP等弹出个弹框,输入用户名和密码,。这种形式页面输入和输出代码都看不到http://httpbin.org
- timeout 超时
- param_timeout #连接和发送的超时param_timeout=(5,1)
- allow_redirects:是否重写向跳转
- proxies 权重或者代理 requests.post( url="http://www.oldboyedu.com",
proxys={
"http":"http://4.19.128.5:8099"
}
)
不会直接发oldboyedu,会先发代理,代理在发oldboyedu
- stream get是先把东西下载到内在。stream一点一点下载。
- vertify
- cert 提供证书
https服务器会先给客户端发一个证书。服务器加密,客户端解密 request.get(
url="https://"
cert="fuck.pem"#自己做的cent,还有第三方的证书
)
request.get(
url="https://"
cert=("fuck.crt','xxx.key')
) request.get(
url="https://"
vertify=False,hulei证书
) - session:用于保存客户端历史访问信息 - proixes
#"http":"61.172.249.96:80"
#"http":"root:123@61.172.249.96:80"
五:请求头和请求体
##响应是也是有请求头和请求体
不管是get,post 都需要发送HTTP请求,HTTP请求都包含请求头和请求体。
请求头和请求体如何分割
请求头\r\n\r\n请求体
######
请求头
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding:gzip, deflate, br
Accept-Language:zh-CN,zh;q=0.9
请求头上面每个KEY-VALUE是如何分割的。以\r\n分割
\r\n\r\n
请求体
上面形成一行,以\r\n或者\r\n\rn分割一起发送
####如果是get请求,只会发请求头
有个协议
Http1.1 / GET "/ 就是访问的URL" #协议
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding:gzip, deflate, br
Accept-Language:zh-CN,zh;q=0.9
#比如http://www.baidu.com?nid=1&v=1
Http1.1 http://www.baidu.com?nid=1&v=1 GET
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding:gzip, deflate, br
Accept-Language:zh-CN,zh;q=0.9
\r\n\r\n
###如果是POST请求
比如http://www.baidu.com?nid=1&v=1
Http1.1 / GET
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding:gzip, deflate, br
Accept-Language:zh-CN,zh;q=0.9
\r\n\r\n
nid=1&v=1
##响应
普通都是这样
响应头
Cache-Control:no-cache
Content-Encoding:gzip
响应体
<html>
</html>
如果是跳转(重定向)就没有响应体
响应头
Cache-Control:no-cache
Content-Encoding:gzip
location:http://www.baidu.com #多了个跳转地址
可以获取响应码301/302
或者通过响应头获取location
只在响应有有location就要可以跳转
六:总结
#总结
#get参数
requests.get(
url="http://www.baidu.com",
params={"k1":"v1","k2":"v2"}, #传递的参数http://www.baidu.com?k1=v1&k2=v2
cookies={"c1":"v1","c2":"v2"}, #cookie在请求头
headers={
"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Mobile Safari/537.36" ,#模拟浏览器,有些网站会检查
"Referer":"htt", #浏览器上次访问的地址,有的网站会检查,如果不带,网站会认为是爬冲
}
) 扩展
1. HTTP请求
- 头
- 体
2. cookies
- 请求放在请求头
- 响应在响应头 3. 重定向 - 响应头
1)requests模块的更多相关文章
- 爬虫requests模块 1
让我们从一些简单的示例开始吧. 发送请求¶ 使用 Requests 发送网络请求非常简单. 一开始要导入 Requests 模块: >>> import requests 然后,尝试 ...
- requests 模块
发送请求 使用Requests发送网络请求非常简单. 一开始要导入Requests模块: >>> import requests 然后,尝试获取某个网页.本例子中,我们来获取Gith ...
- requests模块--python发送http请求
requests模块 在Python内置模块(urllib.urllib2.httplib)的基础上进行了高度的封装,从而使得Pythoner更好的进行http请求,使用Requests可以轻而易举的 ...
- Python requests模块学习笔记
目录 Requests模块说明 Requests模块安装 Requests模块简单入门 Requests示例 参考文档 1.Requests模块说明 Requests 是使用 Apache2 Li ...
- Python高手之路【八】python基础之requests模块
1.Requests模块说明 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2 ...
- Python requests模块
import requests 下面就可以使用神奇的requests模块了! 1.向网页发送数据 >>> payload = {'key1': 'value1', 'key2': [ ...
- 基于python第三方requests 模块的HTTP请求类
使用requests模块构造的下载器,首先安装第三方库requests pip install requests 1 class StrongDownload(object): def __init_ ...
- 使用requests模块爬虫
虽然干技术多年了,但从没有写过博客,想来甚是惭愧,本篇作为我博客的第一篇,也是测试篇.不为写的好,只为博诸君一眸而已. 使用python爬虫,有几个比较常用的,获取html_content的模块url ...
- [实战演练]python3使用requests模块爬取页面内容
本文摘要: 1.安装pip 2.安装requests模块 3.安装beautifulsoup4 4.requests模块浅析 + 发送请求 + 传递URL参数 + 响应内容 + 获取网页编码 + 获取 ...
- python爬虫之requests模块介绍
介绍 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) #注意:requests库发送请求将网页内容下 ...
随机推荐
- spring注解第05课 FactoryBean
1.工厂bean调用 @Configuration public class MainConfig2 {/** * 使用Spring提供的 FactoryBean(工厂Bean); * 1).默认获取 ...
- docker搭建lnmp环境
1.搭建lnmp网站平台 1.创建mysql数据库容器 docker run -it -d --name lnmp_mysql -p 3308:3306 -e MYSQL_ROOT_PASSWORD= ...
- springboot13 发布和监听事件
spring中的事件驱动模型Event(也叫发布订阅模式),是观察者模式的一个典型的应用 好处:业务解耦,在不影响原来业务逻辑的情况下,加入其它业务 场景: app上线后已实现用户注册功能,现需要在用 ...
- Docker 更改默认存储目录 - 十一
Cemtos 7 Docker 默认目录是 /var/lib/docker docker info 查看 docker 配置信息 更改 docker 默认目录 : 编辑 启动文件: 编辑 /usr/ ...
- Docker 容器文件导出 - 六
Docker 容器 导入导出 导入:import 导出:export 打tar包导出容器 nginx1 的文件系统: # docker export nginx1 > nginx1.tar.gz ...
- J - Joyful HDU - 5245 (概率)
题目链接: J - Joyful HDU - 5245 题目大意:给你一个n*m的矩阵,然后你有k次涂色机会,然后每一次可以选定当前矩阵的一个子矩阵染色,问你这k次用完之后颜色个数的期望. 具体思路 ...
- PTA 逆散列问题 (30 分)(贪心)
题目链接:https://pintia.cn/problem-sets/1107178288721649664/problems/1107178432099737614 题目大意: 给定长度为 N 的 ...
- js 一个对象的属性名是一个变量怎么处理?
1.这种方法的属性(setAttrName)可以是一个变量. var obj = {}; obj[setAttrName] = 'Tom' 2.这样就可以动态的给js对象添加变量属性. var obj ...
- Palindromic Numbers LightOJ - 1205
题目大意: 求区间内的回文数个数 题目思路: 数位dp,先枚举前一半数字,然后填上相应的后一半数字. #include<cstdio> #include<cstring> #i ...
- GridView position = 0重复加载的问题
在做项目开发中,遇到GridView设置的adapter,adapter中包含异步加载图片的问题,因为gridView item的高度没有做限制,是自适应的,导致positon = 0会在加载时重复出 ...