Python爬虫入门:urllib.parse模块

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

运行结果为:

<class 'urllib.parse.ParseResult'> 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))
  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值