• urllib学习


    一、简介

    urllib 是一个收集了多个涉及 URL 的模块的包:
      urllib.request 打开和读取 URL
      urllib.error 包含 urllib.request 抛出的异常
      urllib.parse 用于解析 URL
      urllib.robotparser 用于解析 robots.txt 文件

    二、urllib.request 打开和读取 URL

    1、urllib.request 模块定义了以下函数:

    urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
    打开统一资源定位符 url,可以是一个字符串或一个 Request 对象。
      data 必须是一个对象,用于给出要发送到服务器的附加数据,若不需要发送数据则为 None。
      urllib.request 模块采用 HTTP/1.1 协议,并且在其 HTTP 请求中包含 Connection:close 头部信息。
      timeout 为可选参数,用于指定阻塞操作(如连接尝试)的超时时间,单位为秒。如未指定,将使用全局默认超时参数)。本参数实际仅对 HTTP、HTTPS 和 FTP 连接有效。
      如果给定了 context 参数,则必须是一个 ssl.SSLContext 实例,用于描述各种 SSL 参数。
      cafile 和 capath 为可选参数,用于为 HTTPS 请求指定一组受信 CA 证书。cafile 应指向包含CA 证书的单个文件, capath 则应指向哈希证书文件的目录。
    本函数总会返回一个对象,该对象可作为 context manager 使用,带有 url、headers 和 status 属性。

    from urllib.request import urlopen
    myURL = urlopen("https://www.cnblogs.com/windyrainy/p/15068700.html")
    print(myURL.read())            #输出的是字节类型
    
    #除了 read() 函数外,还包含以下两个读取网页内容的函数:
    #readline() - 读取文件的一行内容
    #readlines() - 读取文件的全部内容,它会把读取的内容赋值给一个列表变量。

    2、urllib.request 模块定义了以下类:

    class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
      URL 请求对象的抽象类。 url 应为包含合法 URL 的字符串。
      data 必须是一个对象,用于给定发往服务器的附加数据,若无需此类数据则为 None 。 目前 唯一用到 data 的只有 HTTP 请求。支持的对象类型包括字节串、类文件对象和可遍历的类字节串对象。如果没有提供 Content-Length 和 Transfer-Encoding 头部字段, HTTPHandler 会根据 data 的类型设置这些头部字段。Content-Length 将用于发送字节对象,而 RFC 7230中定义的 Transfer-Encoding: chunked 将用于发送文件和其他可遍历对象。
      对于 HTTP POST 请求方法而言,data 应该是标准 application/x-www-form-urlencoded 格式的缓冲区。 urllib.parse.urlencode() 函数的参数为映射对象或二元组序列,并返回一个该编码格式的 ASCII 字符串。在用作 data 参数之前,应将其编码为字节串。
      headers 应为字典对象,视同于用每个键和值作为参数去调用 add_header() 。通常用于 User-Agent 头部数据的“伪装” ,浏览器用这些头部数据标识自己——某些 HTTP 服务器只允许来自普通浏览器的请求,而不接受来自脚本的请求。
      如果给出了 data 参数,则应当包含合适的 Content-Type 头部信息。若未提供且 data 不是 None,则会把 Content-Type: application/x-www-form-urlencoded 加入作为默认值。
      origin_req_host 应为发起初始会话的请求主机。默认指为``http.cookiejar.request_host(self)`` 。这是用户发起初始请求的主机名或 IP 地址。假设请求是针对 HTML 文档中的图片数据发起的,则本属性应为对包含图像的页面发起请求的主机。
      unverifiable 应该标示出请求是否无法验证。默认值为 False 。所谓无法验证的请求,是指用户没有机会对请求的 URL 做验证。例如,如果请求是针对 HTML 文档中的图像,用户没有机会去许可能自动读取图像,则本参数应为 True。
      method 应为字符串,标示要采用的 HTTP 请求方法(例如 'HEAD' )。如果给出本参数,其值会存储在 method 属性中,并由 get_method() 使用。如果 data 为``None`` 则默认值为 'GET' ,否则为 'POST'。子类可以设置 method 属性来标示不同的默认请求方法。

    req = urllib.request.Request('https://www.cnblogs.com/windyrainy/p/15068700.html')
    opener = urllib.request.urlopen(req)
    print(opener.read())    #输出的是字节类型

    三、urllib.parse 用于解析 URL

    URL解析功能可以将一个URL字符串分割成其组件,或者将URL组件组合成一个URL字符串。
    (1)urllib.parse 模块定义了以下函数:
    urlencode()
    urlparse()

    >>>from urllib.parse import urlparse
    >>>o = urlparse('http://www.cwi.nl:80/%7Eguido/Python.html')
    >>>o 
    ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html',
    params='', query='', fragment='')

    属性

    索引

    值(如果不存在)

    scheme

    0

    URL协议

    scheme 参数

    netloc

    1

    网络位置部分

    空字符串

    path

    2

    分层路径

    空字符串

    params

    3

    最后路径元素的参数

    空字符串

    query

    4

    查询组件

    空字符串

    fragment

    5

    片段识别

    空字符串

    username

     

    用户名

    None

    password

     

    密码

    None

    hostname

     

    主机名(小写)

    None

    port

     

    端口号为整数(如果存在)

    None

  • 相关阅读:
    js项目练习第二课
    js项目练习第一课
    进度条
    js基础
    反射
    递归函数与三级菜单
    mybatis 动态SQL
    java 面对对象(抽象 继承 接口 多态)
    java Eclipse debug技巧
    mybatis 调用存储过程
  • 原文地址:https://www.cnblogs.com/windyrainy/p/15156018.html
Copyright © 2020-2023  润新知