zoukankan      html  css  js  c++  java
  • 【python】使用Python中的urlparse、urllib抓取和解析网页

    一、解析URL

    函数urlparse(urlstring [, default_scheme [, allow_fragments]])的作用是将URL分解成不同的组成部分,它从urlstring中取得URL,并返回元组 (scheme, netloc, path, parameters, query, fragment)。注意,返回的这个元组非常有用,例如可以用来确定网络协议(HTTP、FTP等等 )、服务器地址、文件路径,等等。

      函数urlunparse(tuple)的作用是将URL的组件装配成一个URL,它接收元组(scheme, netloc, path, parameters, query, fragment)后,会重新组成一个具有正确格式的URL,以便供Python的其他HTML解析模块使用。

      函数urljoin(base, url [, allow_fragments]) 的作用是拼接URL,它以第一个参数作为其基地址,然后与第二个参数中的相对地址相结合组成一个绝对URL地址。函数urljoin在通过为URL基地址 附加新的文件名的方式来处理同一位置处的若干文件的时候格外有用。需要注意的是,如果基地址并非以字符/结尾的话,那么URL基地址最右边部分就会被这个 相对路径所替换。比如,URL的基地址为Http://www.testpage.com/pub,URL的相对地址为test.html,那么两者将合 并成http://www.testpage.com/test.html,而非http://www.testpage.com/pub /test.html。如果希望在该路径中保留末端目录,应确保URL基地址以字符/结尾。

      下面是上面几个函数的详细一点的用法举例:

    # -*- coding: UTF-8 -*-
    __author__ = 'paul'
    import urlparse
    URLscheme = "http"
    URLlocation = "www.python.org"
    URLpath = "lib/module-urlparse.html"
    modList = ("urllib", "urllib2", "httplib", "cgilib")
    print u"用Google搜索python时地址栏中URL的解析结果"
    #parsedTuple = urlparse.urlparse("http://www.google.com/search?hl=en&q=python&btnG=Google+Search")
    parsedTuple = urlparse.urlparse("https://www.google.com.hk/?gws_rd=cr,ssl#newwindow=1&safe=strict&q=python")
    print parsedTuple#将组件反解析成URL
    print "反解析python文档页面的URL"
    unparsedURL = urlparse.urlunparse( 
    (URLscheme, URLlocation, URLpath, '', '', ''))
    print "	" + unparsedURL#将路径和新文件组成一个新的URL
    print "
    利用拼接方式添加更多python文档页面的URL"
    for mod in modList:
        newURL = urlparse.urljoin(unparsedURL, 
        "module-%s.html" % (mod))
        print "	" + newURL#通过为路径添加一个子路径来组成一个新的URL
    
    print "
    通过拼接子路径来生成Python文档页面的URL"
    newURL = urlparse.urljoin(unparsedURL,
    "module-urllib2/request-objects.html")
    print "	" + newURL
    

     

     

    上述代码的执行结果如下所示:

    复制代码
      ('http', 'www.google.com', '/search', '',

      'hl=en&q=python&btnG=Google+Search', '')

      反解析python文档页面的URL

      http://www.python.org/lib/module-urlparse.html

      利用拼接方式添加更多python文档页面的URL

      http://www.python.org/lib/module-urllib.html

      http://www.python.org/lib/module-urllib2.html

      http://www.python.org/lib/module-httplib.html

      http://www.python.org/lib/module-cgilib.html

      通过拼接子路径来生成Python文档页面的URL

      http://www.python.org/lib/module-urllib2/request-objects.html

    若要通过urllib模块中的urlopen(url [,data])函数打开一个HTML文档,必须提供该文档的URL地址,包括文件名。函数urlopen不仅可以打开位于远程web服务器上的文件,而 且可以打开一个本地文件,并返回一个类似文件的对象,我们可以通过该对象从HTML文档中读出数据。

      一旦打开了HTML文档,我们就可以像使用常规文件一样使用read([nbytes])、readline()和readlines()函数来对文件进行读操作。若要读取整个HTML文档的内容的话,您可以使用read()函数,该函数将文件内容作为字符串返回。

      打开一个地址之后,您可以使用geturl()函数取得被获取网页的真正的URL。这是很有用的,因为urlopen(或使用的opener对象)也许会伴随一个重定向。获取的网页URL也许和要求的网页URL不一样。

      另一个常用的函数是位于从urlopen返回的类文件对象中的info()函数,这个函数可以返回URL位置有关的元数据,比如内容长度、内容类型,等等。下面通过一个较为详细的例子来对这些函数进行说明。

    # -*- coding: UTF-8 -*-
    __author__ = 'paul'
    import urllib
    webURL = "http://www.163.com"
    localURL = r"594915.html"
    print localURL
    #通过URL打开远程页面
    u = urllib.urlopen(webURL)
    buffer = u.read()
    print u.info()
    print "从%s读取了%d 字节数据.
    " % (u.geturl(),len(buffer) )
    #通过URL打开本地页面
    u = urllib.urlopen(localURL)
    buffer = u.read()
    print u.info()
    print "从%s读取了%d 字节数据.
    " % (u.geturl(),len(buffer) )
    

     

  • 相关阅读:
    【反射】Java反射机制
    Composer教程之常用命令
    Composer教程之基础用法
    Composer教程之初识Composer
    Composer 的结构详解
    现代 PHP 新特性系列(七) —— 内置的 HTTP 服务器
    现代 PHP 新特性系列(一) —— 命名空间
    现代 PHP 新特性系列(二) —— 善用接口
    现代 PHP 新特性系列(三) —— Trait 概览
    现代 PHP 新特性系列(四) —— 生成器的创建和使用
  • 原文地址:https://www.cnblogs.com/paulwinflo/p/5029488.html
Copyright © 2011-2022 走看看