Python爬虫核心知识-第二章:2.2 爬虫urllib.parse模块

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5YWo5p2R5pyA5aW95o2J55qE576K,size_20,color_FFFFFF,t_70,g_se,x_16

 

 Python爬虫核心知识

第二章:2.2 爬虫urllib.parse模块

 

 2.2 爬虫urllib.parse模块

Python中的urllib.parse模块中,提供了很多用来解析和重组URL的函数:

目录

 Python爬虫核心知识

第二章:2.2 爬虫urllib.parse模块

 2.2 爬虫urllib.parse模块

2.2.1 urllib.parse.urlparse()

2.2.2 urllib.parse.urlunparse()

2.2.3 urllib.parse.urlsplit()

2.2.4 urllib.parse.urlunsplit()

2.2.5 urllib.parse.urljoin()

 2.2.6 urllib.parse.quote()

2.2.7 urllib.parse.unquote()

2.2.8 urllib.parse.urlencode()

2.2.9 urllib.parse.parse_qs()

2.2.10 urllib.parse.parse_qsl()


2.2.1 urllib.parse.urlparse()

url:urllib.parse.urlparse(url, scheme='', allow_fragments=True)

        urlparse() 函数可以将 URL 解析成 ParseResult 对象,实现url的识别和分段。

urlparse
定义:def urlparse(url, scheme=”, allow_fragments=True)
将url拆分成六大组件

 

URL的标准链接格式为:scheme://netloc/path;params?query#fragment 基础部分  scheme 协议 基础部分 netloc 域名 基础部分 path 路径 附加部分 params 路径参数 附加部分 query 查询参数 附加部分 fragment 片段

        

 

   

 

 

 

 

 

 

  案例如下:

from urllib.parse import urlparse

url = 'https://blog.csdn.net/crestroncarter/article/details/124376995?spm=1001.2014.3001.5501'

parsed_result = urlparse(url)

print('parsed_result 的数据类型:', type(parsed_result))
print('parsed_result 包含了: ', len(parsed_result), '个元素')
print(parsed_result)

print('scheme  :', parsed_result.scheme)
print('netloc  :', parsed_result.netloc)
print('path    :', parsed_result.path)
print('params  :', parsed_result.params)
print('query   :', parsed_result.query)
print('fragment:', parsed_result.fragment)
print('hostname:', parsed_result.hostname)

  输出结果如下:

parsed_result 的数据类型: <class 'urllib.parse.ParseResult'>
parsed_result 包含了:  6 个元素
ParseResult(scheme='https', netloc='blog.csdn.net', path='/crestroncarter/article/details/124376995', params='', query='spm=1001.2014.3001.5501', fragment='')
scheme  : https
netloc  : blog.csdn.net
path    : /crestroncarter/article/details/124376995
params  : 
query   : spm=1001.2014.3001.5501
fragment: 
hostname: blog.csdn.net

进程已结束,退出代码0

2.2.2 urllib.parse.urlunparse()

        urlunparse()是urlparse()方法的反向操作,将各部分组合为url。

定义:def urlunparse(components)
功能:将拆分的组件合并为url

from urllib.parse import urlunparse

#必须按顺序设置6个部分的值,并且放置到列表中,该方法不会自动进行url转码
url_list = ['http','www.baidu.com','index.html','user= haoweixl','a=6','comment']

print(urlunparse(url_list))

输出结果如下:

http://www.baidu.com/index.html;user= haoweixl?a=6#comment

2.2.3 urllib.parse.urlsplit()

        urlsplit() 函数也能对 URL 进行拆分,所不同的是, urlsplit() 并不会把 路径参数(params) 从 路径(path) 中分离出来,只返回五个参数值,params会合并到path中。
因此,使用urlsplit()解析URL的结果只有5部分。

定义:urlsplit(url, scheme=”, allow_fragments=True)
返回:(scheme, netloc, path, query, fragment) 比urlparse少个params

url1='http://www.baidu.com/book/index.html;user?id=5#comment'

result1 = urllib.parse.urlsplit(url1)

#path='/book/index.html;user'

2.2.4 urllib.parse.urlunsplit()

        与urlsplit()相反的操作,urlunsplit将5个部分的值进行合并。

data = ["http","www.baidu.com","index.html;user","a=10","comment"]
print(urllib.parse.urlunsplit(data))

2.2.5 urllib.parse.urljoin()

        URL的6个组成部分中,有3个基础部分:协议(scheme)、域名(netloc)、路径(path),和3个附加部分:路径参数(param)、查询参数(query)、片段(fragment)。

定义:def urljoin(base, url, allow_fragments=True)

如果url是完整的url路径直接返回

#导入parse模块
from urllib import parse

#相对路径
parse.urljoin('http://www.baidu.com/doc/article.html','excel/1')
# result: http://www.baidu.com/doc/excel/1

parse.urljoin('http://www.baidu.com/doc/article.html','../excel/1')
# result: http://www.baidu.com/excel/1

#绝对路径
parse.urljoin('http://www.baidu.com/doc/abc/article.html','/excel/1')
#result: http://www.baidu.com/excel/1

 2.2.6 urllib.parse.quote()

        将内容转化为 URL 编码的格式。当 URL 中带有中文参数时,可以将中文字符转化为 URL 编码。

定义:quote(string, safe=’/’, encoding=None, errors=None)

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=%E4%B8%AD%E5%9B%BD

2.2.7 urllib.parse.unquote()

        有了quote方法转换,也需要有unquote方法对URL进行解码。

        实例如下:

from urllib.parse import unquote  
url = 'https://www.baidu.com/s?wd=%E4%B8%AD%E5%9B%BD'  
print(unquote(url))

        运行结果:

https://www.baidu.com/s?wd=中国

2.2.8 urllib.parse.urlencode()

        将字典参数序列化为 GET 请求参数

定义:urlencode(query, doseq=False, safe=”, encoding=None, errors=None,quote_via=quote_plus)

功能:将字典形式的数据转化成查询字符串

参数的含义:
query:需要转化的字典数据
doseq:如果字典的某个值是序列的话是否解析,deseq值为False不解析doseq的值为True的时候解析
safe:那些字符串不需要编码
encoding:要转化成的字符串的编码
quote_via:使用quote编码还是qutoe_plus编码,默认quote_plus也就是空格被转化成+号

        实例如下:

from urllib.parse import urlencode
data = {
    'ie': 'utf-8',
    'wd': 'TRHX',
}
base_url = 'http://www.baidu.com?'
url = base_url + urlencode(data)
print(url)

        运行结果:

http://www.baidu.com?ie=utf-8&wd=TRHX

2.2.9 urllib.parse.parse_qs()

        与 urlencode() 相反,可以将一串GET请求参数反序列化,转换为字典。

        实例如下: 

from urllib.parse import parse_qs
query = 'name=TRHX&age=20'
print(parse_qs(query))

        运行结果:

{'name': ['TRHX'], 'age': ['20']}

2.2.10 urllib.parse.parse_qsl()

        与parse_qs()类似,不同的是将参数转化为元组组成的列表。

        实例如下:

from urllib.parse import parse_qsl
query = 'name=TRHX&age=20'
print(parse_qsl(query))

        运行结果:

[('name', 'TRHX'), ('age', '20')]

 

 

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全村最好捉的羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值