requests模块的使用
写在前面的话:
在学习爬虫入门时,会常用到requests模块,熟悉这个模块的使用需要熟悉http,https ,及浏览器的请求原理。初次接触爬虫时了解下,掌握浏览器的请求过程和爬虫的本质,学起来就轻松多啦。
什么时候用get / post ?
# get response = requests.get(url, headers=headers) # get 带参数 requests.get(url, params=kw , headers=headers) # post response = requests.post(url, data=data, headers=headers)
一、requests模块发送简单的请求、获取响应
-
response.text —-获取响应体的二进制内容编码后的内容 即str
-
respones.content —-获取响应体的二进制内容,即bytes (二进制字节字符串)
-
response.status_code
-
response.request.headers —-根据响应获取请求的headers
-
response.headers —-响应的headers
-
response.url ——响应的url
-
response.request.url ——根据响应获取请求的url
注意:response.text 和response.content的区别
-
response.text
-
类型:str
-
解码类型: 根据HTTP 头部对响应的编码作出有根据的推测,推测的文本编码;可能出现乱码情况
-
如何修改编码方式:指定 response.encoding=”utf-8”
-
或
-
指定 response.encoding=’gbk’ (ubuntu环境下的linux系统)
-
response.content
-
类型:bytes (二进制字节字符串)
-
解码类型: 没有指定
-
如何修改编码方式:response.content.deocde(“utf8”) 默认utf-8
为什么请求时要带上header?
用法
参数的形式:字典
用法
二 、requests模块处理(携带)cookie请求的3种方式
第1种:使用session类
-
requests 提供了一个叫做session类,来实现客户端和服务端的会话保持
-
会话保持有两个内涵:
- 保存cookie 在session中
- 实现和服务端的长连接
-
使用方法:
# 创建 session实例 # get请求 session = requests.session() response = session.get(url,headers) # post请求 session = requests.session() response = session.post(post_url, data=post_data , headers=headers)
第2种:把cookie放在headers中
第3种 :使用cookies参数有2种方式
- cookies的形式:字典
cookies = {"cookie的name":"cookie的value"}
- 使用方法:
- 把cookie字典交给cookies 来处理
requests.get(url,headers=headers,cookies=cookie_dict}
>>> {i:i+10 for i in range(10)} {0: 10, 1: 11, 2: 12, 3: 13, 4: 14, 5: 15, 6: 16, 7: 17, 8: 18, 9: 19} >>> {i:i+10 for i in range(10) if i%2 == 0} {0: 10, 2: 12, 4: 14, 6: 16, 8: 18}
# 准备cookie形式的字典 # cookie_dict = { i for i in cookie.spilt("; " )} cookie_dict = {i.split("=")[0]: i.split("=")[1] for i in cookie.split("; ")} response = requests.get(url, headers=headers, cookies=cookie_dict)
# coding="utf-8" import requests url = "http://www.baidu.com" response = requests.get(url) print(type(response.cookies)) ---输出结果如下: ---<class 'requests.cookies.RequestsCookieJar'> # 把cookiejar对象转化为字典 cookies = requests.utils.dict_from_cookiejar(response.cookies) print(cookies) ---输出结果如下: ---{'BDORZ': '27315'}
超时参数的使用
第1种方式:timeout
response = requests.get(url,timeout=3)
from retrying import retry @retry(stop_max_attempt_number=3) # 最大尝试连接次数 def _parse_url(url): """加上一个下划线表示该方法仅能在当前模块内使用""" # print("-----------") response = requests.get(url, headers=headers, timeout=3) assert response.status_code == 200 return response