• 113545

    文章

  • 803

    评论

  • 12

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

Python自学笔记-第10章网站编程(1)

撸了今年阿里、腾讯和美团的面试,我有一个重要发现.......>>

1.URL处理

 

1.1 URL解析

可以使用urllib中parse模块来处理,pars对于URL的定义是采用的六元组。如:

scheme://netloc/path;parameters?query#fragment
 

urlparse方法返回对象中的属性

 
属性 索引值 值含义 默认值
scheme 0 协议 空字符串
netloc 1 服务器地址 空字符串
path 2 路径 空字符串
params 3 参数 空字符串
query 4 查询部分 空字符串
fragmetn 5 分片部分 空字符串
username - 用户名 None
password - 密码 None
hostname - 主机名 None
port - 端口 None
 

urlparse方法的语法:

parse.urlparse(url,scheme,allow_fragments)
  1. scheme 用来为不包含协议部分的URL指定默认协议。此参数的默认值为空字符串
  2. allow_fragments 则用来指示是否可以对地址进行分片。此参数的默认值为True
In [7]:
from urllib import parse
r= parse.urlparse('http://www.163.com/xxx/yyy.html?ax=1&by=2')
r
Out[7]:
ParseResult(scheme='http', netloc='www.163.com', path='/xxx/yyy.html', params='', query='ax=1&by=2', fragment='')
In [9]:
from urllib import parse
r1= parse.urlparse('www.163.com/xxx/yyy.html?ax=1&by=2',scheme='https')
r1
Out[9]:
ParseResult(scheme='https', netloc='', path='www.163.com/xxx/yyy.html', params='', query='ax=1&by=2', fragment='')
In [12]:
print(r1.hostname)
 
None
 

1.2 URL合并

当提供了URL中的绝对地址和相对地址的时候,可以使用parse模块中的urljoin方法将其合并起来。urljoin方法有两个参数:一是绝对地址,二是相对地址。

In [13]:
from urllib import parse
r = parse.urljoin('http://www.baidu.com','hello.html')
r
Out[13]:
'http://www.baidu.com/hello.html'
 
  • 当输入的参数都是空字符串的时候,返回的拼合URL也是空字符串
In [15]:
r = parse.urljoin('','')
r
Out[15]:
''
 
  • 在相对URL中如果有协议字段,则优先使用相对URL中的协议,否则使用结对URL中的协议字段
In [20]:
r = parse.urljoin('http://www.163.com','ftp://www.baidu.com/path')
r
Out[20]:
'ftp://www.baidu.com/path'
 
  • 当绝对URL和相对URL中都含有服务器地址且不相同的时候,将采用相对URL地址的服务器地址和路径。
    见上
 

1.3 URL的分解

和urlparse类型,urlsplit也可以用来对URL进行分解。最后返回的是一个五元组,结果少param参数

In [21]:
from urllib import parse
r= parse.urlsplit('http://www.163.com/xxx/yyy.html?ax=1&by=2')
r
Out[21]:
SplitResult(scheme='http', netloc='www.163.com', path='/xxx/yyy.html', query='ax=1&by=2', fragment='')
 

1.4.URL的编码和解码

在URL中使用的是ASCII字符集中的字符。当使用不在ASCII字符集中的字符时,就需要对此字符进行编码。

 

ASCII中,在百分号后面街上两个十六进制数字,和其在ASCII字符表中的对应值相同

 

ASCII字符集中有些字符可能会使用URL非法,这些字符被称为保留字符。保留字符是那种不能再URL中出现的字符。如斜线将会用来分隔路径,如果需要使用斜线字符而不是将其作为路径的分隔符,则需要对齐进行转义。

 

URL编码中保留的字符:

保留字符 URL编码
; %3B
/ %2F
? %3F
: %3A
@ %40
= %3D
& %26
空格 %20
 

ASCII字符串集中有些字符会导致上下文歧义,这些字符被称为不安全字符。不安全字符是指那些虽然在URL中没有特殊的意义,但是在URL的上下文中可能有特殊的含义。例如:双引号在标签中是用来分隔属性和其值的,如果在URL中有双引号,则有可能会使用浏览器解析的时候发生错误,则需要进行编码。

 

URL编码中不安全的字符

不安全字符 URL编码
< %3C
> %3E
" %22
# %23
% %25
{ %7B
} %7D
| %7C
\ %5C
^ %5E
~ %7E
[ %5B
] %5D
' %60
 

URLLIB模块中URL编码和解码的方法

方法 功能
quote 对URL进行编码
quote_plus 同quote方法,进一步将空格表示成"+"
unquote 对URL进行解码
unquote_plus 同unquote方法,进一步将"+"表示成空格
In [22]:
from urllib import parse
r = parse.quote('http://www.163.com/a=?')
r
Out[22]:
'http%3A//www.163.com/a%3D%3F'
In [24]:
from urllib import parse
r = parse.quote_plus('http://www.163.com/a= ?')
r
Out[24]:
'http%3A%2F%2Fwww.163.com%2Fa%3D+%3F'
 

中文处理

In [25]:
from urllib import parse
r = parse.quote('http://www.163.com/a=测试')
r
Out[25]:
'http%3A//www.163.com/a%3D%E6%B5%8B%E8%AF%95'
 

1.5 查询参数的编码

在HTTP中有两种提交数据的方式,get和post。这两种方式中都需要对查询参数和其值进行编码,使用parse中的urlencode方法。

 

urlencode方法的作用是将查询的参数值对返回成URL编码的形式。参数值对可以是一系列的(keyword,value)参数值对,也可以是一个字典数据。

In [26]:
from urllib import parse
r = parse.urlencode({"a":'中文'})
r
Out[26]:
'a=%E4%B8%AD%E6%96%87'

  更多文章,请关注:
          


695856371Web网页设计师②群 | 喜欢本站的朋友可以收藏本站,或者加入我们大家一起来交流技术!

0条评论

Loading...


自定义皮肤 主体内容背景
打开支付宝扫码付款购买视频教程
遇到问题联系客服QQ:419400980
注册梁钟霖个人博客