zoukankan      html  css  js  c++  java
  • urllib2中自定义opener

    正常用Python抓取网页信息,需要用到urllib2,调用urllib2.urlopen(url),可以获得response 反馈信息,再用response.read()即可获得页面的源码。

    最简单的抓包代码:

    import urllib2  
    response = urllib2.urlopen('http://www.baidu.com/')  
    html = response.read()  
    print html
    

    下面来说一说urllib2中的两个重要概念:Openers和Handlers。

    1.Openers:

    当你获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例)。

    正常情况下,我们使用默认opener:通过urlopen。

    但你能够创建个性的openers。

    2.Handles:

    Openers使用处理器handlers,所有的“繁重”工作由handlers处理。

    每个handlers知道如何通过特定协议打开URLs,或者如何处理URL打开时的各个方面。

    在你使用代理上网或其他的情况就需要自己创建一个 opener,可以实例化一个OpenerDirector,

    然后调用.add_handler(some_handler_instance)。

    同样,可以使用build_opener,这是一个更加方便的函数,用来创建opener对象,他只需要一次函数调用。
    build_opener默认添加几个处理器,但提供快捷的方法来添加或更新默认处理器。

    其他的处理器handlers你或许会希望处理代理,验证,和其他常用但有点特殊的情况。

    install_opener 用来创建(全局)默认opener。这个表示调用urlopen将使用你安装的opener。

    Opener对象有一个open方法。

    该方法可以像urlopen函数那样直接用来获取urls:通常不必调用install_opener,除了为了方便。

    import urllib2  
    
    proxy_handler = urllib2.ProxyHandler({'http':'http://10.19.110.32:8080/'})
    
    opener = urllib2.build_opener(proxy_handler)
    
    urllib2.install_opener(opener) 
    
    response = urllib2.urlopen('http://www.baidu.com/')  
    html = response.read()  
    print html
    
    import urllib2  
    
    proxy_handler = urllib2.ProxyHandler({'http':'http://10.19.110.32:8080/'})
    
    opener = urllib2.build_opener(proxy_handler)
    
    response = opener.open('http://www.baidu.com/')  
    html = response.read()  
    print html
    

      

  • 相关阅读:
    事务与数据库连接池DBCP和C3P0与工具类DBUtils
    JavaWeb基础JSP页面EL 和JSTL表达式
    Cookie和Session
    HttpServletRequest 和HttpServletResponse
    Http协议和Servlet
    Xml 和Tomcat
    Struts2第二天:Struts2的数据的封装、结果页面配置
    BootStrap基础知识总结
    Linux和Windows下Mysql数据库安装详解
    CSS 边框
  • 原文地址:https://www.cnblogs.com/longjshz/p/5193305.html
Copyright © 2011-2022 走看看