首页 > 编程语言 > 详细

Python爬虫之urllib.parse详解

时间:2019-05-20 16:20:08      阅读:138      评论:0      收藏:0      [点我收藏+]

Python爬虫之urllib.parse

转载地址

Python 中的 urllib.parse 模块提供了很多解析和组建 URL 的函数。

解析url

解析url( urlparse() )

urlparse() 函数可以将 URL 解析成 ParseResult 对象。对象中包含了六个元素,分别为:

协议(scheme) 
域名(netloc) 
路径(path) 
路径参数(params) 
查询参数(query) 
片段(fragment)

 

from urllib.parse import urlparse

url=https://blog.csdn.net/xc_zhou/article/details/80907101

parsed_result=urlparse(url)

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(username:, parsed_result.username)
print(password:, parsed_result.password)
print(hostname:, parsed_result.hostname)
print(port    :, parsed_result.port)

结果为:

parsed_result 包含了 6 个元素
ParseResult(scheme=http, netloc=user:pwd@domain:80, path=/path, params=params, query=query=queryarg, fragment=fragment)
scheme  : http
netloc  : user:pwd@domain:80
path    : /path
params  : params
query   : query=queryarg
fragment: fragment
username: user
password: pwd
hostname: domain
port    : 80

 

 

解析url( urlsplit() )

 urlsplit() 函数也能对 URL 进行拆分,所不同的是, urlsplit() 并不会把 路径参数(params) 从 路径(path) 中分离出来。
当 URL 中路径部分包含多个参数时,使用 urlparse() 解析是有问题的

这时可以使用 urlsplit() 来解析:

from urllib.parse import urlsplit
url=http://user:pwd@domain:80/path1;params1/path2;params2?query=queryarg#fragment

split_result=urlsplit(url)

print(split_result)
print(split.path    :, split_result.path)
# SplitResult 没有 params 属性

结果为:

SplitResult(scheme=http, netloc=user:pwd@domain:80, path=/path1;params1/path2;params2, query=query=queryarg, fragment=fragment)
split.path    : /path1;params1/path2;params2

 

解析url(urldefrag())

from urllib.parse import urldefrag

url = http://user:pwd@domain:80/path1;params1/path2;params2?query=queryarg#fragment

d = urldefrag(url)
print(d)
print(url     :, d.url)
print(fragment:, d.fragment)

结果为:

DefragResult(url=http://user:pwd@domain:80/path1;params1/path2;params2?query=queryarg, fragment=fragment)
url     : http://user:pwd@domain:80/path1;params1/path2;params2?query=queryarg
fragment: fragment

 

 

组建URL

组建url(urlunparse())

urlunparse()接收一个列表的参数,而且列表的长度是有要求的,是必须六个参数以上,否则抛出异常。

from urllib.parse import urlunparse
url_compos = (http, user:pwd@domain:80, /path1;params1/path2, params2, query=queryarg, fragment)
print(urlunparse(url_compos))

结果为:

http://user:pwd@domain:80/path1;params1/path2;params2?query=queryarg#fragment

 

 

组建url(urljoin())

urljoin()将两个字符串拼接成url,

from urllib.parse import urljoin
# 连接两个参数的url, 将第二个参数中缺的部分用第一个参数的补齐,如果第二个有完整的路径,则以第二个为主
print(urljoin(https://movie.douban.com/, index))
print(urljoin(https://movie.douban.com/, https://accounts.douban.com/login))

结果为:

https://movie.douban.com/index
https://accounts.douban.com/login

 

 

查询参数的构造与解析

 

使用 urlencode() 函数可以将一个 dict 转换成合法的查询参数:

from urllib.parse import urlencode

query_args = {
    name: dark sun,
    country: 中国
}

query_args = urlencode(query_args)
print(query_args)

结果为:

name=dark+sun&country=%E4%B8%AD%E5%9B%BD

 

使用 parse_qs() 来将查询参数解析成 dict。

from urllib.parse import urlencode
from urllib.parse import parse_qs
query_args = {
    name: dark sun,
    country: 中国
}

query_args = urlencode(query_args)
print(query_args)
print(parse_qs(query_args))

结果为:

name=dark+sun&country=%E4%B8%AD%E5%9B%BD
{name: [dark sun], country: [中国]}

 

quote()与unquote()

quoteI()对特殊字符进行转义unquote()则相反。

from urllib.parse import quote
from urllib.parse import unquote
test1 = quote(中文)
print(test1)
test2 = unquote(test1)
print(test2)

结果为:

%E4%B8%AD%E6%96%87
中文

 

Python爬虫之urllib.parse详解

原文:https://www.cnblogs.com/-wenli/p/10894562.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!