美文网首页
Urllib:自定义opener、代理、设置cookie

Urllib:自定义opener、代理、设置cookie

作者: 沉吟不语 | 来源:发表于2018-11-20 18:55 被阅读106次

    Handler处理器 和 自定义Opener

    opener是 urllib.request.OpenerDirector 的实例,我们之前一直都在使用的urlopen,它是一个特殊的opener(也就是模块帮我们构建好的)。
    但是基本的urlopen()方法不支持代理、cookie等其他的HTTP/HTTPS高级功能。所以要支持这些功能:
    1. 使用相关的 Handler处理器 来创建特定功能的处理器对象;
    2. 然后通过 urllib.request.build_opener()方法使用这些处理器对象,创建自定义opener对象;
    3. 使用自定义的opener对象,调用open()方法发送请求。
    如果程序里所有的请求都使用自定义的opener,可以使用urllib.request.install_opener() 将自定义的 opener 对象 定义为 全局opener,表示如果之后凡是调用urlopen,都将使用这个opener(根据自己的需求来选择)

    小案例:

    import urllib.request
    
        # 构建一个HTTPHandler 处理器对象,支持处理HTTP请求
        http_handler = urllib.request.HTTPHandler()
    
        # 构建一个HTTPHandler 处理器对象,支持处理HTTPS请求
        # http_handler = urllib.request.HTTPSHandler()
    
        # 调用urllib.request.build_opener()方法,创建支持处理HTTP请求的opener对象
        opener = urllib.request.build_opener(http_handler)
    
        # 构建 Request请求
        request = urllib.request.Request("http://www.baidu.com/")
    
        # 调用自定义opener对象的open()方法,发送request请求
        response = opener.open(request)
    
        # 获取服务器响应内容
        print (response.read().decode())
    

    代理的基本原理:

    基本原理: 代理实际上指的就是代理服务器,英文叫作proxy server,它的功能是代理网络用户去取得网络信息。形象地说,它是网络信息的中转站。在我们正常请求一个网站时,其实是发送了请求给Web服务器,Web服务器把响应传回给我们。如果设置了代理服务器,实际上就是在本机和服务器之间搭建了一个桥,此时本机不是直接向Web服务器发起请求,而是向代理服务器发出请求,请求会发送给代理服务器,然后由代理服务器再发送给Web服务器,接着由代理服务器再把Web服务器返回的响应转发给本机。这样我们同样可以正常访问网页,但这个过程中Web服务器识别出的真实IP就不再是我们本机的IP了,就成功实现了IP伪装,这就是代理的基本原理

    代理的作用:

    1.突破自身IP访问限制,访问一些平时不能访问的站点。
    2.访问一些单位或团体内部资源:比如使用教育网内地址段免费代理服务器,就可以用于对教育网开放的各类FTP下载上传,以及各类资料查询共享等服务。
    3.提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时,则直接由缓冲区中取出信息,传给用户,以提高访问速度。
    4.隐藏真实IP:上网者也可以通过这种方法隐藏自己的IP,免受攻击。对于爬虫来说,我们用代理就是为了隐藏自身IP,防止自身的IP被封锁。

    小案例:

    #由于urlopen不支持代理,而爬虫往往需要设置代理方对方的服务器
    #所以我们需要自定义opener,让我们发起请求的时候可以携带代理
    from urllib import request
    #第一步创建handler处理器
    proxy_handler = request.ProxyHandler(
       { 'http':'61.135.217.7:80',
        'https':'106.75.164.15:3128',
       }
    )
    # 自定义opener
    opener = request.build_opener(proxy_handler)
    
    #使用opener.open()方法发送请求,就会携带我们设置的代理了
    req = request.Request('https://www.httpbin.org/get')
    
    response = opener.open(req)
    print(response.status)
    print(response.read())
    

    Cookie:

    Cookie 是指某些网站服务器为了辨别用户身份和进行Session跟踪,而储存在用户浏览器上的文本文件,Cookie可以保持登录信息到用户下次与服务器的会话。

    Cookie应用

    Cookies在爬虫方面最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续。

    cookiejar库 和 HTTPCookieProcessor处理器

    在Python处理Cookie,一般是通过cookiejar模块和 urllib模块的HTTPCookieProcessor处理器类一起使用。
    cookiejar模块:主要作用是提供用于存储cookie的对象
    HTTPCookieProcessor处理器:主要作用是处理这些cookie对象,并构建handler对象。
    cookiejar 库
    该模块主要的对象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。其实大多数情况下,我们只用CookieJar(),如果需要和本地文件交互,就用 MozillaCookjar()

    CookieJar:

    管理HTTP cookie值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。整个cookie都存储在内存中,对CookieJar实例进行垃圾回收后cookie也将丢失。
    MozillaCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与Mozilla浏览器 cookies.txt兼容的FileCookieJar实例。

    相关文章

      网友评论

          本文标题:Urllib:自定义opener、代理、设置cookie

          本文链接:https://www.haomeiwen.com/subject/nynxqqtx.html