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库发送请求将网页内容下 ...
随机推荐
- FastJson用法
namespace test { class Program { static void Main(string[] args) { var zoo1 = new zoo(); zoo1.animal ...
- ads出现村田电容电感无法仿真的问题解决(`BJT1' is an instance of an undefined model `BJTM1')
需要的控件是 murata include,该控件是跟随村田库一起倒入ADS中的
- z分数
一.公式 计算过程为样本x的值与样本总体平均值的差,再除以标准差. 当以标准差为单位,要统计样本与均值偏离了多少值时,就用此公式.
- cookie、session、sessionStorage 、localStorage 区别
1> cookie在浏览器与服务器之间来回传递,在想服务器发送请求时,web浏览器会自动携带cookie. sessionStorage和localStorage不会把数据发给服务器,仅在本地保 ...
- 深入理解内存模型JMM
JMM(java memory model)java内存模型主要目标是定义程序中的变量,(此处所指的变量是实例字段.静态字段等,不包含局部变量和函数参数,因为这两种是线程私有无法共享)在虚拟机中存储到 ...
- 【blog】SpringBoot的可执行文件如何在Linux中后台运行(待补充...)
参考链接 linux下利用nohup后台运行jar文件包程序:http://blog.csdn.net/tang9140/article/details/38899345
- python问题:AttributeError: 'module' object has no attribute 'SSL_ST_INIT'
AttributeError: 'module' object has no attribute 'SSL_ST_INIT' 问题背景: 下载工具wydomain,安装依赖包以后,出现下图问题. 几经 ...
- Javascript - ExtJs - 组件 - 分页
服务端只需要返回如下格式的字符串,ExtJs就可以解析并自动生成分页数据. , name: "sam" } ] } 准备: CREATE PROCEDURE [dbo]. ...
- C++ operator(重载操作符) 【转】
转自:http://www.cnblogs.com/xiangxiaodong/archive/2012/02/12/2348144.html operator是C++的关键字,它和运算符一起使用,表 ...
- 通过HTTP服务访问FTP服务器文件(配置nginx+ftp服务器)
1.前提 已安装配置好nginx+ftp服务 2.配置Nginx 服务器 2.1进入nginx 配置文件目录: cd /usr/local/nginx/conf vi nginx.conf 2.2 ...