Python爬虫核心知识
第二章:2.2 爬虫urllib.parse模块
2.2 爬虫urllib.parse模块
Python中的urllib.parse模块中,提供了很多用来解析和重组URL的函数:
目录
Python爬虫核心知识
第二章:2.2 爬虫urllib.parse模块
2.2 爬虫urllib.parse模块
2.2.1 urllib.parse.urlparse()
2.2.2 urllib.parse.urlunparse()
2.2.3 urllib.parse.urlsplit()
2.2.4 urllib.parse.urlunsplit()
2.2.5 urllib.parse.urljoin()
2.2.6 urllib.parse.quote()
2.2.7 urllib.parse.unquote()
2.2.8 urllib.parse.urlencode()
2.2.9 urllib.parse.parse_qs()
2.2.10 urllib.parse.parse_qsl()
2.2.1 urllib.parse.urlparse()
url:urllib.parse.urlparse(url, scheme='', allow_fragments=True)
urlparse()函数可以将 URL 解析成 ParseResult 对象,实现url的识别和分段。
urlparse
定义:def urlparse(url,scheme=”, allow_fragments=True)
将url拆分成六大组件
URL的标准链接格式为:scheme://netloc/path;params?query#fragment 基础部分 scheme 协议 基础部分 netloc 域名 基础部分 path 路径 附加部分 params 路径参数 附加部分 query 查询参数 附加部分 fragment 片段
案例如下:
from urllib.parse import urlparseurl = '/crestroncarter/article/details/124376995?spm=1001..3001.5501'parsed_result = urlparse(url)print('parsed_result 的数据类型:', type(parsed_result))print('parsed_result 包含了: ', len(parsed_result), '个元素')print(parsed_result)print('scheme :', parsed_result.scheme)print('netloc :', loc)print('path :', parsed_result.path)print('params :', parsed_result.params)print('query :', parsed_result.query)print('fragment:', parsed_result.fragment)print('hostname:', parsed_result.hostname)
输出结果如下:
parsed_result 的数据类型: <class 'urllib.parse.ParseResult'>parsed_result 包含了: 6 个元素ParseResult(scheme='https', netloc='', path='/crestroncarter/article/details/124376995', params='', query='spm=1001..3001.5501', fragment='')scheme : httpsnetloc : path : /crestroncarter/article/details/124376995params : query : spm=1001..3001.5501fragment: hostname: 进程已结束,退出代码0
2.2.2 urllib.parse.urlunparse()
urlunparse()是urlparse()方法的反向操作,将各部分组合为url。
定义:def urlunparse(components)
功能:将拆分的组件合并为url
from urllib.parse import urlunparse#必须按顺序设置6个部分的值,并且放置到列表中,该方法不会自动进行url转码url_list = ['http','','index.html','user= haoweixl','a=6','comment']print(urlunparse(url_list))
输出结果如下:
/index.html;user= haoweixl?a=6#comment
2.2.3 urllib.parse.urlsplit()
urlsplit() 函数也能对 URL 进行拆分,所不同的是, urlsplit() 并不会把 路径参数(params) 从 路径(path) 中分离出来,只返回五个参数值,params会合并到path中。
因此,使用urlsplit()解析URL的结果只有5部分。
定义:urlsplit(url, scheme=”, allow_fragments=True)
返回:(scheme, netloc, path, query, fragment) 比urlparse少个params
url1='/book/index.html;user?id=5#comment'result1 = urllib.parse.urlsplit(url1)#path='/book/index.html;user'
2.2.4 urllib.parse.urlunsplit()
与urlsplit()相反的操作,urlunsplit将5个部分的值进行合并。
data = ["http","","index.html;user","a=10","comment"]print(urllib.parse.urlunsplit(data))
2.2.5 urllib.parse.urljoin()
URL的6个组成部分中,有3个基础部分:协议(scheme)、域名(netloc)、路径(path),和3个附加部分:路径参数(param)、查询参数(query)、片段(fragment)。
定义:def urljoin(base, url, allow_fragments=True)
如果url是完整的url路径直接返回
#导入parse模块from urllib import parse#相对路径parse.urljoin('/doc/article.html','excel/1')# result: /doc/excel/1parse.urljoin('/doc/article.html','../excel/1')# result: /excel/1#绝对路径parse.urljoin('/doc/abc/article.html','/excel/1')#result: /excel/1
2.2.6 urllib.parse.quote()
将内容转化为 URL 编码的格式。当 URL 中带有中文参数时,可以将中文字符转化为 URL 编码。
定义:quote(string, safe=’/’, encoding=None, errors=None)
url中出现中文可能会乱码,所以中文路径需要转化,就用到了quote方法。
实例如下:
from urllib.parse import quotekeyword = '中国' url = '/s?wd=' + quote(keyword) print(url)
运行结果:
/s?wd=%E4%B8%AD%E5%9B%BD
2.2.7 urllib.parse.unquote()
有了quote方法转换,也需要有unquote方法对URL进行解码。
实例如下:
from urllib.parse import unquote url = '/s?wd=%E4%B8%AD%E5%9B%BD' print(unquote(url))
运行结果:
/s?wd=中国
2.2.8 urllib.parse.urlencode()
将字典参数序列化为 GET 请求参数
定义:urlencode(query, doseq=False, safe=”, encoding=None, errors=None,quote_via=quote_plus)功能:将字典形式的数据转化成查询字符串参数的含义:query:需要转化的字典数据doseq:如果字典的某个值是序列的话是否解析,deseq值为False不解析doseq的值为True的时候解析safe:那些字符串不需要编码encoding:要转化成的字符串的编码quote_via:使用quote编码还是qutoe_plus编码,默认quote_plus也就是空格被转化成+号
实例如下:
from urllib.parse import urlencodedata = {'ie': 'utf-8','wd': 'TRHX',}base_url = '?'url = base_url + urlencode(data)print(url)
运行结果:
?ie=utf-8&wd=TRHX
2.2.9 urllib.parse.parse_qs()
与 urlencode() 相反,可以将一串GET请求参数反序列化,转换为字典。
实例如下:
from urllib.parse import parse_qsquery = 'name=TRHX&age=20'print(parse_qs(query))
运行结果:
{'name': ['TRHX'], 'age': ['20']}
2.2.10 urllib.parse.parse_qsl()
与parse_qs()类似,不同的是将参数转化为元组组成的列表。
实例如下:
from urllib.parse import parse_qslquery = 'name=TRHX&age=20'print(parse_qsl(query))
运行结果:
[('name', 'TRHX'), ('age', '20')]
如果觉得《Python爬虫核心知识-第二章:2.2 爬虫urllib.parse模块》对你有帮助,请点赞、收藏,并留下你的观点哦!