python中urllib.parse_Python爬虫之urllib.parse详解

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

中文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值