zoukankan      html  css  js  c++  java
  • requests模块

    requests使用入门

    问题:为什么要学习requests,而不是urllib?

    1. requests的底层实现就是urllib
    2. requests在python2和python3中通用,方法完全一样
    3. requests简单易用
    4. requests能够自动帮助我们解压(gzip压缩的等)网页内容

    requests的作用

    作用:发送网络请求,返回响应数据
    中文文档 API:http://docs.python-requests.org/zh_CN/latest/index.html

    发送简单的请求

    需求:通过requests向百度首页发送请求,获取百度首页的数据
    response = request.get(url)

    response的常用方法:

    • response.text
    • response.content
    • response.status_code
    • response.request.headers
    • response.headers

    response.text和response.content的区别

    • response.text
      • 类型:str
      • 解码类型:根据HTTP头部对响应的编码做出有根据的推测,推测文本编码
      • 如何修改编码方式:response.encoding="gbk"
    • response.content
      • 类型:bytes
      • 解码类型:没有指定
      • 如果修改编码方式:response.content.decode("utf-8")

    发送带header的请求

    模拟浏览器,欺骗服务器,获取和浏览器一致的内容

    • header的形式:字典
    • headers={"User-Agent":Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Mobile Safari/537.36}
    • 用法:requests.get(url, headers=headers)

    发送带参数的请求

    什么叫做请求参数
    例1:http://www.webkaka.com/tutorial/server/2015/021013/
    例2:https://www.baidu.com/s?wd=python&c=b

    • 参数的形式:字典
    • kw = {'wd': '长城'}
    • 用法:requests.get(url, params=kw)

    发送POST请求

    用法:
    reponse = requests.post("http://www.baidu.com/", data=data, headers=headers)

    data 的形式:字典

    使用代理

    1. 用法:requests.get("http://www.baidu.com", proxies=proxies)
      proxies的形式:字典
    proxies = {
        "http": "http://12.34.56.79:9527",
        "https": "https://12.34.56.79:9527"
    }
    
    1. retrying模块的使用
    • 使用retrying模块提供的retry模块
    • 通过装饰器的方式使用,让被装饰的函数反复执行
    • retry中可以传入参数stop_max_attempt_number,让函数报错后继续重新执行,达到最大执行次数的上限,如果每次都报错,整个函数报错,如果中间有一个成功,程序继续往后执行
      示例代码:
    import requests
    from retrying import retry
    
    headers = {}
    
    @retry(stop_max_attempt_number=3)  #最大重试3次,3次全部报错,才会报错
    def _parse_url(url):
        response = requests.get(url, headers=headers, timeout=3)  # 超时的时候会报错并重试
        assert response.status_code == 200 # 状态码不是200,也会报错并重试
        return response
    

    cookie和session的区别

    • cookie数据存放在客户的浏览器上,session数据存放在服务器上。
    • cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗
    • session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。
    • 单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie。

    爬虫处理cookie和session

    带上cookie、session的好处:
    能够请求登录之后的页面
    带上cookie、session的弊端:
    一套cookie和session往往和一个用户对应请求太快,请求次数太多,容易被服务器识别为爬虫

    不需要cookie的时候尽量不去使用cookie

    但是为了获取登录之后的页面,我们必须发送带有cookies的请求

    处理cookies、session请求

    requests提供了一个叫做session类,来实现客户端和服务端的会话保持
    使用方法:

    1. 实例化一个session对象
    2. 让session发送get或者post请求
      session = requests.session()
      response = session.get(url, headers)
  • 相关阅读:
    nginx 403 forbidden 二种原因
    【Spring-AOP-学习笔记-3】@Before前向增强处理简单示例
    【Oracle学习笔记-5--】集合操作之union,intersect和minus操作
    【Oracle学习笔记-2】Oracle基础术语解析
    【数据库设计-1.2】主键的设计
    【数据库设计-1.1】关系的实现
    【Servlet和JSP-学习-1】基础知识
    【Spring学习笔记-MVC-17】Spring MVC之拦截器
    【Spring学习笔记-MVC-1.0】Spring MVC架构介绍
    【Spring学习笔记-MVC-16】Spring MVC之重定向-解决中文乱码
  • 原文地址:https://www.cnblogs.com/colden/p/9859101.html
Copyright © 2011-2022 走看看