zoukankan      html  css  js  c++  java
  • urllib包

    • urllib包提供了一个高级接口,用于编写需要与HTTP服务器、FTP服务器和本地文件交互的客户端。典型的应用程序包括从网页抓取数据、自动化、代理、Web爬虫等。

    1. urllib.request ()

    • 该模块最常见的用途是通过HTTP从Web服务器获取数据。
    • urlopen(url [,data [,timeout]

    打开 URL url并返回类文件对象,可使用该对象读取返回的数据。简言之,url可以是包含URL的字符串,也可以是 Request类实例。data是URL编码的字符串,包含要上传到服务器的表单数据。

    如果提供了data,那么实际使用的就是HTTP"PosT'方法,而不是'GET’(默认值)。通常使用urllib.parse.urlencode()之类的函数创建数据。timeout是可选的超时期(以秒为单位),内部存在阻塞操作时使用。

    u = urllib.request.urlopen()
    
    • urlopen()返回的类文件对象u支持以下方法。

    • 方法 描述
      u.read( [nbytes])
      u.readline()
      u.readlines()
      u.fileno()
      u.close ()
      u.info ()
      u.getcode()
      u.geturl()
    • 需要特别强调的是类文件对象υ以二进制模式操作。如果需要以文本形式处理响应数据,则需要使用 codecs模块或类似方式解码数据。

    • 对于简单的请求来说urlopen()的url参数就是一个字符串,如http://www.pythonorg如果需要执行更加复杂的操作,如修改HTTP请求报头,可创建Request实例并使用其作为url参数。

    • Request(url [,data [,headers [,origin_ reg host [,unverifiable]]]])

    • url指定URL(如http://www.foo.bar/spam.htm1'.)

    • data是URL编码的数据,要通过HTTP请求上传到服务器。提供该参数时,它将HTTP请求类型从'GET'改为'POST'。

    • headers是一个字典,包含了可表示HITP报头内容的键值映射。

    • origin_reg host设为事务的请求主机,通常是发出请求的主机名称。

    • 如果请求的是无法验证的URL,则 unveri fiable设为rue。无法验
      证的URL的非正式定义是:不是用户直接输入的URL,如加载图像的页面中嵌入的URL。unverifiable的默认值是False,

    r= urllib.request.Request()
    
    • Request的实例r具有以下方法

    • 方法 描述
      r.add_ data(data)
      r.add_ header (key, val)
      r.add_unredirected-header(key, val)
      r.get_data()
      r.get_ full_url()
      r.get_host()
      r.get_method ()
      r.get_origin_rea_host()
      r.get_ selector()
      r.get_ type ()
      r.has_data()
      r.is_unverifiable()
      r.has_ header(header)
      r.set_proxy(host, type)

      2. 自定义opener

    • 基本的urlopen()函数不支持验证、cookie或者其他高级HTTP功能。要支持这些功能,必须使用 build_opener(函数创建自己的自定义 opener对象

    • build_opener([handler [, handler2,...]]

    • 构建用于打开URL的自定义opener对象。参数 handler1、 handler2等都是特殊处理程序对象的实例。这些处理程序的目的是向得到的opener对象添加各种功能。

    • build_opener()返回的对象具有open(ur1[,data[, timeout]])方法,其作用是根据各种处理程序提供的规则打开URL。open()的参数与传递ur⊥open()函数的参数相同。

    • insta11。 pener【 opener)

    • 安装不同的opener对象作为ur1open()使用的全局URL opener。opener通常是 build_opener()创建的opener对象。

      3. 密码验证

    • 要处理涉及密码验证的请求,你可以创建一个opener,往其中添加HttpbasIcautHhandLer、HttpdiGest Authhandler、 ProxyBasicAuthHandler或 ProxyDigestAuthHandler的组合。这些处理程序都具有以下方法,可用来设置密码。

    • h.add_ password(realm, uri, user, passwd)

    • 为给定的域和UR添加用户和密码信息。所有参数都是字符串。uxi可以是URI序列,在这种情况下,用户和密码信息适用于序列中的所有URI。 realm是与验证相关联的名称或描述信息。它的值取决于远程服务器。但是,它通常是与相关网页关联的常用名称。uri是与验证相关联的基础URL.realm和uri的常见值类似于('adminIstrator','http://www.somesite.com')user和password分别
      指定用户名和密码。

    • 如果要管理 Http cookie,需要创建添加了 HttpcooKieprocessor处理程序的 opener对象。例如:

    cookiehand = HttpcoOkiepRoceSsor()
    opener build_opener(cookiehand)
    u=opener.open("http://www.example.com/")
    
    • 默认情况下HttpcoOkieprOcesSor使用httpcookiejar模块中的Cookiejar对象。将不同类型的 Cookiejar对象作为 HttpcookieProcessor的参数提供,可以支持不同类型的 cookie处理方法。
      例如:
    cookiehand=httpcookieprocessor(
    httpcookiejar.Mozillacookiejar("cookies.txt")
    opener build_opener(cookiehand)
    u=opener.open("http://www.examplecom/)
    

    5. 代理

    • 如果需要通过代理重定向请求,可创建 ProxyHandler实例。
      Proxy Handler(proxies])创建通过代理路由请求的代理处理程序。参数proxies是一个字典,将协议名称(如'http,'ftp等)映射到相应代理服务器的URL。

    • 下例演示了如何使用该方法:

    proxy=proxyhandler(('http':'htTp://someproxy.com8080/')
    auth=httpbasicauthhandler()
    auth.add_password("realm","host","username","password")
    opener = build _opener(proxy.auth)
    u=openeropen("http://www.examplecom/doc.html")
    

    urllib. response

    这是一个内部模块,实现了ur11ib. request模块中函数返回的类文件对象。没有公共API。

    urllib.parse

    • ur11ib.parse模块用于操作URL字符串,如"http:/www.python.org"。

    • 1.URL解析

    • URL的一般形式为" scheme://netloc/path; parameters? query# fragment"。另外,URL的netloc部分可能包含一个端口号,如" hostname:port",也可能包含用户验证信息,如"user:pass@hostname"。

    • 以下函数用于解析URL:

    • urlparse(urlstring [ default_ scheme [ allow fragments]])

    • 在urlstring中解析URL并返回ParseResult实例。如果URL中没有任何内容,则default_scheme指定要使用的方案("http","ftp"等)。如果allow_fragments为0,则不支持片段标识符。

    • ParseResult实例r是一个指定的元组,形式为( scheme, net loc,path, parameters, query,fragment)。

    • 该实例还定义了以下只读属性。

    • 属性 描述
      r.scheme
      r.netloc
      r.path
      r.params
      r.query
      r.fragment
      r.username
      r.password
      r.hostname
      r.port
    • 使用r.geturl()可将 ParseResult实例转换回URL字符串.

    - urlunparse(parts)

    • 将 urlparse()返回的元组表示形式的URL转换为URL字符串。parts必须是元组或者具有6个组件的可迭代内容。

    • urlsplit(url [ default_ scheme [ allow fragments]])

    • 该方法与 unlparse(类似,不同之处在于URL的 parameters部分在路径中保持不变。该方法可以解析参数附加在单个路径组件上的URL,如' scheme:/ net loc/ path1; paramlpath2; paran2/
      path3? query# fragment'。返回的结果是 SplitResult的实例,是包含( scheme,net1oc,path,query, fragment)的指定元组。

    • 还定义了以下只读属性。

    | 属性 | 描述 |
    | :--- | :--- |
    | r.scheme | |
    | r.netloc | |
    | r.path | |
    | r.query | |
    | r.fragment | |
    | r.username | |
    | r.password | |
    | r.hostname | |
    | r.port | |

    • 使用 r.geturl()可将 SplitResult实例转换回URL字符串。

    • urldefrag(url)

    • 返回元组( newurl, fragment),其中newurl是去除了片段的url部分, fragment是包含片段部分的字符串(如果有)。如果url中没有任何片段,则newurl与url相同, fragment为空字符串。

    • urljoin(base, url [ allow_fragments])

    • 通过组合基础 URL base和相对URL构造绝对URL。url.a11ow_fragments的含义与 unlparse()中的含义相同。如果基础URL的最后一个组件不是目录,则去除最后的组件。

    • parse_gs(gs [, keep_blank_values [ strict_parsing]l)

    • 解析URL编码的(MME类型为 application/x-www-form- urlencode)查询字符串qs,并返回字典,其中键是查询变量名称,值是为每个名称定义的值列表。keep_blank_values是一个布尔值标志,控制如何处理空白值。如果为True,则它们包含在字典中,值设置为空字符串;如果为False(默认值),则将其丢弃。 strict_ parsing是一个布尔值标志,如果为πrue,则将解析错误转换为Valueerror异常。默认情况下会忽略错误。

    • parse_qsl(gs [ ,keep_blank_vaLues[ ,strict parsing]])

    • 该方法与 parse_qs()类似,不同之处在于返回的结果是一个(name, value)对列表,其中name是查询变量的名称, value是值。

    2.URL编码

    • 以下函数可对组成URL的数据进行编码和解码。

    • quote(string [ safe [ encoding [ errors]]])

    • 使用适合URL内容的转义序列替换 string中的特殊字符。字母、数字和下划线()、逗号(,)句号(.)、连字符(-)都保持不变。所有其他字符都转换为'%xx'形式的转义序列。safe提供由其他不应该带有引号的字符组成的字符串,默认为'/'。 encoding指定对非ASCI字符使用的编码。默认情况下是utf-8。 errors指定遇到编码错误时的操作,默认值是'strict'。

    • quote_plus(string [ safe [ encoding [ errors]]])

    • 调用quote()并使用加号替换所有空格。string,safe, quote()中的含义相同 encoding和 errors。

    • quote_from_bytes(bytes [ safe])

    • 该方法与 quote类似,但是接受字节字符串且不执行编码。返回的值为文本字符串。

    • unquote(string [ encoding [ errors]])

    • 使用转义序列对应的单字符替换'xx'形式的转义序列。 encoding和 errors指定'xx'转义中编码数据的编码和错误处理。默认编码是'utf-8',默认的 errors策略是'replace'。

    • unquote_ plus(string [ encoding [ errors]])

    • 该方法与 unquote()类似,但使用加号替换空格。

    • unquote_to__bytes(string)

    • 该方法与 unquote(类似,但是不执行任何编码并返回字节字符串。

    • urlencode(query [,dosed])

    • 将query中的查询值转换为一个URL编码的字符串,该字符串可以作为URL的 query.参数包括在内,或者可以作为POST请求的一部分上传。 query是字典,或者是一个(key, value)对序列。得到的字符串是以"&字符分隔的'key=va1ue'对序列,其中key和 value都使用 quote_plus()引用。
      dosed参数是一个布尔值标志,如果 query中的vaue是序列,则应该设置为rue,表示同一个键有多个值。在这种情况下,将为value中的每个v创建一个单独的"key=v字符串。

    1. 设置headers
    2. 代理的设置
    3. Timeout的设置
    4. cookies的使用
    秋来凉风起,无限思远人
  • 相关阅读:
    _ 下划线 Underscores __init__
    Page not found (404) 不被Django的exception中间件捕捉 中间件
    从装修儿童房时的门锁说起
    欧拉定理 费马小定理的推广
    线性运算 非线性运算
    Optimistic concurrency control 死锁 悲观锁 乐观锁 自旋锁
    Avoiding Full Table Scans
    批量的单向的ssh 认证
    批量的单向的ssh 认证
    Corrupted MAC on input at /usr/local/perl/lib/site_perl/5.22.1/x86_64-linux/Net/SSH/Perl/Packet.pm l
  • 原文地址:https://www.cnblogs.com/lalavender/p/10425044.html
Copyright © 2011-2022 走看看