分享

requests第三方库

 易禅浮屠 2022-03-04

简介:

requests是一个优雅而简单的Python 第三方HTTP请求库,专为人类而构建。

requests的官方文档同样也非常的完善详尽,而且少见的有中文官方文档:http://cn./zh_CN/latest/

英文文档:http://docs./en/master/api/

安装:

pip install requests -i https://pypi./simple

一、请求(requests)

每一个请求方法都有一个对应的API。比如GET请求就使用get()方法, 而POST请求就使用post()方法,并且将需要提交的数据传递给data参数即可

请求方法

  • get 获取页面数据
 import requests
 
 url = "https://www.baidu.com"
 headers = {
     "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) \
 Chrome/73.0.3683.86 Safari/537.36",
     "Referer":"https://www.baidu.com"
 }
 resp = requests.get(url, headers=headers)
  • post 提交数据到指定资源
 url = "http:///post"
 form_data = {
  'username':'yelan',
  'password':'xxxxxxx'
 }
 resp = requests.post(url=url, data=form_data)
  • 其他的请求类型
 resp = requests.put(url="http:///put", data=None)    # 修改
 resp = requests.delete("http:///delete") # 删除
 
 resp = requests.head("http:///head") # 请求头部
 resp = requests.options("http:///options") # 查看服务器性能

二、响应(response)

属性/方法说明
text属性 返回时的文本内容(html); 当然对返回的数据使用 resp.content.decode()就相当于resp.text
content属性 返回的二进制的响应数据
json方法 对json数据转dict; 只有返回的数据是json是才可以使用
测试网站: http:///post 返回的都是json数据
resp.encoding = 'utf-8' 指定编码
status_code属性 响应状态码
headers属性 响应头部(字典)
cookies属性 响应的set-cookies
url 属性 访问的url
history属性 返回响应的历史 [使用响应对象的 history 属性来追踪重定向]

三、参数

urllib3.disable_warnings() # 禁用警告

参数说明
url 请求的url
params=None get请求携带的参数, 一般用于查询或者搜索(返回的数据在args键中)。对于一键多值的key,而value用一个列表。 如:params = { 'name': 'yelan', 'hobby': ['django', 'play'] }
data=None post请求提交的数据(如表单)
headers=None 请求头部信息
json=None 发送请求时携带json数据(返回的数据在键data中,当然也在json中)
cookies=None 请求携带的cookies;当然也可以把cookies更新到headers的头部信息;[Dict或CookieJar对象]
allow_redirects=True bool类型 请求是默认开启重定向的, False禁止重定向。[Enable启用/disable禁用]
proxies=None http代理, 是一个字典 [字典映射协议到代理的URL]
verify=None 请求时是否验证verify
stream stream=False 响应内容将立即下载 # stream=True将以流的形式下载
proxies # http代理, 是一个字典 [字典映射协议到代理的URL]
 proxies = {
     "http":"http://221.6.32.206:41816",
     "https":"https://221.6.32.206:41816"
 }
 resp = requests.get('http:///ip', proxies=proxies)
verify # 请求时是否验证SSL证书;默认验证的,关闭verify=False即可
 import urllib3
 
 urllib3.disable_warnings()  # 禁用警告信息
 
 # 如果我们访问的目标网站,证书有问题,或者我们使用了代理服务的证书有问题,
 # 在这种情况下,如果我们还是要对这些目标发送请求,那么我可以关闭requests的证书验证
 resp = requests.get(url="http://www.", headers=headers, verify=False)
stream # stream=False 响应内容将立即下载 # stream=True将以流的形式下载
 resp = requests('http:///bytes/102400', stream=True)
 for chunk in resp.iter_conten(chunk_size=1024):
     print(chunk)
     with ...
     
files (文件上传)
 files = {}
 with open("favuicon.ico", "rb") as f:
     files.update({"file": f.read()})
 resp = requests.post("http:///post", files=files)
 # 当然最好指定上传文件的content-type, 将其更新到headers中携带
allow_redirects=False # 关闭重定向
 resp = requests.get('http://github.com', allow_redirects=False)
 print(r.headers) # 该网址会重定向,关闭重定向后,无响应数据
auth (身份认证)
# 如果访问的网站,需要我们验证用户身份信息(如 用户名 密码)
from request.auth import HTTPBasicAuth

url = 'http://need authentication of url'
resp = requests.get(url, auth=('username', 'password'))

# 其实上面的auth参数是HTTPBasicAuth的实例,它会默认使用HTTPBasicAuth这个类来验证:
requests.get(url, auth=HTTPBasicAuth('username', 'password'))
timeout (设置超时)

API

requests底层api接口 ==> request :
def request(self, method, url,
	params=None, data=None, headers=None, cookies=None, files=None,
	auth=None, timeout=None, allow_redirects=True, proxies=None,
	hooks=None, stream=None, verify=None, cert=None, json=None):
    pass

四、session 会话对象

session能够自动的整合每次请求返回的set-cookie, 并且在后续的请求中自动携带.

就是说你使用session对象来发送请求, 那么返回的set-cookie会自动保存和整合 并自动在后续请求中携带上. 就不用手动给后续请求设置cookies.

  1. 所有会话对象发出去的请求 会自动保持状态

  2. 对同一主机发送多个请求, 重用TCP连接

  3. session 所有的api和requests都是一样的

  4. Session 类中封装了requests所需的所有请求

【常用于模拟登录】

import requests

url = 'http:///get'	# 该测试网址返回的都是json数据

session = requests.Session()
resp = session.get(url, headers=headers)
print(resp.text)
print(resp.json())

# 设置整个headers
session.headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
}
# 如果需要添加或者更新headers
referer = {'Referer': 'http://www.baidu.com'}
session.headers.update(referer)

模拟豆瓣登录
import requests
from Spiders_class.demo_03 import my_info as mb

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36",
    "Referer": "https://accounts.douban.com/passport/login"
}
login_url = 'https://accounts.douban.com/j/mobile/login/basic'	# 登录请求的url
login_data={
    "ck": "",
    "name": mb.user,
    "password": mb.pwd,
    "remember": "false",
    "ticket": "",
}
personal_url = 'https://www.douban.com/people/197134290/'		# 用户个人中心

# session能够自动的整合每次请求返回的set-cookie, 并且在后续的请求中自动携带.

session = requests.Session()
session.headers = headers	# 在会话时就携带头部信息(整个headers)
resp = session.post(login_url, data=login_data)
response = session.get(personal_url)
response = 'utf-8'
print(response.text)

开发流程:

1.找到目标数据(如需要请求的目标url)
2.分析请求流程(从目标页面分析、匹配到所有页面的url)
3.发起http请求(对所有的url发起请求;多线程)
4.提取清洗数据(re、xpath等以及其他模块的方法)
5.数据持久化(构造结构化数据、保存到文件或数据库)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多