zoukankan      html  css  js  c++  java
  • urlparse

    urlparse模块

    urlparse主要是URL的分解和拼接,分析出URL中的各项参数,可以被其他的URL使用,而且只在python2.7中存在,python3中是在urllib包下的urllib.parse模块,主要是解析网址用的。

    在许多地方,我们可以看到都需要对URL进行不同的处理,不是为了获取二级域名,就是为URL添加参数,我在工作中也遇到了,是这样的,最近在做一个检测钓鱼钓鱼网站的项目,代码已经完成,有一天项目经理突然给了我一个500m的文件,说里面是一些爬取过来的钓鱼网站,一共有100多w条,让我利用写好的程序来检测一下,当时也没怎么想,检测就检测呗,我就写了一个小程序挂到后台了,就这样一周,二周过去了程序还没跑完,而且检测到的一些原始URL没有做处理,不美观看起来好长好长,没办法,只能是改进一下程序,争取让程序不要跨年,元旦前搞定就好。为此,做了俩件事情,正好也可以把urlparse这个模块学习一些:

    1、去重

    发现检测结果里面有好多重复的URL,这样检测浪费时间是肯定的了,所以需要先把URL进行过滤,去除多余的,避免无用功的发生。

    def compress():
        url_set = set()
        with open('gz_18_url.txt', 'r+') as f:
            for line in f:
                url = line.strip()
                if url:
                    url_set.add(url)
        return url_set
    

    2、清洗URL

    可以发现,这样检测出来的URL确实不怎么美观,而且结果也不太符合我们的要求,所以需要进一步进行清洗

    import urlparse
    
    def delPath(url):
        if ',' in url:
            url = url.split(',')[0]
        url = url.strip()
        if url.startswith('http://') or url.startswith('https://'):
            pass
        else:
            url = 'http://' + url
        try:
            parse = urlparse.urlparse(url)
            url_new = parse.scheme + '://' + parse.netloc
        except:
            url_new = url
        if url_new.endswith('.'):
            url_new = url_new.rstrip('.')
        return url_new
    

    上面的就是项目中遇到的关于用到urlparse模块得一些问题,下面我们就具体的来学习一下这个模块得基本用法:

    主要的函数有:

    1、urlparse

    将URL分解为6个片段,返回一个元组,包括协议、基地址、相对地址等等

    import urlparse  
    url = urlparse.urlparse('http://blog.csdn.net/?ref=toolbar')  
    print url  
    
    ParseResult(scheme='http', netloc='blog.csdn.net', path='/', params='', query='ref=toolbar', fragment='')
    

    scheme是协议,netloc是服务器地址,path是相对路径,params是参数,query是查询的条件

    2、urlsplit

    和urlparse的作用差不多,将URL分解为5个片段,返回一个元组。返回一个包含5个字符串项目的元组:协议、位置、路径、查询、片段

    import urlparse
    url = urlparse.urlsplit('http://blog.csdn.net/?ref=toolbar')
    print url
    SplitResult(scheme='http', netloc='blog.csdn.net', path='/', query='ref=toolbar', fragment='')

    3、urljoin

     urljoin主要是拼接URL,它以base作为其基地址,然后与url中的相对地址相结合组成一个绝对URL地址,需要注意的是,如果基地址并非以字符/结尾的话,那么URL基地址最右边部分就会被这个相对路径所替换。如果希望在该路径中保留末端目录,应确保URL基地址以字符/结尾。

    import urlparse
    url = urlparse.urljoin('http://www.oschina.com/tieba', 'index.php')
    print url
    http://www.oschina.com/index.php
    import urlparse
    url =  urlparse.urljoin('http://www.oschina.com/tieba/','index.php')
    print url
    
    http://www.oschina.com/tieba/index.php
    

    4、urlparse.urlunparse(parts)

    从一个元组构建一个url,元组类似urlparse返回的,它接收元组(scheme, netloc, path, parameters, query, fragment)后,会重新组成一个具有正确格式的URL,以便供Python的其他HTML解析模块使用

    import urlparse
    url = urlparse.urlparse('http://blog.csdn.net/?ref=toolbar')
    u = urlparse.urlunparse(url)
    print u
    
    http://blog.csdn.net/?ref=toolbar
  • 相关阅读:
    Linux grep命令使用方法
    Linux crontab使用方法
    Linux find命令使用方法
    软件测试全流程
    Linux查看CPU、内存、IO占用高的进程
    使用py2exe转换python文件为可执行程序
    Shell脚本调试方法
    Shell编程常用函数
    Win10常用快捷键使用指南
    mac上一键配置和安装adb驱动或者环境
  • 原文地址:https://www.cnblogs.com/luxiaojun/p/6222694.html
Copyright © 2011-2022 走看看