爬虫库urllib使用(3) 解析链接

1、说明

  urllib库提供了parse模块, 它定义了处理url的标准接口,实现url各部分饿抽取,合并以及链接的转换。

2、urlparse()

实现URL的识别和分段

from urllib.parse import urlparse
result = urlparse("http://wwww,baidu.com/index.html;user?id=5#comment")
#  输出解析类型和和解析结果
print(type(result), result, sep="\n")

运行结果:
在这里插入图片描述urlparse()将URL拆分为6个部分:
在这里插入图片描述`def urlparse(url, scheme=’’, allow_fragments=True):

  • urlString :必填参数,需要解析的URL
  • scheme;默认协议,假如链接没有带协议信息,会将这个参数作为默认的协议
result = urlparse("wwww,baidu.com/index.html;user?id=5#comment", scheme="https")
print(result)

在这里插入图片描述当我们提供的URL中没有带scheme信息时,拿参数提供的协议作为结果返回

在这里插入图片描述当我们提供的URL中带有scheme信息时,以url中的协议为准,参数提供的协议信息无效

  • allow_fragments=True,即是否忽略fragment(锚点),如果它设置为false,fragment部分会被忽略,它会被解析为path,parameters或者query的一部分,而fragment为空。
result = urlparse("http://wwww,baidu.com/index.html;user?id=5#comment", allow_fragments=False)
print(result)

在这里插入图片描述我们把paras和query去掉

result = urlparse("http://wwww,baidu.com/index.html#comment", allow_fragments=False)
print(result)

在这里插入图片描述
fragment被解析成为path的一部分。

print(result.scheme, result[0], result.netloc, result[1], sep="\n")

parseResult实际上是一个元组,我们可以用索引顺序来获取,也可以用属性名获取。

在这里插入图片描述

3、urlunparse()

  urlunparse()接受的参数是一个可迭代对象,但是长度必须为6,否则会抛出异常。

def urlunparse(components):scheme, netloc, url, query, fragment, _coerce_result = (
                                      _coerce_args(*components))
from urllib.parse import  urlunparse

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

在这里插入图片描述

4、urlspilt()

  会返回5个结果,其中的params会合并到path中,返回的SplitResult也是一个元组类型

from urllib.parse import urlsplit


result = urlsplit("http://wwww,baidu.com/index.html;user?id=5#comment")
print(result)
print(result.scheme, result[0], sep="\n")

在这里插入图片描述

5、urlunspilt()

  它可以将链接各个部分组合成完整的连接,但是传入的参数是一个可迭代的对象,例如元组,列表等,长度必须为5.

data = ['http', 'www.baidu.com', 'index.html',  'a=6', 'comment']
print(urlunsplit(data))

在这里插入图片描述

6、urljoin()

  提供一个baseUrl,将新的链接作为第二个参数,该方法解析base_url的scheme,netloc,和path这三个内容对新链接进行补充,然后返回结果。

def urljoin(base, url, allow_fragments=True):
# http://www.baidu.com/FAQ,html
print(urljoin("http://www.baidu.com", "FAQ,html"))
# https://www.baidu.com/FAQ,html  根据第二个参数进行补全
print(urljoin("http://www.baidu.com", "https://www.baidu.com/FAQ,html"))
# https://cuiqingcai.com/FAQ.html
print(urljoin("http://www.baidu.com/about.html", "https://cuiqingcai.com/FAQ.html"))
# https://cuiqingcai.com/FAQ.html?question=2
print(urljoin("http://www.baidu.com/about.html", "https://cuiqingcai.com/FAQ.html?question=2"))
# http://www.baidu.com?category=2#comment
print(urljoin("http://www.baidu.com", "?category=2#comment"))
# www.baidu.com?category=2#comment
print(urljoin("www.baidu.com", "?category=2#comment"))
# www.baidu.com?category=2
print(urljoin("www.baidu.com#comment", "?category=2"))

base_url提供了三项内容scheme,netloc,path,如果这三项在新的链接中不存在,就会进行补充;如果新的链接中存在,就使用新的链接中的部分。

7、urlencode()

将请求参数序列化

from urllib.parse import urlencode

# 声明一个字典将参数表示出来,调用urlencode()方法将其序列化为GET请求的参数
params = {
    'name': 'germy',
    'age': 27
}
base_url = 'http://www.baidu.com?'
url = base_url + urlencode(params)
print(url)

运行结果:
在这里插入图片描述

8、parse_qs()

反序列化,将参数转换为字典

from urllib.parse import parse_qs
# 反序列化,将参数转化为字典
query = 'name=gery&age=22'
print(parse_qs(query))

在这里插入图片描述

9、parse_qsl()

将参数转化为元组组成的列表

from urllib.parse import parse_qsl
# 将参数转化为元组组成的列表
query = 'name=gery&age=22'
print(parse_qsl(query))

在这里插入图片描述

10、quote()

  该方法可以将内容转化为URL编码的格式,URL中带有中文参数时,有时候可能会导致乱码问题,用这个可以将中文符转换为url编码

from urllib.parse import quote

keyword = '壁纸'
url = "https://www,baidu.com/s?wd="+quote(keyword)
print(url)

在这里插入图片描述

11、unquote()

对URL编码进行解码

from urllib.parse import unquote
# 对URL编码进行解码
url = "https://www,baidu.com/s?wd=%E5%A3%81%E7%BA%B8"
print(unquote(url))

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值