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 ...
随机推荐
- cat /proc/devices 和ls /dev
对于新手来讲,linux的框架实在是太庞大,况且很多知识点需自己做才能理解 设备 文件 ,设备编号 #ll -a /dev 在每一行都可以看到设备文件.设备编号(主.次) 对于每种硬件设备,系统 ...
- 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 ...
- lnmp无法删除目录,目录包含.user.ini
无法删除".user.ini"文件解决方法,运行后删除即可 chattr -i /home/wwwroot/yoursite/.user.ini 如果是需要修改文件,记得修改完以后 ...
- Linear Algebra lecture9 note
Linear independence Spanning a space Basis and dimension 以上概念都是针对a bunch of vectors, 不是矩阵里的概念 Supp ...
- Lua 中string.gsub(sourceString, pattern, replacementString) 返回值有两个
这阵子在学习lua,今天看到string操作,书中描述string.gsub(sourceString, pattern, replacementString)返回一个字符串,但是我在实际操作中却发现 ...
- Base64编码及其作用
Base64编码的作用:由于某些系统中只能使用ASCII字符.Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法.它使用下面表中所使用的字符与编码. 而且base64特别适合在 ...
- openjudge-膨胀的木棍
http://noi.openjudge.cn/ch0111/09/ 总时间限制: 1000ms 内存限制: 65536kB 描述 当长度为L的一根细木棍的温度升高n度,它会膨胀到新的长度L'=(1 ...
- varchar2_to_blob,应用向数据库更新LOB字段时的超时问题
将字符串转换为BLOB类型数据,写入服务器. 1,首先利用to_clob函数把varchar2字段转成 clob字段. 2 利用c2b上面函数将clob转成blob. 即: c2b(to_clob( ...
- SpringMVC 请求路径结尾存在.使用@PathVariable访问路径内容,路径参数获取不准确的问题
SpringMVC采用Get方式请求资源时,如果请求路径的结尾中带有小数点(.)时,同时使用@PathVariable访问路径内容时,请求路径中最后一个小数点及其后面的内容会被Spring截断丢弃比如 ...
- Java基础--serialVersionUID
Java基础--serialVersionUID serialVersionUID作用: 序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性.有两种生成方式: 一个是默认的1L,比 ...