Python爬虫入门:urllib.parse模块

Python爬虫入门:urllib.parse模块

    • urlparse()
        • 基本用法示例
        • 参数
        • scheme参数示例
        • allow_fragments参数示例
    • urlunparse()
    • urljoin()
    • urlencode()
    • parse_qs() 将请求参数转换为字典
    • parse_qsl() 将请求参数转换为元组组成的列表
    • quote() url中文编码
    • unquote() url中文解码

urlparse()

此方法可以实现url的识别和分段。
标准链接格式为:scheme://netloc/path;params?query#fragment

基本用法示例

from urllib.parse import urlparse

result = urlparse('http://www.baidu.com/index.html;user?id=5#comment')
print(type(result),result)
print(result.scheme,result[0],result.netloc,result[1],sep='\n')

运行结果为:

 ParseResult(scheme='http', netloc='www.baidu.com', path='/index.html', params='user', query='id=5', fragment='comment')
http
http
www.baidu.com
www.baidu.com

参数

参数 作用
urlstring 必填,待解析的url
scheme 默认的协议,如http,https。链接没有协议信息时生效
allow_fragments 是否忽略fragment,如果设置False,fragment部分会被忽略,解析为path、params或者query的一部分,而fragment部分为空。当URL不包含params和query时候,fragment会被解析为path一部分

scheme参数示例

from urllib.parse import urlparse

result = urlparse('www.baidu.com/index.html;user?id=5#comment', scheme='https')
print(result)

结果为:

ParseResult(scheme='https', netloc='', path='www.baidu.com/index.html', params='user', query='id=5', fragment='comment')

allow_fragments参数示例

from urllib.parse import urlparse

result = urlparse('http://www.baidu.com/index.html;user?id=5#comment', allow_fragments=False)
print(result)

结果为:

ParseResult(scheme='http', netloc='www.baidu.com', path='/index.html', params='user', query='id=5#comment', fragment='')

urlunparse()

urlunparse()和urlparse()相反,他接受的参数是一个长度为6的可迭代对象,将URL的多个部分组合为一个URL。

from urllib.parse import urlunparse
data = ['http','www.baidu.com','index.html','user','a=6','comment']
print(urlunparse(data))

urljoin()

urljoin()也可以对网址进行拼接

from urllib.parse import urljoin
print(urljoin('http://www.baidu.com','FAQ.html')) 		#http://www.baidu.com/FAQ.html
print(urljoin('www.baidu.com','?category=2#comment'))	#www.baidu.com?category=2#comment
print(urljoin('www.baidu.com','http://qq.com'))  		#http://qq.com

urlencode()

urlencode在构造GET请求参数的时候非常有用,比如:

from urllib.parse import urlencode
params = {
	'name': 'germey',
	'age': 22
}
base_url = 'http://www.baidu.com?'
url = base_url + urlencode(params)
print(url)
# http://www.baidu.com?name=germey&age=22

parse_qs() 将请求参数转换为字典

我们也可以将一串GET请求参数反序列化,转换为字典,比如:

from urllib.parse import parse_qs
query = 'name=germey&age=22'
print(parse_qs(query))
# {'name': ['germey'], 'age': ['22']}

parse_qsl() 将请求参数转换为元组组成的列表

我们还可以将一串GET请求参数反序列化,转换为元组组成的列表,比如:

from urllib.parse import parse_qsl
query = 'name=germey&age=22'
print(parse_qsl(query))
# [('name', 'germey'), ('age', '22')]

quote() url中文编码

url中出现中文可能会乱码,所以中文路径需要转化,就用到了quote方法。

from urllib.parse import quote
keyword = "壁纸"
url = 'https://www.baidu.com/s?wd=' + quote(keyword)
print(url)
# https://www.baidu.com/s?wd=%E5%A3%81%E7%BA%B8

unquote() url中文解码

有了quote方法转换,也需要有unquote方法对URL进行解码

from urllib.parse import unquote
url = 'https://www.baidu.com/s?wd=%E5%A3%81%E7%BA%B8'
print(unquote(url))

你可能感兴趣的:(学习笔记)