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
urlparse的更多相关文章
- 使用Python中的urlparse、urllib抓取和解析网页(一)(转)
对搜索引擎.文件索引.文档转换.数据检索.站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理.事实上,通过Python 语言提供的各种模块,我们无需借助Web服务器或者Web浏览 ...
- Bugscan学习笔记------关于urlparse
urlparse模块主要是把url拆分为6部分,并返回元组.并且可以把拆分后的部分再组成一个url.主要有函数有urljoin.urlsplit.urlunsplit.urlparse等. ***** ...
- 飘逸的python - 用urlparse从url中抽离出想要的信息
最近有个需求,要检测配置中的那些url的域名是否都正常,即是否都能ping通. 不过配置中url格式是这样的 http://www.something.com:1234/ . 要ping的是www.s ...
- Python之美[从菜鸟到高手]--urlparse源码分析
urlparse是用来解析url格式的,url格式如下:protocol :// hostname[:port] / path / [;parameters][?query]#fragment,其中; ...
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
- python的urlparse
urlparse主要是URL的分解和拼接,分析出URL中的各项参数,可以被其他的URL使用. 主要的函数有: 1.urlparse 将URL分解为6个片段,返回一个元组,包括协议.基地址.相对地址等等 ...
- python urllib、urlparse、urllib2、cookielib
1.urllib模块 1.urllib.urlopen(url[,data[,proxies]]) 打开一个url的方法,返回一个文件对象,然后可以进行类似文件对象的操作.本例试着打开google i ...
- python 中 urlparse 模块介绍
urlparse模块主要是用于解析url中的参数 对url按照一定格式进行 拆分或拼接 1.urlparse.urlparse 将url分为6个部分,返回一个包含6个字符串项目的元组:协议.位置.路 ...
- Urlparse模块
urlparse模块主要是把url拆分为6部分,并返回元组.并且可以把拆分后的部分再组成一个url.主要有函数有urljoin.urlsplit.urlunsplit.urlparse等. urlpa ...
随机推荐
- RMAN备份与恢复之初入茅庐
理解数据库备份 所谓备份实际上是把数据库复制到转储设备的过程. 从备份方式来看数据库备份分为物理备份和逻辑备份,物理备份是把构成数据库的所有文件拷贝到指定的位置的过程,而逻辑备份只是利用SQL语言从数 ...
- ie浏览器 jsp中链接参数为中文的处理
在js中,使用 encodeURIComponent(encodeURIComponent("警情抽查"))来处理参数,例如: mini.get("khxmdm" ...
- 定义信息源的一些示例(xml文件)
本文目录 1.订阅博客,简单一例 2.从网页获取信息,简单一例 3.充分使用callback回调代码 4.html_re中包含多个block 5.使用html_json这个worker,解析json数 ...
- firefox兼容性问题
//innertext 火狐不同版本不兼容 document.getElementById("user-content").textContent=content; 博主使用的是最 ...
- 记录思想分享知识编辑器 Markdown 编辑阅读器
web使用:实现网页客户端实时自动解析Markdown为HTML内容小小的展示:Cmd Markdown 编辑阅读器使用必要性:怎样引导新手使用 Markdown? - 写作
- mysql.my.cnf
[client]port = 3306socket = /tmp/mysql.sock [mysqld]port = 3306socket = /tmp/mysql.sock basedir = /u ...
- qt的moc,uic,rcc命令的使用
qt是一个c++的界面库,其特点就是其源码可以跨平台编译,这样在写自己的小工具时可以方便地在windows,mac或linux环境下移植了.在windows下写c++程序当然选vs,在mac下写程序当 ...
- 在CentOS 6.x中支持exfat格式的U盘(移动硬盘)
参考资料:http://linux.cn/article-1503-1.html CentOS系列一直没有默认支持使用exfat格式的大容量U盘(移动硬盘),但可以通过添加fuse-exfat模块来支 ...
- [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 ...
- lumen Response
1.基本响应 所有路由和控制器都会返回某种被发送到用户浏览器的响应,Lumen提供了多种不同的方式来返回响应,最基本的响应就是从路由或控制器返回一个简单的字符串: $app->get('/', ...