码迷,mamicode.com
首页 > Web开发 > 详细

urllib包

时间:2019-04-21 12:55:47      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:cookie   sso   form   查询   编码   keep   输入   读取   parse   

  • 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的使用

urllib包

标签:cookie   sso   form   查询   编码   keep   输入   读取   parse   

原文地址:https://www.cnblogs.com/lalavender/p/10425044.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!