Python urlparse模块介绍

1.urlparse模块

urlparse用于处理URL字符串,包括urlparse()、urlunparse()、和urljoin()三个主要功能。

URL使用格式:

prot_sch://net_loc/path;params?query#frag
prot_sch网络协议或下载方案
net_loc服务器所在地
path使用斜杠分隔文件应用的路径
params可选参数
query连接符&分隔的一系列键值对
frag指定文档内特定锚的部分

①urlparse将字符串拆分为主要组件:

urlparse(urlstr, defProtSch, allowFrag=None)

该函数将连接分为6个元组,分别对应上面表中内容

>>>from urllib.parse import urlparse
>>>o = urlparse('http://www.cwi.nl:80/%7Eguido/Python.html')
>>>o 
Out[24]: ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='')

可以使用对应命令查看属性:

>>> o.scheme
'http'
>>> o.port
80
>>> o.geturl()
'http://www.cwi.nl:80/%7Eguido/Python.html'

urlunparse和urlparse刚好相反,用于将六部分还原回去

>>>urlunparse(o)
Out[31]: 'http://www.cwi.nl:80/%7Eguido/Python.html'

2.urljoin()

urljoin主要是拼接URL,它以base作为其基地址,然后与url中的相对地址相结合组成一个绝对URL地址。函数urljoin在通过为URL基地址附加新的文件名的方式来处理同一位置处的若干文件的时候格外有用。需要注意的是,如果基地址并非以字符(/)结尾的话,那么URL基地址最右边部分就会被这个相对路径所替换。如果希望在该路径中保留末端目录,应确保URL基地址以字符(/)结尾。

urljoin(base, newurl, allow_frag=None)

实际运用中主要是是根路径和后面的补充路径:

   #当基路径不以/结尾,拼接newurl不以/开头时,直接替换路径最右边的
>>> urljoin("http://www.asite.com/folder/currentpage.html", "anotherpage.html")
'http://www.asite.com/folder/anotherpage.html'

>>> urljoin("http://www.asite.com/folder/currentpage.html", "folder2/anotherpage.html")
'http://www.asite.com/folder/folder2/anotherpage.html'

#下面两种情况则,替换对应级的目录,都是基路径为标准在替换
>>> urljoin("http://www.asite.com/folder/currentpage.html", "/folder3/anotherpage.html")
'http://www.asite.com/folder3/anotherpage.html'

#使用..替换到根目录级别
>>> urljoin("http://www.asite.com/folder/currentpage.html", "../finalpage.html")
'http://www.asite.com/finalpage.html'

#如果参数中的url为一个绝对路径的URL(即以//或scheme://开始),那么url的host name 和(或)scheme将会出现在结果中.例如
>>> urljoin('http://www.cwi.nl/%7Eguido/Python.html', '//www.python.org/%7Eguido')
'http://www.python.org/%7Eguido'

3.urlopen()

urllib.request.urlopen()打开一个给定URL的字符串表示的web链接,并返回文件类型的对象,语法是:

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

url: 需要打开的网址
data:Post提交的数据
timeout:设置网站的访问超时时间
cafile、capath、cadefault 参数:用于实现可信任的CA证书的HTTP请求
context参数:实现SSL加密传输
直接用urllib.request模块的urlopen()获取页面,page的数据格式为bytes类型,需要decode()解码,转换成str类型。

urlopen返回对象提供方法:

read() , readline() ,readlines() , fileno() , close() :对HTTPResponse类型数据进行操作

info():返回HTTPMessage对象,表示远程服务器返回的头信息

getcode():返回Http状态码。如果是http请求,200请求成功完成;404网址未找到

geturl():返回请求的url

网上找的小例子:

 import urllib.request
    import urllib.parse
    import json
    def traslate(words):
        #目标URL
        targetURL = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"
        #用户自定义表单,words表示的是用户要翻译的内容。这里使用的是dict类型,也可以使用元组列表(已经试过的)。
        data = {}
        data['type'] = 'AUTO'
        data['i'] = words
        data['doctype'] = 'json'
        data['xmlVersion'] = '1.8'
        data['keyfrom'] = 'fanyi.web'
        data['ue'] = 'UTF-8'
        data['action'] = 'FY_BY_CLICKBUTTON'
        data['typoResult'] = 'true'
        #将自定义data转换成标准格式
        data = urllib.parse.urlencode(data).encode('utf-8')
        #发送用户请求
        html = urllib.request.urlopen(targetURL, data)
        #读取并解码内容
        rst = html.read().decode("utf-8")
        rst_dict = json.loads(rst)
        return rst_dict['translateResult'][0][0]['tgt']
    if __name__ == "__main__":
        print("输入字母q表示退出")
        while True:
            words = input("请输入要查询的单词或句子:\n")
            if words == 'q':
                break
            result = traslate(words)
            print("翻译结果是:%s"%result)

这里会用到写其他的url模块,可以看我的另一篇文章
https://blog.csdn.net/weixin_44207181/article/details/89483329

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值