(一)urllib.parse:分解url

urllib.parse模块提供了一些函数,可以管理URL以及组成部分

1.解析

from urllib.parse import urlparse

'''
urlparse函数的返回值是一个ParseResult对象,其相当于一个包含6个元素的tuple
'''
url = "https://www.baidu.com/s?wd=古明地觉"
parsed = urlparse(url)
print(parsed)  # ParseResult(scheme='https', netloc='www.baidu.com', path='/s', params='', query='wd=古明地觉', fragment='')

# parsed相当于一个namedtuple
print(parsed.scheme)  # https

# urlsplit函数可以替换urlparse,但行为稍有不同,因为它不会从url分解参数
from urllib.parse import urlsplit
parsed = urlsplit(url)
# 由于没有分解参数,所以结果是5个,不是6个,因为少了params
print(parsed)  # SplitResult(scheme='https', netloc='www.baidu.com', path='/s', query='wd=古明地觉', fragment='')

# urldefrag
from urllib.parse import urldefrag
url = "https://www.baidu.com/s?wd=satori"
parsed = urldefrag(url)
print(parsed)  # DefragResult(url='https://www.baidu.com/s?wd=satori', fragment='')

  

2.反解析

from urllib.parse import urlparse

'''
个人觉得没啥用
'''
url = "https://www.baidu.com"
parsed = urlparse(url)
print(parsed)  # ParseResult(scheme='https', netloc='www.baidu.com', path='', params='', query='', fragment='')
# 对urlparse或urlsplit返回的对象调用geturl方法,可以得到原来的url
print(parsed.geturl())  # https://www.baidu.com

  

3.连接

from urllib.parse import urljoin

'''
https://www.baidu.com/img/1.jpg
但有的图片是,/img/1.jpg,主域名被自动省略了
'''
url1 = "https://www.baidu.com/img/1.jpg"
url2 = "/img/1.jpg"

print(urljoin("https://www.baidu.com", url1))  # https://www.baidu.com/img/1.jpg
print(urljoin("https://www.baidu.com", url2))  # https://www.baidu.com/img/1.jpg
# 会自动进行组合,如果包含主域名,那么会忽略。不包含,会和主域名拼接在一起

  

4.解码查询参数

from urllib.parse import urlencode

query_args = {"wd": "satori", "age": 16}
print(urlencode(query_args))  # wd=satori&age=16

  

(二)urllib.request:网络资源访问

略,建议使用第三方库requests

(三)urllib.robotparser:Internet蜘蛛访问控制

(四)base64:用ASCII编码二进制数据

base64模块包含一些函数可以将二进制数据转换为适合使用纯文本协议传输的ASCII的一个子集。Base64、Base32、Base16、Base85编码将8位字节转换为ASCII可打印字符范围内的字符,留出更多的位来表示数据,保证与只支持ASCII数据的系统兼容,如SMTP。base(进制)值对应各编码中使用的字母表长度。这些原始编码还有一些url安全的变形,其使用的字母表稍有不同

import base64

s = bytes("古明地觉", encoding="utf-8")
encode_data = base64.b64encode(s)
print(encode_data)  # b'5Y+k5piO5Zyw6KeJ'

bytes_s = base64.b64decode(encode_data)
print(bytes_s)  # b'\xe5\x8f\xa4\xe6\x98\x8e\xe5\x9c\xb0\xe8\xa7\x89'
print(str(bytes_s, encoding="utf-8"))  # 古明地觉

# 对于url来说,一些特殊符号要转义,所以可以使用另一个函数
url = bytes("www.baidu.com/s?wd=古明地觉", encoding="utf-8")
encode_data = base64.urlsafe_b64encode(url)
print(encode_data)  # b'd3d3LmJhaWR1LmNvbS9zP3dkPeWPpOaYjuWcsOiniQ=='
bytes_url = base64.urlsafe_b64decode(encode_data)
print(str(bytes_url, encoding="utf-8"))  # www.baidu.com/s?wd=古明地觉

  

(五)http.server:实现web服务器的基类

(六)http.cookies:HTTP cookie

(七)webbrowser:显示web页面

