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
原文地址:https://www.cnblogs.com/luxiaojun/p/6222694.html