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的使用
    秋来凉风起,无限思远人
  • 相关阅读:
    bootstrap-select用法详解
    启动react项目报如下错误
    什么?女朋友生气哄不好?那是你没有这款神器!
    Python竟然能做这种进度条,看完别说WC!
    看完学习Python的萌新都在问的六个问题,你就可以毕业了!
    批量加水印防抄袭,Python轻松搞定!
    hdu_1272_小希的迷宫_201403091527
    hdu_1856_More is better_201403091720
    hdu_1213_How Many Tables_201403091126
    hdu_1232_畅通工程_201403091018
  • 原文地址:https://www.cnblogs.com/lalavender/p/10425044.html
Copyright © 2011-2022 走看看