webbrowser模块包含一些函数,可以在交互式的浏览器应用中打开url。它提供了一个可用浏览器的注册表,因为系统上可能有多个可用的浏览器

import webbrowser

# 要在浏览器中打开新的页面,可以使用open函数
webbrowser.open("")

# 如果想使用一个新的窗口,可以使用open_new,否则会在已经打开的浏览器中新建标签页
# 但如果没有打开浏览器,那么这个函数和open是类似的
webbrowser.open_new("")

# 新建标签页
webbrowser.open_new_tab("")

# 使用特定的浏览器
b = webbrowser.get("")
b.open("")

  

(八)uuid:全局唯一标识符

1.uuid1:IEEE 802 MAC地址

import uuid

'''
UUID1值使用主机的MAC地址计算。uuid模块使用getnode函数来获取当前系统的MAC值
'''
print(uuid.getnode())  # 70561824630575
# 如果一个系统有多个网卡,那么相应地便会有多个MAC地址,并且可能返回其中任意一个值

# 要为一个主机(由其MAC地址标识)生成一个UUID,需要使用uuid1函数。节点标识符参数是可选的。如果没有设置这个域,那么便会使用getnode返回的值
u = uuid.uuid1()
print(u)
print(type(u))
print(f"bytes:{u.bytes}")
print(f"hex:{u.hex}")
print(f"int:{u.int}")
r'''
3e5fc450-51f7-11e9-ad5d-402cf47de72f
<class 'uuid.UUID'>
bytes:b'>_\xc4PQ\xf7\x11\xe9\xad]@,\xf4}\xe7/'
hex:3e5fc45051f711e9ad5d402cf47de72f
int:82909385656127884677084089467799463727
'''

  

2.UUID 3和5:基于名字的值

import uuid

'''
有些情况下可能需要根据名字创建UUID值,而不是根据随机值或基于时间的值来创建。
UUID 3和5规范使用密码散列值(分别使用MD5和SHA-1),将特定于命名空间的种子值与名字相结合。
'''
hostnames = ["www.baidu.com", "www.google.com"]
for name in hostnames:
    print(name)
    print("     md5 : ", uuid.uuid3(uuid.NAMESPACE_DNS, name))
    print("     sha1: ", uuid.uuid5(uuid.NAMESPACE_DNS, name))
    print()
'''
www.baidu.com
     md5 :  21aa3105-dfd8-3bca-ab6b-64ea70ff0847
     sha1:  41b0ac12-a668-57f8-9471-4bc149b12778

www.google.com
     md5 :  de87628d-5377-3ba7-b31b-cde1cc8d423f
     sha1:  488416f4-fcaf-5027-8c63-0105cfa213ea
'''

  

3.uuid4:随机值

import uuid

'''
一般情况下我们使用uuid4
'''
for _ in range(3):
    print(uuid.uuid4())
'''
03f6defd-db47-43fc-9a27-da8ffaeb55f6
d61a41e2-476e-42b0-b089-5e3b62a44956
1912cd31-2a53-4abc-8250-d27b4ac7da2f
'''

# 注意目前得到的都只是一个UUID对象,可以转化成字符串
u = uuid.uuid4()
print(u)  # 9c0cf417-46bc-402a-bbab-f964f867976e
print(type(u))  # <class 'uuid.UUID'>
print(type(str(u)))  # <class 'str'>

  

(九)json:JavaScript对象记法

