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

文章目录

      • 1、说明
      • 2、urlparse()
      • 3、urlunparse()
      • 4、urlspilt()
      • 5、urlunspilt()
      • 6、urljoin()
      • 7、urlencode()
      • 8、parse_qs()
      • 9、parse_qsl()
      • 10、quote()
      • 11、unquote()

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

运行结果:
爬虫库urllib使用(3) 解析链接_第1张图片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)

爬虫库urllib使用(3) 解析链接_第2张图片当我们提供的URL中没有带scheme信息时,拿参数提供的协议作为结果返回

爬虫库urllib使用(3) 解析链接_第3张图片当我们提供的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)

爬虫库urllib使用(3) 解析链接_第4张图片我们把paras和query去掉

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

爬虫库urllib使用(3) 解析链接_第5张图片
fragment被解析成为path的一部分。

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

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

爬虫库urllib使用(3) 解析链接_第6张图片

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

爬虫库urllib使用(3) 解析链接_第7张图片

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

爬虫库urllib使用(3) 解析链接_第8张图片

5、urlunspilt()

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

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

爬虫库urllib使用(3) 解析链接_第9张图片

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)

运行结果:
爬虫库urllib使用(3) 解析链接_第10张图片

8、parse_qs()

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

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

爬虫库urllib使用(3) 解析链接_第11张图片

9、parse_qsl()

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

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

爬虫库urllib使用(3) 解析链接_第12张图片

10、quote()

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

from urllib.parse import quote

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

爬虫库urllib使用(3) 解析链接_第13张图片

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

爬虫库urllib使用(3) 解析链接_第14张图片

你可能感兴趣的:(Python,python,爬虫)