python request库的get方法详解

request.get()@TOC

request.get()方法详解

声明:此贴为本人学习心得,中间很多内容来自其他老师的帖子,能力有限,代码等实例也是复制的,已尽量表明出处,方便理解学习,并非恶意盗取,特此声明。

毕业十年,最近突然对爬虫感兴趣,略微有些乱七八糟的基础便想强行啃代码,结果啃一鼻子灰,这都是些什么鬼。今天啃到request.get()方法时彻底蒙圈了,request库的get方法,官方是这么说的
在这里插入图片描述
url不用说,网址呗
params说是url的额外参数,以字典或字节流的格式,格式好理解,在网上查资料发现,params可以有22个参数可以设置。
**kwargs是控制访问的参数,怎么理解这个东西

import requests

data = {
    'name' : 'germey',
    'age' : '22'
}
r = requests.get("https://httpbin.org/get",params=data)
print(r.text)

既然是url的参数,应该就是url的一部分,为什么还要搞出来个参数集,经过一番查找,终于在这里找到了答案(https://blog.csdn.net/m0_37959925/article/details/80516915)
也许看文档更有效率,可是本人理解能力有限,看别人的帖子更有助于理解,菜鸟,没办法。书归正传,借用这位大神的例子。

应用requests.get方法中的params参数,目的是让自己的url不再那么臭长,使自己的代码看起来更加整齐。

例如这个网址

res = requests.get(url='https://b.faloo.com/l/0/1.html?t=1&k=%CB%D9%B6%C8')

?后边的就是url的参数,%CB%D9%B6%C8就是速度的意思。那么我们可以将代码改成这样

param={ 't':'1',

'k':'速度'.encode('gb2312')#因为网页的 charset=gb2312

}

res = requests.get(url='https://b.faloo.com/l/0/1.html',params=param)

res_text=res.text

print(res.url)
--------------------- 
版权声明:本文为CSDN博主「chmod777cj」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_37959925/article/details/80516915

#结果输出https://b.faloo.com/l/0/1.html?t=1&k=%CB%D9%B6%C8
就此得出结论

url中出现变量=xxx的这些是参数,可以用params进行连接

那么问题又来了

反爬就要加上headers,那这个headers是params吗,于是接着找,在阿特密斯X老师的帖子里找到了答案,上边是这样说的:

requests.request(method,url,**kwargs)

method:请求方法,对应get/put/post/delete/head/patch/options

url: 模拟获取页面的url连接

**kwrags:控制访问的参数,共13个

kwargs(13个参数):

(一)params

params:字典或者字节序列,作为参数增加到url中

例子:

import requests
kv={“wd”:“你好”}#拼接的内容用字典储存
r=requests.request(“GET”,“http://www.baidu.com/s”,params=kv)
print(r.url)
print(r.text)
运行后拼接的效果:http://www.baidu.com/s?wd=你好
(二)data
data:字典、字节、或文件对象,作为request
例子:
import requests
kv={“key1”:“value1”,“key2”:“value2”}
r=requests.request(“POST”,“http://httpbin.org/post”,data=kv)
print(r.text)
运行结果:
{
“args”: {},
“data”: “”,
“files”: {},
“form”: {
“key1”: “value1”,
“key2”: “value2”
},
“headers”: {
“Accept”: “/”,
“Accept-Encoding”: “gzip, deflate”,
“Connection”: “close”,
“Content-Length”: “23”,
“Content-Type”: “application/x-www-form-urlencoded”,
“Host”: “httpbin.org”,
“User-Agent”: “python-requests/2.18.1”
},
“json”: null,
“origin”: “113.235.118.39”,
“url”: “http://httpbin.org/post”
}
(三)json
json:JSON格式的数据,作为request的内容
(四)header
header:字典,http定制头
例子:
import requests
hd={‘user-agent’:“Chrome/10”}#改变浏览器模拟
r=requests.request(“post”,“http://www.baidu.com”,headers=hd
(五)cookies:
cookies:字典或CookieJar,request中的cookie
(六)auth
auth:元组,支持HTTP认证功能
(七)files:
files:字典类型,传输文件
(八)tiemout
timeout:设定时间
(九)proxies
。。。。。。

上边列举了9个参数,实际上已经足够解惑了,**在requests.request(method,url,**kwargs),params 和 header都是属于 kwargs。而get方法,将params拉出来单独作为第二个参数,其他kwargs是第三个参数,**所以一般看到的request.get是这样写的

r = requests.get(url,params=params,headers=headers)

不知道这样解释是不是片面,反正我是这么理解的。

接下来说说这个 r

这时候的r返回的是一个包含服务器资源的Response对象。包含从服务器返回的所有的相关资源。
上代码:

import requests

res = requests.get("http://127.0.0.1:9092")

print(res.status_code) # 200
print(res.url) # http://127.0.0.1:9092/
print(res.headers) # {'Content-Type': 'application/json; charset=utf-8', 'Content-Length': '10', 'Date': 'Sat, 22 Dec 2018 13:36:16 GMT', 'Connection': 'keep-alive'}
print(res.cookies) # <RequestsCookieJar[<Cookie cid=hello world for 127.0.0.1/>]>
print(res.text) # 8248154254
print(res.content) # b'8248154254' 写图片

print(res.cookies['cid']) # hello world


# 爬取 图片
r1 = requests.get('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1545496551516&di=8ed19596bc72aa87299ed7f234830128&imgtype=0&src=http%3A%2F%2Fimg5.duitang.com%2Fuploads%2Fitem%2F201107%2F31%2F20110731155631_htMcs.jpg')
b = r1.content
with open('hao.jpg','wb') as f:
    f.write(b)

--------------------- 
版权声明:本文为CSDN博主「adley_app」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/adley_app/article/details/85218349

从代码里显示了response的七个属性

r.status_code HTTP请求的返回状态,200表示连接成功,404表示失败
r.text HTTP响应内容的字符串形式,即url对应的页面内容
r.encoding 从HTTP header中猜测的响应内容编码方式(
r.apparent_encoding 从内容中分析出的响应内容编码方式(备选编码方式)
r.content HTTP响应内容的二进制形式
r.url 返回对象的网址
r.cookies 返回对象的cookis
注意r.text 开始看代码怎么也看不懂这个,以为是保存成text文件之类,后来被自己蠢哭了。

那么问题双来了,爬到东西,如何下载下来

下载小文件:

r = requests.get(image_url)

with open("down.png",'wb') as f:

    f.write(r.content)

为什么这种模式只能下载小文件呢?

因为这种模式下,从网站接受到的数据是一直储存在你的内存中,只有当你write时才写入硬盘,如果文件很大,那么所占用的内存也是很大的,所以有了以下的大文件下载方法

下载大文件

r = requests.get(image_url, stream=True)

with open("python.pdf", "wb") as f:

    for bl in r.iter_content(chunk_size=1024):

        if bl:

            f.write(bl)
--------------------- 
版权声明:本文为CSDN博主「chmod777cj」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_37959925/article/details/80516915
  • 28
    点赞
  • 136
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: `request.getcookies()` 是一个Python中常用的HTTP请求对象(如 Flask 或 Django 中的request对象)的方法,用于获取请求中包含的所有cookie信息。 当客户端向服务器发送HTTP请求时,可以通过cookie在客户端和服务器之间传递数据。服务器可以在HTTP响应头部中通过Set-Cookie标头将cookie发送给客户端。而客户端在之后的每个请求中都会在HTTP请求头中携带这些cookie数据。 在Python中,通过`request.getcookies()`方法可以获取到请求头中所有的cookie信息,返回一个字典对象,字典中的键为cookie的名称,值为对应的cookie值。如果请求头中没有任何cookie信息,则返回一个空字典。 例如,以下代码示例展示了如何使用Flask中的`request.getcookies()`方法来获取请求中的所有cookie信息: ``` from flask import Flask, request app = Flask(__name__) @app.route('/') def index(): cookies = request.get_cookies() return 'Cookies: {}'.format(cookies) if __name__ == '__main__': app.run() ``` 当我们访问这个应用时,`request.getcookies()`将会返回包含所有cookie的字典对象。如果请求头中没有任何cookie信息,则返回一个空字典。 ### 回答2: request.getcookies是Django的request对象中的方法之一,它用于获取HTTP请求中的cookie信息。cookie是HTTP中的一种机制,可以在客户端存储数据,然后在每个请求中发送到服务器。通过使用request.getcookies,可以在Django应用程序中访问这些cookie值。 在Django中,所有的cookie都存储在request.COOKIES中,可以使用request.getcookies()方法获得所有的cookie值,也可以使用request.COOKIES[key]获得指定的cookie值。getcookies()方法将返回一个字典,其中key是cookie名称,value是cookie的值。 例如,如果客户端在请求中发送了一个名为“username”的cookie,其中包含用户的用户名,那么使用request.getcookies()方法可以获取这个cookie的值。代码示例如下: def my_view(request): if 'username' in request.COOKIES: username = request.COOKIES['username'] return HttpResponse("Welcome back, %s!" % username) else: response = HttpResponse("Please log in") response.set_cookie('username', 'john') return response 在上述代码示例中,如果存在名为“username”的cookie,则从该cookie中获取用户名。否则,将返回一个响应,该响应包括一个设置cookie的语句,该cookie将保存一个名为“username”的键值对,值为“john”。 在使用request.getcookies()方法时需要注意,cookie存储在客户端,因此可能会被用户修改或删除。因此,在使用cookie时,需要谨慎处理,以确保应用程序的安全性和正确性。 综上所述,request.getcookies方法是Django中用于获取HTTP请求中的cookie信息的方法之一。通过使用getcookies()方法,可以轻松获取所有的cookie值,并在Django应用程序中对其进行操作。 ### 回答3: request.getcookies方法是Django框架中request对象的方法之一,用于获取HTTP请求携带的Cookie数据。Cookie是Web服务器存储在用户本地计算机上的小数据文件,包含需要跨请求保存的会话信息,如登录凭证、浏览记录等。通过request.getcookies方法,可以从request对象中获取到所需的Cookie信息。 该方法返回一个字典对象,其中的键值对代表了请求所携带的所有Cookie数据。字典中的键是Cookie名称,值则是Cookie的值。例如,如果请求携带了名为“username”的Cookie,值为“Tom”的话,通过request.getcookies方法得到的字典中会有一个键值对“username:Tom”。 需要注意的是,如果请求未携带任何Cookie数据,request.getcookies方法返回一个空字典。 另外,需要注意的是,当服务器向客户端发送Cookie数据时,需要在响应头部添加Set-Cookie字段。例如: ```python response = HttpResponse("Hello World!") response.set_cookie("username", "Tom") return response ``` 上面代码中,我们通过HttpResponse的子类来构造服务器响应,然后使用set_cookie方法设置了一个名为“username”的Cookie,值为“Tom”。客户端收到响应后,会在本地保存这个Cookie数据。下次客户端向该服务器发起请求时,会自动将该Cookie发送到服务器,服务器可以通过request.getcookies方法获取到该数据。 总之,request.getcookies方法是Django框架中非常在常用的方法之一,可以方便地获取HTTP请求携带的Cookie数据,为Web应用程序提供了很多有用的功能。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值