爬虫urllib库parse模块API详解二

一 urlunparse()

1 代码

#它接受的参数是一个可迭代对象,但是它的长度必须是6,否则会抛出参数数量不足或者过多的问题。
from urllib.parse import urlunparse

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

2 结果

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_1_3.py
http://www.baidu.com/index.html;user?a=6#comment

3 说明

这里参数data用了列表类型。当然,你也可以用其他类型,比如元组或者特定的数据结构。

这样我们就成功实现了URL的构造。

二 urlsplit()

1 代码1

from urllib.parse import urlsplit

# 这个方法和urlparse()方法非常相似,只不过它不再单独解析params这一部分,只返回5个结果。
# params会合并到path中
result = urlsplit('http://www.baidu.com/index.html;user?id=5#comment')
print(result)

2 结果1

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_1_3.py
SplitResult(scheme='http', netloc='www.baidu.com', path='/index.html;user', query='id=5', fragment='comment')

3 代码2

from urllib.parse import urlsplit

result = urlsplit('http://www.baidu.com/index.html;user?id=5#comment')
print(result.scheme, result[0])

4 结果2

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_1_3.py
http http

5 说明2

可以发现,返回结果是SplitResult,它其实也是一个元组类型,既可以用属性获取值,也可以用索引来获取。

三 urlunsplit()

1 代码

from urllib.parse import urlunsplit
# 传入的参数也是一个可迭代对象,例如列表、元组等,唯一的区别是长度必须为5。
data = ['http', 'www.baidu.com', 'index.html', 'a=6', 'comment']
print(urlunsplit(data))

2 运行结果

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_1_3.py
http://www.baidu.com/index.html?a=6#comment

四 urljoin()

1 代码

from urllib.parse import urljoin
# 我们可以提供一个base_url(基础链接)作为第一个参数,
# 将新的链接作为第二个参数,该方法会分析base_url的scheme、netloc和path
# 这3个内容并对新链接缺失的部分进行补充,最后返回结果。
print(urljoin('http://www.baidu.com', 'FAQ.html'))
print(urljoin('http://www.baidu.com', 'https://cuiqingcai.com/FAQ.html'))
print(urljoin('http://www.baidu.com/about.html', 'https://cuiqingcai.com/FAQ.html'))
print(urljoin('http://www.baidu.com/about.html', 'https://cuiqingcai.com/FAQ.html?question=2'))
print(urljoin('http://www.baidu.com?wd=abc', 'https://cuiqingcai.com/index.php'))
print(urljoin('http://www.baidu.com', '?category=2#comment'))
print(urljoin('www.baidu.com', '?category=2#comment'))
print(urljoin('www.baidu.com#comment', '?category=2'))

2 运行结果

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_1_3.py
http://www.baidu.com/FAQ.html
https://cuiqingcai.com/FAQ.html
https://cuiqingcai.com/FAQ.html
https://cuiqingcai.com/FAQ.html?question=2
https://cuiqingcai.com/index.php
http://www.baidu.com?category=2#comment
www.baidu.com?category=2#comment
www.baidu.com?category=2

3 说明

如果scheme、netloc和path在新的链接里不存在,就予以补充;如果新的链接存在,就使用新的链接的部分。而base_url中的params、query和fragment是不起作用的。

五 urlencode()

1 代码

from urllib.parse import urlencode
# 声明了一个字典来将参数表示出来
params = {
    'name': 'germey',
    'age': 22
}
base_url = 'http://www.baidu.com?'
# urlencode将参数序列化为GET请求参数
url = base_url + urlencode(params)
print(url)

2 运行结果

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_1_3.py
http://www.baidu.com?name=germey&age=22

3 说明

有时为了更加方便地构造参数,我们会事先用字典来表示。要转化为URL的参数时,只需要调用urlencode方法即可。

六 parse_qs()

1 代码

from urllib.parse import parse_qs

query = 'name=germey&age=22'
# 我们有一串GET请求参数,利用parse_qs()方法,就可以将它转回字典
print(parse_qs(query))

2 运行结果

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_1_3.py
{'name': ['germey'], 'age': ['22']}

七 parse_qsl()

1 代码

from urllib.parse import parse_qsl

query = 'name=germey&age=22'
# 它用于将参数转化为元组组成的列表
print(parse_qsl(query))

2 运行结果

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_1_3.py
[('name', 'germey'), ('age', '22')]

3 说明

运行结果是一个列表,而列表中的每一个元素都是一个元组,元组的第一个内容是参数名,第二个内容是参数值。

八 quote()

1 代码

from urllib.parse import quote

keyword = '壁纸'
# quote将内容转化为URL编码的格式。这个方法可以将中文字符转化为URL编码
url = 'https://www.baidu.com/s?wd=' + quote(keyword)
print(url)

2 运行结果

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_1_3.py
https://www.baidu.com/s?wd=%E5%A3%81%E7%BA%B8

九 unquote()

1 代码

from urllib.parse import unquote

url = 'https://www.baidu.com/s?wd=%E5%A3%81%E7%BA%B8'
# unquote()方法,它可以进行URL解码
print(unquote(url))

2 运行结果

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_1_3.py
https://www.baidu.com/s?wd=壁纸

 

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