zoukankan      html  css  js  c++  java
  • request库

    1 安装

    pip install requests

    2 主要的方法

    requests.request()  支撑所有的基础方法
    requests.get()      
    requests.head()
    requests.post()
    requests.put()
    requests.patch()
    requests.delete()

    3 get方法

    r = requests.get( url )

        r是一个Response对象, 包含爬虫返回的内容

        url的Request

      requests.get(url, params=None, **kwargs)

      基本操作方法

    import requests
    r = requests.get("http://www.baidu.com")
    print(r.status_code)
    

    4 Response对象属性

      status_code

        HTTP请求的返回状态, 200表示成功

      text

        页面内容

      encoding

        根据header猜测的内容编码方式

      apparent_encoding

        从内容中分析出来的编码方式

      content

        HTTP相应的二进制形式

    5 Requests库的异常

      ConnectionError

        网络链接错误, 例如DNS查询失败, 拒绝链接等

      HTTPError

        HTTP错误

      URLRequires

        冲过最大重定向次数

      ConnectTimeout

        链接超时异常, 仅仅是链接的时候的时间超出

      Timeout

        url请求超时, 是这个过程的时间超出

    6 通用代码框架  

      通用代码框架如下

      注意: 该文件不能命名为requests.py

    import requests
    
    
    def getHTMLText(url):
        try:
            r = requests.get(url, timeout=30)
            r.raise_for_status()
            r.encoding = r.apparent_encoding
            return r.text
        except:
            return "产生异常"
    
    
    if __name__ == "__main__":
        url = "http://www.python.org"
        print(getHTMLText(url))
    

    7 HTTP协议

      HTTP超文本传输协议

      URL格式:

        http://host[:port][path]

        host是合法的主机域名或者IP地址

        port是端口, 默认是80

        path是资源路径

      对资源的操作

        GET 获取资源

        HEAD 获得资源的相应消息报告, 也就是资源的头部

        POST 请求资源后附加的新数据

        PUT 存储一个资源, 覆盖原资源(全部更新)

        PATCH 局部更新

        DELETE 删除资源

      

      requests库的方法对应的就是HTTP的操作

    8 requests库方法详解

      requests库的核心方法是 requests.request()方法

      

      其中method就是对应的 GET; HEAD; POST; PUT; PATCH; DELETE; OPTIONS

        其中的OPTIONS是用于与服务器交互获得配置的方法

      关于kwargs

        params = 字典, 字节序列

          该params会拆解成键值对放到url之后当做提交的参数

        data = 字典, 字节序列, 文件对象

          作为requests的内容

        json = json格式数据

          作为requests的内容

        headers = 字典

          HTTP定制头部, 诸如修改user-agent来伪装成某个浏览器

        auth = 元组

          支持HTTP的认证功能

        files = 字典

          传输文件

        timeout = 数字

          超时时间, 秒为单位

        proxies = 字典类型

          设定访问的代理服务器, 增加登录认证

        allow_redirects = True/False

          重定向开关, 默认True

        stream = True/False

           内容立即下载开关, 默认True

        verify = True/False

          认证ssl证书开关, 默认True

        cert 本地ssl证书路径

      其余的方法只是将常用的参数设为默认参数了, 基本使用功能不变

        get(url, params=None, **kwargs):

        head(url, **kwargs):

        post(url, data=None, json=None, **kwargs):

        put(url, data=None, **kwargs):

        patch(url, data=None, **kwargs):

        delete(url, **kwargs):

        options(url, **kwargs):

    9 利用requests库的小程序

      最基本的获取京东某MAC的页面

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    __author__ = 'weihuchao'
    
    import requests
    url = "https://item.jd.com/2060618.html"
    try:
        r = requests.get(url)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        print(r.text[:1000])
    except:
        print("爬取失败")

      设置User-Agent来突破网站的限制

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    __author__ = 'weihuchao'
    
    import requests
    
    url = "https://www.amazon.cn/Kindle%E7%94%B5%E5%AD%90%E4%B9%A6/b/ref=sv_kinc_3?ie=UTF8&node=116169071"
    
    try:
        kv = {'user-agent':'Mozilla/5.0'}
        r = requests.get(url, headers=kv)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        print(r.text[1000:2000])
    except:
        print("爬取失败")

      通过分析网站的链接形式, 得到网站的 网站+参数 的格式

      利用get()方法中的params来设置传入的参数

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    __author__ = 'weihuchao'
    
    import requests
    
    keyword = "Python"
    url = "http://www.baidu.com/s"
    
    try:
        kv = {'wd': keyword}
        r = requests.get(url, params=kv)
        r.raise_for_status()
        print(len(r.text))
    except:
        print("爬取失败")

      利用requests库来下载图片

      要点是找到网络图片的地址

      获得的requests对象的content值就是文件的内容

      通过rb的读写模式可以实现文件的存储

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    __author__ = 'weihuchao'
    
    import requests
    import os
    
    url = "http://edu-image.nosdn.127.net/3321D6673EB82C94D08E1B80E8344166.jpg"
    root = "F://"
    path = root + url.split('/')[-1]
    
    try:
        if not os.path.exists(root):
            os.mkdir(root)
        if not os.path.exists(path):
            r = requests.get(url)
            with open(path, 'wb') as f:
                f.write(r.content)
                f.close()
                print("保存文件成功")
        else:
            print("文件已存在")
    except:
        print("爬取失败")
    

      

    人若有恒 无所不成
  • 相关阅读:
    oracle聚合函数及行专列,pivot rollup cube
    oracle expdp导入时 提示“ORA-39002: 操作无效 ORA-39070: 无法打开日志文件 ”
    PL/SQL 美化器不能解析文本
    PL/SQL TOAD 不安装Oracle客户端连接数据库的方法
    oracle 某一字段取反
    jqgrid 加按钮列
    扩展方法 DataTable的ToList<T>
    jquery ajax调用WCF,采用System.ServiceModel.WebHttpBinding
    jquery ajax调用WCF,采用System.ServiceModel.WSHttpBinding协议
    学习WCF笔记之二
  • 原文地址:https://www.cnblogs.com/weihuchao/p/6676176.html
Copyright © 2011-2022 走看看