博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python的url解析库--urlparse
阅读量:5961 次
发布时间:2019-06-19

本文共 2970 字,大约阅读时间需要 9 分钟。

一、urlparse解析url的query并构建字典

下面的方法主要的功能:

解析url的各个部分,并能够获取url的query部分,并把query部分构建成dict。

具体的代码实现:

>>> import urlparse>>> url = "http://www.example.org/default.html?ct=32&op=92&item=98">>> urlparse.urlsplit(url)SplitResult(scheme='http', netloc='www.example.org', path='/default.html', query='ct=32&op=92&item=98', fragment='')>>> urlparse.parse_qs(urlparse.urlsplit(url).query){'item': ['98'], 'op': ['92'], 'ct': ['32']}>>> dict(urlparse.parse_qsl(urlparse.urlsplit(url).query)){'item': '98', 'op': '92', 'ct': '32'}>>>

注意:

  1. 在Python3中, urlparse已经被移动到urllib.parse中。
  2. urlparse中有两个函数:urlparse.parse_qs()urlparse.parse_qsl()。这两个函数都能解析url中的query字段。如果url的query中有同一个key对应多个value,其中urlparse.parse_qs()可以把该相同key的value放在一个list中。
  3. 有时间测试一下,如果url的query中有同一个key对应多个value,那么服务端要怎样接收。
import urlparse    url=urlparse.urlparse('http://www.baidu.com/index.php?username=guol')>>> print url    ParseResult(scheme='http', netloc='www.baidu.com', path='/index.php', params='', query='username=guol', fragment='')>>> print url.netloc    www.baidu.com

二、url解码

有时url会进行编码,例如搜索的中文关键词会进行简单的编码,具体的解码方法:

>>> import urlparse>>> from urlparse import unquote>>> url = "http://www.google.com/support/contact/bin/request.py?entity=%7B%22author%22:%22AIe9_BEW4fia2hKVVTrlUwNzhLS-jMdh3isj0rMd7_Cw85R1-YlRNFkUwoDyhH4aMj7AdHsW5A1po8BinbxspAuLBdB-or_3YzCMNXZKYrb50MIIJCZEpb4%22,%22groups%22:%5B%22general%22,%2254296%7C700726330%22%5D,%22trustedMerchantId%22:%22MID_54316%22%7D&client=242&contact_type=anno&hl=en_US">>> a = urlparse.urlparse(url).query>>> b = unquote(a)>>> b'entity={"author":"AIe9_BEW4fia2hKVVTrlUwNzhLS-jMdh3isj0rMd7_Cw85R1-YlRNFkUwoDyhH4aMj7AdHsW5A1po8BinbxspAuLBdB-or_3YzCMNXZKYrb50MIIJCZEpb4","groups":["general","54296|700726330"],"trustedMerchantId":"MID_54316"}&client=242&contact_type=anno&hl=en_US'>>> import HTMLParser>>> html_parser = HTMLParser.HTMLParser()>>> txt = html_parser.unescape(b)>>> txtu'entity={"author":"AIe9_BEW4fia2hKVVTrlUwNzhLS-jMdh3isj0rMd7_Cw85R1-YlRNFkUwoDyhH4aMj7AdHsW5A1po8BinbxspAuLBdB-or_3YzCMNXZKYrb50MIIJCZEpb4","groups":["general","54296|700726330"],"trustedMerchantId":"MID_54316"}&client=242&contact_type=anno&hl=en_US'>>> c = urlparse.parse_qsl(txt, True)>>> c   # c是一个list[(u'entity', u'{"author":"AIe9_BEW4fia2hKVVTrlUwNzhLS-jMdh3isj0rMd7_Cw85R1-YlRNFkUwoDyhH4aMj7AdHsW5A1po8BinbxspAuLBdB-or_3YzCMNXZKYrb50MIIJCZEpb4","groups":["general","54296|700726330"],"trustedMerchantId":"MID_54316"}'), (u'client', u'242'), (u'contact_type', u'anno'), (u'hl', u'en_US')]>>> import json>>> c = dict(c)>>> d = json.loads(c['entity'])>>> d{u'trustedMerchantId': u'MID_54316', u'groups': [u'general', u'54296|700726330'], u'author': u'AIe9_BEW4fia2hKVVTrlUwNzhLS-jMdh3isj0rMd7_Cw85R1-YlRNFkUwoDyhH4aMj7AdHsW5A1po8BinbxspAuLBdB-or_3YzCMNXZKYrb50MIIJCZEpb4'}>>> print d['groups'][-1]54296|700726330>>>

注意:

  1. 使用urlparse.unquote把编码的url解码。
  2. 使用HTMLParser对url的特殊符号进行解码。
  3. 把元组组成的list转换成dict,每个元组的第一个元素为dict的key,第二个元素为dict的value。

转载于:https://www.cnblogs.com/stemon/p/6602185.html

你可能感兴趣的文章
linux学习之查看程序端口占用情况
查看>>
相逢在栀枝花开的季节
查看>>
linux下git自动补全命令
查看>>
Ubuntu14.04LTS更新源
查看>>
Linux报“Unknown HZ value! (288) Assume 100”错误
查看>>
mysql多实例实例化数据库
查看>>
我的友情链接
查看>>
golang xml和json的解析与生成
查看>>
javascript 操作DOM元素样式
查看>>
Android 内存管理 &Memory Leak & OOM 分析
查看>>
【查找算法】基于存储的查找算法(哈希查找)
查看>>
JavaWeb网上图书商城完整项目--day02-10.提交注册表单功能之页面实现
查看>>
做程序开发的你如果经常用Redis,这些问题肯定会遇到
查看>>
006android初级篇之jni数据类型映射
查看>>
org.openqa.selenium.StaleElementReferenceException
查看>>
HBase 笔记3
查看>>
Linux嵌入式GDB调试环境搭建
查看>>
java分析jvm常用指令
查看>>
【Linux】Linux 在线安装yum
查看>>
Atom 编辑器系列视频课程
查看>>