zoukankan      html  css  js  c++  java
  • Python之爬取网页时到的问题——urllib2

    本文通过摘取  http://blog.csdn.net/howeblue/article/details/47426265  博客上的内容整理而成,有兴趣的可以去看看原文。

    urllib和urllib2模块都做与请求URL相关的操作,但他们提供不同的功能。本文主要是描述urllib2。

    urllib2是Python的一个获取URL的组件,它常用的方法及类如下:

    1,   urllib2.urlopen (  url  [, data]  [, timeout]  ) 

          它打开URL网址,url参数可以是一个字符串url或者是一个Request对象。可选的参数timeout,阻塞操作以秒为单位,如尝试连接(如果没有指定,将使用设置的全局默认timeout值)。实际上这仅适用于HTTP,HTTPS和FTP连接。

    url = 'http://m.sohu.com/?v=3&_once_=000025_v2tov3&_smuid=ICvXXapq5EfTpQTVq6Tpz'
    req = urllib2.Request(url)
    resp = urllib2.urlopen(req)
    page = resp.read()

          urlopen方法也可通过建立了一个Request对象来明确指明想要获取的url。调用urlopen函数对请求的url返回一个response对象。这个response类似于一个file对象,所以用.read()函数可以操作这个response对象。

    2,   class urllib2.Request( url   [, data]   [, headers]    [, originreqhost]    [, unverifiable] )

          Request类是一个抽象的URL请求。

          URL——是一个字符串,其中包含一个有效的URL。

          data——是一个字符串,指定额外的数据发送到服务器,如果没有data需要发送可以为“None”。目前使用data的HTTP请求是唯一的。当请求含有data参数时,HTTP的请求为POST,而不是GET。

          headers——是字典类型,头字典可以作为参数在request时直接传入,也可以把每个键和值作为参数调用 add_header() 方法来添加。作为辨别浏览器身份的 User-Agent header 是经常被用来恶搞和伪装的,因为一些HTTP服务只允许某些请求来自常见的浏览器而不是脚本,或是针对不同的浏览器返回不同的版本。标准的headers组成是(Content-Length, Content-Type and Host)。

    3,    urllib2.installopener(opener)和urllib2.buildopener([handler, …])

           installopener和buildopener这两个方法通常都是在一起用,也有时候buildopener单独使用来得到OpenerDirector对象。

           installopener实例化会得到OpenerDirector 对象用来赋予全局变量opener。如果想用这个opener来调用urlopen,那么就必须实例化得到OpenerDirector;这样就可以简单的调用OpenerDirector.open()来代替urlopen()。 
           build_opener实例化也会得到OpenerDirector对象,其中参数handlers可以被BaseHandler或他的子类实例化。子类中可以通过以下实例化:ProxyHandler (如果检测代理设置用)扫描代理会用到,很重要, UnknownHandler,HTTPHandler,HTTPDefaultErrorHandler,HTTPRedirectHandler,FTPHandler,FileHandler,HTTPErrorProcessor。

     

    import urllib2
    req = urllib2.Request('http://www.python.org/')
    opener=urllib2.build_opener()
    urllib2.install_opener(opener)
    f = opener.open(req)


    如上使用 urllib2.install_opener()设置 urllib2 的全局 opener。这样后面的使用会很方便,但不能做更细粒度的控制,比如想在程序中使用两个不同的 Proxy 设置等。比较好的做法是不使用 install_opener 去更改全局的设置,而只是直接调用 opener的open 方法代替全局的 urlopen 方法。


    先写到这,前两个方法还能看懂点,最后一个有点蒙,等以后再研究研究。
  • 相关阅读:
    刷题-力扣-剑指 Offer 22. 链表中倒数第k个节点
    刷题-力扣-617. 合并二叉树
    刷题-力扣-1109. 航班预订统计
    刷题-力扣-606. 根据二叉树创建字符串
    刷题-力扣-563. 二叉树的坡度
    扛把子组20191017-8 alpha week 2/2 Scrum立会报告+燃尽图 07
    20191017-7 alpha week 2/2 Scrum立会报告+燃尽图 06
    20191017-6alpha week 2/2 Scrum立会报告+燃尽图 05
    扛把子组20191017-5 alpha week 2/2 Scrum立会报告+燃尽图 04
    记第一次 团建
  • 原文地址:https://www.cnblogs.com/cwmizlp/p/7016639.html
Copyright © 2011-2022 走看看