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. RMAN备份与恢复之初入茅庐

    理解数据库备份 所谓备份实际上是把数据库复制到转储设备的过程. 从备份方式来看数据库备份分为物理备份和逻辑备份,物理备份是把构成数据库的所有文件拷贝到指定的位置的过程,而逻辑备份只是利用SQL语言从数 ...

  2. ie浏览器 jsp中链接参数为中文的处理

    在js中,使用 encodeURIComponent(encodeURIComponent("警情抽查"))来处理参数,例如: mini.get("khxmdm" ...

  3. 定义信息源的一些示例(xml文件)

    本文目录 1.订阅博客,简单一例 2.从网页获取信息,简单一例 3.充分使用callback回调代码 4.html_re中包含多个block 5.使用html_json这个worker,解析json数 ...

  4. firefox兼容性问题

    //innertext 火狐不同版本不兼容 document.getElementById("user-content").textContent=content; 博主使用的是最 ...

  5. 记录思想分享知识编辑器 Markdown 编辑阅读器

    web使用:实现网页客户端实时自动解析Markdown为HTML内容小小的展示:Cmd Markdown 编辑阅读器使用必要性:怎样引导新手使用 Markdown? - 写作

  6. mysql.my.cnf

    [client]port = 3306socket = /tmp/mysql.sock [mysqld]port = 3306socket = /tmp/mysql.sock basedir = /u ...

  7. qt的moc,uic,rcc命令的使用

    qt是一个c++的界面库,其特点就是其源码可以跨平台编译,这样在写自己的小工具时可以方便地在windows,mac或linux环境下移植了.在windows下写c++程序当然选vs,在mac下写程序当 ...

  8. 在CentOS 6.x中支持exfat格式的U盘(移动硬盘)

    参考资料:http://linux.cn/article-1503-1.html CentOS系列一直没有默认支持使用exfat格式的大容量U盘(移动硬盘),但可以通过添加fuse-exfat模块来支 ...

  9. [PHP] - Apache + PHP 环境搭建

    Apache和PHP的版本分别为: httpd-2.4.9-win64-VC11.zip php-5.6.9-Win32-VC11-x64.zip 下载地址: php-5.6.9-Win32-VC11 ...

  10. lumen Response

    1.基本响应 所有路由和控制器都会返回某种被发送到用户浏览器的响应,Lumen提供了多种不同的方式来返回响应,最基本的响应就是从路由或控制器返回一个简单的字符串: $app->get('/', ...