zoukankan      html  css  js  c++  java
  • urllib python3 请求、登录、下载网页

    urllib.request 发送request和获取request的结果

    urllib.error包含了urllib.request产生的异常

    urllib.parse用来解析和处理Url

    urllib.robotparse用来解析页面的robots.txt文件

     

    urllib.request.urlopen(url,data=None,[timeout,]*,cafile=None,capath=None,cadefault=False,context=None)

    url      可以是一个URL的字符串,也可以是一个Request对象

    data     传给服务器的数据,支持字节类型(Bytes)、文件格式(file-like objects)和可迭代的对象(iterables),如果头文件中Content-Length 和 Transfer-Encoding 都没有提供,HTTPHandler就会根据data的类型来设置这些参数。 对于post类型的request method ,data应该以标准的application/x-www-form-urlencoded格式提供,urllib.parse.urlencode()方法可将 字典类或2元素的队列类 数据  转换成这种格式的Ascii字符码。入参data在使用前需要先编码成字节类型。

    timeout  用于设置连接时长,只对HTTP,HTTPS,FTP类型的连接有效。

    context  必须是一个ssl.SSLContext实例

    cafile   指向的是单个包含CA 证书的文件

    capath   指向的是这个hashed 认证文件的路径

     

    class urllib.request.Request(url,data=None,headers={},origin_req_host=None,unverifiable=False,method=None)

    headers          字典类型数据 也可以通过add_header()方法传入单个的key-value参数。 User-Agent ,通常用于标识请求所使用的浏览器(某些HTTP服务器只允许来自常用浏览器的请求);Content-Type,如果data参数被提供,就需要设置这个参数,如果没设置Content-Type,默认值为application/x-www-form-urlencoded

    origin_req_host和unverifiable仅用来准确的处理第三方Http cookies:

    origin_req_host 用户设置的原始请求的主机名或IP地址,例如果请求的是某html中的一张图片,则原始请求主机名为请求(包含该图片的)html的主机名或地址。

    unverifiable    表明这个请求 是否 无法访问

    method          表示请求方式的字符串,可通过get_method()获取它的值。在data没有提供的情况下,默认是GET,否则默认是POST。

     

    response:

    urlopen()返回的对象urllib.response  can work as a context manager,具有方法:

    read(),readline()  基本的返回页面文本的方法

    geturl() 返回根据根据实际页面定位的url地址,通常用来判断是否有发生重定向。

    info() 返回页面的元信息,headers。

    getcode() 返回这个response的http状态码

     

    openers:获取URL的方法

    通常我们使用默认的opener 的open方法: urllib.request.urlopen ()

    如果需要个性化openers,就需要创建一个OpenerDirector实例。可以把不同的handlers传给OpenerDirector实例。

    Handlers:Openers的处理器

    所有的‘繁重’工作由handlers处理。不同的handlers处理不同事项,如通过特定协议打开URLs,HTTP重定向或获取一个不重定向的opener.

     

    创建urllib.request.OpenerDirector 实例 可通过 urllib.request.build_opener([handler,...])   一步创建

    或 a=OpenerDirector(),a.add_handler(some_handler_instance)   两步来创建,入参handlers必须是BaseHandler或其子类的实例。

    安装opener , install_opener(opener)安装完后,会使这个opener作为全局的opener,urlopen()方法会按照这个自定义的opener来打开url。如果不希望urlopen()也使用这个方法的话,就不需要安装这个opener,直接使用OpenerDirector.open()来打开url,   opener 的open()方法与urlopen()方法具有相同的功能。

     

    class  urllib.request.ProxyHandler(proxies=None)

    使request请求通过这个代理,proxies是字典类型数据 {协议名:这个代理的URL},如果没有指定proxies,就会默认读取环境变量<protocol>_proxy中的proxies.如果没有设置代理的环境变量,windows系统下会从注册表内部的设置部分获取。为防止这种自动定位的proxies,可以传递一个空字典。

    示例:代理方式的验证请求

    proxy_handler = urllib.request.ProxyHandler({'http': 'http://www.example.com:3128/'})

    proxy_auth_handler = urllib.request.ProxyBasicAuthHandler()

    proxy_auth_handler.add_password('realm', 'host', 'username', 'password')

    opener = urllib.request.build_opener(proxy_handler, proxy_auth_handler)

    还是不知道这个代理的url是什么样的,要怎么写,有什么用。也许就是添加代理吧,可是这个代理在哪~

    urllib.request各部分的小介:http://www.cnblogs.com/zknublx/p/6274599.html

    class  urllib.request.ProxyBasicAuthHandler(password_mgr=None)

    通过proxy.password_mgr处理认证的类,入参与urllib.request.HTTPPasswordMgr 相兼容,类似。

    class  urllib.request.HTTPPasswordMgr 

    用于保持(realm,uri)到 (user,password)的映射

    class  urllib.request.HTTPPasswordMgrWithDefaultRealm

    用于保持(realm,uri)到 (user,password)的映射,如果realm是None,并且没有其他合适的范围,就会搜索所有范围。

  • 相关阅读:
    (转)AJAX开发中常用的Firefox Plugins
    几种流行的AJAX框架jQuery,Mootools,Dojo,Ext JS的对比
    Excel Oledb设置
    统计数据库中所有表的基本信息
    sql 分页加排序等写法
    sql 创建索引
    SQL Server复制需要有实际的服务器名称才能连接到服务器 错误解决方案
    转转:解决Error"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系。"
    Reflector7.5.2.1的Bug
    查询数据库所有依赖
  • 原文地址:https://www.cnblogs.com/Ting-light/p/9548136.html
Copyright © 2011-2022 走看看