13.Python3标准库--互联网的更多相关文章

  1. python3标准库总结

    Python3标准库 操作系统接口 os模块提供了不少与操作系统相关联的函数. ? 1 2 3 4 5 6 >>> import os >>> os.getcwd( ...

  2. Python3 标准库

    Python3标准库 更详尽:http://blog.csdn.net/jurbo/article/details/52334345 文本 string:通用字符串操作 re:正则表达式操作 diff ...

  3. python023 Python3 标准库概览

    Python3 标准库概览 操作系统接口 os模块提供了不少与操作系统相关联的函数. >>> import os >>> os.getcwd() # 返回当前的工作 ...

  4. 8.Python3标准库--数据持久存储与交换

    ''' 持久存储数据以便长期使用包括两个方面:在对象的内存中表示和存储格式之间来回转换数据,以及处理转换后数据的存储区. 标准库包含很多模块可以处理不同情况下的这两个方面 有两个模块可以将对象转换为一 ...

  5. 7.Python3标准库--文件系统

    ''' Python的标准库中包含大量工具,可以处理文件系统中的文件,构造和解析文件名,还可以检查文件内容. 处理文件的第一步是要确定处理的文件的名字.Python将文件名表示为简单的字符串,另外还提 ...

  6. 1.Python3标准库--前戏

    Python有一个很大的优势便是在于其拥有丰富的第三方库,可以解决很多很多问题.其实Python的标准库也是非常丰富的,今后我将介绍一下Python的标准库. 这个教程使用的书籍就叫做<Pyth ...

  7. 比较两个文件的异同Python3 标准库difflib 实现

    比较两个文件的异同Python3 标准库difflib 实现 对于要比较两个文件特别是配置文件的差异,这种需求很常见,如果用眼睛看,真是眼睛疼. 可以使用linux命令行工具diff a_file b ...

  8. 3.Python3标准库--数据结构

    (一)enum:枚举类型 import enum ''' enum模块定义了一个提供迭代和比较功能的枚举类型.可以用这个为值创建明确定义的符号,而不是使用字面量整数或字符串 ''' 1.创建枚举 im ...

  9. 9.Python3标准库--数据压缩与归档

    ''' 尽管现代计算机系统的存储能力日益增长,但生成数据的增长是永无休止的. 无损(lossless)压缩算法以压缩或解压缩数据花费的时间来换取存储数据所需要的空间,以弥补存储能力的不足. Pytho ...

随机推荐

  1. 【数据库_Postgresql】数据库主键自增长之加序列和不加序列2种方法

    将表的主键进行序列增加之后可以在数据库层面自动主键id增长 方法如下:先建序列,然后建表关联id主键,然后添加语句,不用考虑id主键 DROP SEQUENCE IF EXISTS "pub ...

  2. [APIO2014]回文串 manacher 后缀数组

    题面:洛谷 题解: 还是这个性质:对于每个串而言,本质不同的回文串最多只有O(n)个. 所以我们先求出这O(n)个本质不同的回文串,然后对整个串求一次sa. 然后对于每个回文串,求出它的出现次数,更新 ...

  3. Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1)

    A 模拟 B 发现对于每个连通块,只有为完全图才成立,然后就dfs C 构造 想了20分钟才会,一开始想偏了,以为要利用相邻NO YES的关系再枚举,其实不难.. 考虑对于顺序枚举每一个NO/YES, ...

  4. bzoj1969: [Ahoi2005]LANE 航线规划(树链剖分)

    只有删边,想到时间倒流. 倒着加边,因为保证图连通,所以一开始一定至少是一棵树.我们先建一棵树出来,对于每一条非树边,两个端点在树上这段路径的边就不会变成关键边了,所以将它们对答案的贡献删去,那么直接 ...

  5. [JSOI2007]建筑抢修——贪心反悔堆

    题目描述 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建 ...

  6. 万圣节后的早晨&&九数码游戏——双向广搜

    https://www.luogu.org/problemnew/show/P1778 https://www.luogu.org/problemnew/show/P2578 双向广搜. 有固定起点终 ...

  7. 保护程序猿滴眼睛---修改VS 2012 编辑器颜色

    转载于http://blog.csdn.net/qing666888/article/details/8973216 字体,发现好多人选用 Consolas  ...确实挺好看的. 然后 修改背景色: ...

  8. Codeforces Round #410 (Div. 2)A B C D 暴力 暴力 思路 姿势/随机

    A. Mike and palindrome time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  9. php的错误处理机制

    看tp5源码的,补充下 error_reporting(E_ALL); set_error_handler([__CLASS__, 'appError']); set_exception_handle ...

  10. array_diff、array_diff_key、array_diff_ukey、array_diff_assoc、array_diff_uassoc 的用法

    <?php // array_diff* 系列的函数都返回关联数组// array_diff* 系列函数返回数组的差集(返回在第一个参数中, 但不在其他参数中的元素) $array1 = [ ' ...