python爬虫第二课:url解析

实例域名: http://www.baidu.com/index.html;user?id=S#comment
URL通过特定的分隔符解析:
冒号’:‘前面的就是 scheme,代表协议;第一个’/‘符号前面便是 netloc ,即域名,后面是 path,即访 问路径(其实包含‘/’本身);分号’;‘后面是 params ,代表参数;问号’?‘后面是查询条件 query, 一般用作 GET 类型的 URL; 井号’#'后面是锚点,用于直接定位页面内部的下拉位置。

urllib.parse.urlparse(urlstring, scheme=”, allow_fragments=True)
scheme: 它是默认的协议(比如 http 或 https 等) 假如这个链接没有带协议信息,会将这个作为默认的协议。
allow_fragments :即是否忽略fragment。 如果它被设置为 False,干ragment部分就会被忽略, 它会被解析为 path、 parameters 或者 query 的一部分,而 fragment 部分为空。
返回一个元组,我们可以用索引顺序来获取,也可以用属性名获取

实例代码:

from urllib.parse import *

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

#  urlsplit() :和 urlparse()方法非常相似, 只不过它不再单独解析 params 这一部分,只返回 5 个结果。同样返回也是元组。
result2 = urlsplit(url)
print('result2 : ', result2)

# urlunparse():接受一个可迭代对象(字典取得是key部分,贼傻),长度必须是6.组装为一个URL。
data1 = ['http', 'www.baidu.com', '/index.html', 'user', 'id=S', '#comment', ]
print(urlunparse(data1))

#  urlunsplit() :与 urlunparse()类似,传入的参数也是一个可迭代对象 ,唯一的区别是长度必须为 5。
data2 = ['http', 'www.baidu.com', '/index.html;user', 'id=S', '#comment', ]
print(urlunsplit(data2))

# urljoin() :提供一个 base_url (基础链 接 ) 作为第一个参数,将新的链接作为第二个参数,该方法会分析 base_url 的 scheme、 netloc 
#                  和 path 这 3 个内容并对新链接缺失的部分进行补充,最后返回结果。
print(urljoin('http://www.baidu.com', '?category=2#comment'))

# urlencode() :将一个字典构造为 GET 请求参数
params = {'scheme': 'http', 'netloc': 'www.baidu.com', 'path': '/index.html', 'name': 'germey', 'age': 22}
print(urlencode(params))
params = {'name': 'germey', 'age': 22}
print('http://www.baidu.com?' + urlencode(params)) #所以urlencode只是加参数,并不负责解析字典

# parse_qs():将参数转化字典
# parse_qsl():将参数转化为元组组成的列表
print(parse_qs('name=germey&age=22'))
print(parse_qsl('name=germey&age=22'))

# quote() :URL 中带有中文参数时,有时可能会导致乱码的问题,用这个方法可以将文字符转化为 URL 编码。
# unquote() :它可以进行 URL解码。
keyword = '壁纸'
url = 'https://www.baidu.com/s?wd='+ quote(keyword)
print(url)
print(unquote(url))

程序运行结果:

<class 'urllib.parse.ParseResult'>
result1 :  ParseResult(scheme='http', netloc='www.baidu.com', path='/index.html', params='user', query='id=5', fragment='comment')
ParseResult(scheme='http', netloc='www.baidu.com', path='/index.html', params='user', query='id=5#comment', fragment='')
result2 :  SplitResult(scheme='http', netloc='www.baidu.com', path='/index.html;user', query='id=5', fragment='comment')
http://www.baidu.com/index.html;user?id=S##comment
http://www.baidu.com/index.html;user?id=S##comment
http://www.baidu.com?category=2#comment
scheme=http&netloc=www.baidu.com&path=%2Findex.html&name=germey&age=22
http://www.baidu.com?name=germey&age=22
{'name': ['germey'], 'age': ['22']}
[('name', 'germey'), ('age', '22')]
https://www.baidu.com/s?wd=%E5%A3%81%E7%BA%B8
https://www.baidu.com/s?wd=壁纸
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值