在开始python编程之前我们先来看看一个关与url的知识
在url中会有一些特殊字符,如果你写过cgi程序,并且提交一个表单去调用你的cgi,你会很清楚的
像?name=aiqier&age=21这样的参数传递
下面总结一下常见的url特殊字符的含义

空格换成加号(+)
正斜杠(/)分隔目录和子目录
问号(?)分隔URL和查询
百分号(%)制定特殊字符
#号指定书签
&号分隔参数

如果需要在URL中用到,需要将这些特殊字符换成相应的十六进制的值
字符                                    URL编码值
            空格                                        %20
              "                                          %22
              #                                          %23
             %                                         %25
             &                                          %26
              (                                          %28
             )                                           %29
            +                              %2B
             ,                                           %2C
             /                                           %2F
             :                                           %3A
             ;                                           %3B
            <                                           %3C
            =                                           %3D
            >                                           %3E
             ?                                           %3F
            @                                           %4o
             \                                           %5C
             |                                           %7C

现在问题来了,如果你的参数本身就有像”&”这样的字符,肿么办?
比如name=aiqier&liu&age=21(说明,aiqier&liu和21是我要传递的参数)
所以我们要对url的字符进行转义用到urllib.quote函数
试试如下代码

  1. myurl = 'http://www/~wo/lai-le/he.py?name=tom&age=6'
  2. urllib.quote(myurl)

quote和quote_plus差不多,quote_plus会把空格转义成+号,你可以试试

当然python为我们提供了对应的反函数,我们可把那些字符解码
urllib.unquote和urllib.unquote_plus()

urllib.urlencode把映射(键值对)转化成url格式编码的字符串

  1. myarg = {'name':'aiqier','age':'&15'}
  2. urllib.urlencode(myarg)

你会发现,它同时也调用了quote_plus()进行编码

对url字符串的操作urlparse模块

你在学习string时会遇到什么join,split之类的函数,在学习文件操作时,会遇到跟文件路径有关的join函数,split函数
所以在对url操作是你会遇到一个urljoin,你是不是已经猜到它的作用了?

urljoin(baseurl,newurl)将baseurl和newurl合并成一个完整的url

  1. urlparse.urljoin('http://www.myweb.com/something.html','but/not/anything.html')

urlparse.urlparse对url字符拆分成各个部件
url的结构是这样的:
协议://授权/路径;参数?连接符#拆分文档中的特殊锚

  1. urlparse.urlparse(myurl)

当然也有对应的反函数urlunparse

URL的转义和解析的更多相关文章

  1. HTTP URL 字符转义 字符编码 、 RFC 3986编码规范

    一.为什么要编码转义 通常如果一样东西需要编码,说明这样东西并不适合传输.原因多种多样,如Size过大,包含隐私数据,对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义. 例如Url参 ...

  2. Js把URL中的参数解析为一个对象

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8" /> <title&g ...

  3. mac下载的excel如果带有超链接,url被转义问题

    注释的代码是file开头的,这种链接在mac系统进行跳转url会转义 hyperlink 还有一种就是http这种就可以正常跳转了. String sLink = basePath + "/ ...

  4. day58——模板继承、组件、自定义标签和过滤器、inclusion_tag、静态文件配置、url别名和反向解析、url命名空间

    day58 模板相关 模板继承(母版继承) 1. 创建一个xx.html页面(作为母版,其他页面来继承它使用) 2. 在母版中定义block块(可以定义多个,整个页面任意位置) {% block co ...

  5. django url别名和反向解析 命名空间

    url别名和反向解析 我们平时写的url名字都是死的,如果项目过大,需要项目中某个文件名改动一下,那么改动起来就不是一般的麻烦了,所以我们就在定义的时候给url起一个别名,以后不管哪个文件中运用都是用 ...

  6. Python3 url解码与参数解析

    Python3 url解码与参数解析 有些子节点名字直接就是编码后的url,就像下面这行一样: url='dubbo%3A%2F%2F10.4.5.3%3A20880%2Fcom.welab.auth ...

  7. url特殊字符转义及解决方法

    URL特殊字符需转义 1.空格换成加号(+) 2.正斜杠(/)分隔目录和子目录 3.问号(?)分隔URL和查询 4.百分号(%)制定特殊字符 5.#号指定书签 6.&号分隔参数 转义字符的原因 ...

  8. php url字符转义操作

    遇到一段代码,从数据库里读出来带 \ 字符 需要转义成中文~ 用到url_decode(); //$info 为刚从数据库中读取的二维数组 foreach($info as $key1 => & ...

  9. javascript:将URL的参数列表解析为一个对象

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

随机推荐

  1. tcpdump的表达式介绍

    表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表 达式的条件,则这个报文将会被捕获.如果没有给出任何条件,则网络上所有的信息包 将会被截获. 在表达式中一般如下几种类 ...

  2. ScrollView 实现子视图滑动到顶部时固定不动

    这个,个人建议使用自己写的布局使用view的gon或者visble的方法,使用design包中的控件来的话,局限性很大 方法有倆 (1)自定义ScrollView 重写ScrollView 的 com ...

  3. zoj 1028 Flip and Shift(数学)

    Flip and Shift Time Limit: 2 Seconds      Memory Limit: 65536 KB This puzzle consists of a random se ...

  4. hdu 1045 Fire Net(二分匹配 or 暴搜)

    Fire Net Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  5. 安装 cx_Oracle

    1.下载 oracle client instant  和  sdk,  全部解压到 /opt/instantclient_11_2/ http://www.oracle.com/technetwor ...

  6. UIImageView添加圆角

    最直接的方法就是使用如下属性设置: 1 2 3 imgView.layer.cornerRadius = 10; // 这一行代码是很消耗性能的 imgView.clipsToBounds = YES ...

  7. 如何解决IntelliJ在打包Maven项目时不打包配置文件

    在pom文件中加上你的配置文件夹目录: <build> <resources> <resource> <directory>src/res</di ...

  8. 【OI】倍增求LCA

    ╭(′▽`)╯ 总之,我们都知道lca是啥,不需要任何基础也能想出来怎么用最暴力的方法求LCA,也就是深度深的点先跳到深度浅的点的同一深度,然后一起向上一步步跳.这样显然太慢了! 所以我们要用倍增,倍 ...

  9. C++临时对象的生命期

    class Test{ public: Test(int a):m_int(a){ printf("this is Test(%d) ctor\n", m_int); } ~Tes ...

  10. 面向视频的全新AI架构 —— 阿里云智能视觉技术全解

    我们都知道,AI技术正在以可见的速度被应用于各行各业,然而绝大部分业务场景想应用AI技术,都需要算法工程师根据自身业务的标注数据,来进行单独训练,才能打磨出合适的AI模型.如此一来,如何以最低的门槛和 ...