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

urlparse的更多相关文章

  1. 使用Python中的urlparse、urllib抓取和解析网页(一)(转)

    对搜索引擎.文件索引.文档转换.数据检索.站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理.事实上,通过Python 语言提供的各种模块,我们无需借助Web服务器或者Web浏览 ...

  2. Bugscan学习笔记------关于urlparse

    urlparse模块主要是把url拆分为6部分,并返回元组.并且可以把拆分后的部分再组成一个url.主要有函数有urljoin.urlsplit.urlunsplit.urlparse等. ***** ...

  3. 飘逸的python - 用urlparse从url中抽离出想要的信息

    最近有个需求,要检测配置中的那些url的域名是否都正常,即是否都能ping通. 不过配置中url格式是这样的 http://www.something.com:1234/ . 要ping的是www.s ...

  4. Python之美[从菜鸟到高手]--urlparse源码分析

    urlparse是用来解析url格式的,url格式如下:protocol :// hostname[:port] / path / [;parameters][?query]#fragment,其中; ...

  5. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

  6. python的urlparse

    urlparse主要是URL的分解和拼接,分析出URL中的各项参数,可以被其他的URL使用. 主要的函数有: 1.urlparse 将URL分解为6个片段,返回一个元组,包括协议.基地址.相对地址等等 ...

  7. python urllib、urlparse、urllib2、cookielib

    1.urllib模块 1.urllib.urlopen(url[,data[,proxies]]) 打开一个url的方法,返回一个文件对象,然后可以进行类似文件对象的操作.本例试着打开google i ...

  8. python 中 urlparse 模块介绍

    urlparse模块主要是用于解析url中的参数  对url按照一定格式进行 拆分或拼接 1.urlparse.urlparse 将url分为6个部分,返回一个包含6个字符串项目的元组:协议.位置.路 ...

  9. Urlparse模块

    urlparse模块主要是把url拆分为6部分,并返回元组.并且可以把拆分后的部分再组成一个url.主要有函数有urljoin.urlsplit.urlunsplit.urlparse等. urlpa ...

随机推荐

  1. cat /proc/devices 和ls /dev

    对于新手来讲,linux的框架实在是太庞大,况且很多知识点需自己做才能理解 设备 文件 ,设备编号  #ll  -a /dev  在每一行都可以看到设备文件.设备编号(主.次) 对于每种硬件设备,系统 ...

  2. cx_oracle 执行cur.execute(sql)提交数据出现 UnicodeEncodeError: 'ascii' codec can't encode character u'\u2122' in position 170

    还是中文字符的问题, 解决方法见链接:http://www.oracle.com/technetwork/articles/tuininga-cx-oracle-084866.html import ...

  3. lnmp无法删除目录,目录包含.user.ini

    无法删除".user.ini"文件解决方法,运行后删除即可 chattr -i /home/wwwroot/yoursite/.user.ini 如果是需要修改文件,记得修改完以后 ...

  4. Linear Algebra lecture9 note

    Linear independence Spanning a space Basis and dimension 以上概念都是针对a bunch of vectors, 不是矩阵里的概念   Supp ...

  5. Lua 中string.gsub(sourceString, pattern, replacementString) 返回值有两个

    这阵子在学习lua,今天看到string操作,书中描述string.gsub(sourceString, pattern, replacementString)返回一个字符串,但是我在实际操作中却发现 ...

  6. Base64编码及其作用

    Base64编码的作用:由于某些系统中只能使用ASCII字符.Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法.它使用下面表中所使用的字符与编码. 而且base64特别适合在 ...

  7. openjudge-膨胀的木棍

    http://noi.openjudge.cn/ch0111/09/ 总时间限制: 1000ms  内存限制: 65536kB 描述 当长度为L的一根细木棍的温度升高n度,它会膨胀到新的长度L'=(1 ...

  8. varchar2_to_blob,应用向数据库更新LOB字段时的超时问题

    将字符串转换为BLOB类型数据,写入服务器. 1,首先利用to_clob函数把varchar2字段转成 clob字段. 2  利用c2b上面函数将clob转成blob. 即: c2b(to_clob( ...

  9. SpringMVC 请求路径结尾存在.使用@PathVariable访问路径内容,路径参数获取不准确的问题

    SpringMVC采用Get方式请求资源时,如果请求路径的结尾中带有小数点(.)时,同时使用@PathVariable访问路径内容时,请求路径中最后一个小数点及其后面的内容会被Spring截断丢弃比如 ...

  10. Java基础--serialVersionUID

    Java基础--serialVersionUID serialVersionUID作用: 序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性.有两种生成方式: 一个是默认的1L,比 ...