Python Web开发 处理URL 【第二天】

版权声明:本文为博主原创文章,可以随意转载,但请附原地址或原作者名。谢谢! https://blog.csdn.net/farley119/article/details/82634432

引言

 在Python中有两个模块可以处理URL,他们分别有不同的功能和兼容性。一个是urlparse,另一种是urllib,还有一种urllib2。但是在Python3中这些模块都被整合到了urllib模块下面。其中urllib和urllib2被整合到了urllib.request。urlparse被整合到urllib.parse,另外python3的urllib还包括response,error和robotparse等。所以说除非你去编写更底层的东西,不然urllib就够用了,它给你提供了一个高级的Web通信库,支持Web协议,同时也支持对本地文件的访问。今天我们就来好好认识一下urllib中的各路大神。

实例

 我忘了之前有没有个大家说过,我不建议初学者去啃文档。因为那些繁琐的文档会磨灭你对Python的热情。所以我比较提倡实战中学习。所以这节的urllib模块我们通过一个个小实例来学习它。

例1
import urllib.request
with urllib.request.urlopen("http://www.python.org/") as python:
    print(python.read(100))

运行后输出:

b'<!doctype html>\n<!--[if lt IE 7]>   
<html class="no-js ie6 lt-ie7 lt-ie8 lt-ie9">   
<![endif]-->\n<!-'

首先给大家解释一下这行代码的意思,首先我们导入了urllib.request模块,并且通过urllib.request.urlopen打开了http://www.python.org 的网址,然后读取了这个网址的前100个字符。在这里我们主要用到的是urlopen,那么我们先看下urlopen这个函数具体是干什么用的。
首先urlopen的标准格式:

urllib.request.urlopen(url,data = None,[ timeout,] *,
cafile = None,capath = None,cadefault = False,
context = None )

它主要是用来打开某个URL,其中参数url就是打开的目标,data是指定要发送到服务器的其它数据对象,如果没有默认None,timeout指定超时时间。其它参数在这里可以暂且不理他。应该有同学发现了,在上面的实例中返回的结果是bytes对象。这是因为urlopen不能确定它从http获取到的字节的编码。所以一般情况下我们使用的时候都会给他转一次格式,比如:

import urllib.request
with urllib.request.urlopen("http://www.python.org/") as python:
    print(python.read(100).decode('utf-8'))

运行后输出:

<!doctype html>
<!--[if lt IE 7]>   <html class="no-js ie6 lt-ie7 lt-ie8 lt-ie9">   
<![endif]-->
<!-
例2
from urllib.parse import urlparse
o = urlparse('http://www.cwi.nl:80/%7Eguido/Python.html')
print(o)

运行后输出

ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='')

在这里主要用到的是urlparse,它的主要作用就是URL的解析,它会把一个完整的URL解析成我们上节中将到的那几个组件。既然有解析,那是不是也有组合呀?答案是肯定的,如果你给一堆组件可以是用urlunparse给你组装成一个URL。

例3
from urllib.parse import urljoin
print(urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html'))

运行后输出

http://www.cwi.nl/%7Eguido/FAQ.html

这里用到的是urljoin,它的作用显而易见了,就是把两个相关的URL连接起来。
这个说都了也没有意思。咱们进行下一章节吧。中间遇到哪些命令了我们再说。单讲命令就太枯燥了。

猜你喜欢

转载自blog.csdn.net/farley119/article/details/82634432