(一)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'>