网络爬虫之urllib库详解

网络爬虫之urllib.parse详解

urllib库的简介

爬虫开发时,一般不会使用这个库,但是我们需要学习这个库。

urllib库简介
urllib是一个用来处理网络请求的python标准库,它包含4个模块

urllib.requests:请求模块,用于发起网络请求
urllib.parse:解析模块,用于解析
urllib.error:异常处理模块,用于处理request引起的异常
urllib.robotparse:用于解析robots.txt文件

urllib.parse作用简介

urllib.parse模块定义了一个标准接口,既可以把统一资源定位符(URL)解析为若干部分(通信协议,网络地址和路径等),也可以把各个部分重新组合成URL,还可以利用“基本URL”把相对路径转化为绝对路径。

urllib.parse模块设计之初就考虑到要兼容一系列和URL相关的RFC标准。目前能够支持的URL协议包括:file, ftp, gopher, hdl,http, https, imap, mailto, mms, nntp, prospero, rsync, rtsp, rtspu, sftp, shttp, sip, sips, snews, svn, svn+ssh, telnet, wais, ws, wss。

urllib.parse定义的函数主要分为两类:URL解析和URL转义
所以总而言之,urllib.parse是一个对url进行操作的包

下面我们来介绍下parse包里面所含有的几个功能

1.urlparse

from urllib.parse import urlparse
s=urlparse('https://www.csdn.net/?spm=1011.2124.3001.5359')#解析的网址
print(type(s),s)#打印类型和解析结果

看看打印结果:

<class 'urllib.parse.ParseResult'> ParseResult
(scheme='https',
 netloc='www.csdn.net',
 path='/',
 params='', 
 query='spm=1011.2124.3001.5359',
 fragment='')

分析下结果:

  • ParseResult这个类型对象,打印了六个部分结果:
  • scheme是协议,这里协议就是https
  • netloc是域名,域名是啥就步说了吧,
  • path是访问路径
  • params就是参数
  • query就是查询条件,一般用作get类型的url
  • fragment就是描点,用于定位页面内部下拉位置
  • 所以网址的标准链接格式就是:
scheme://netloc/path;params?query#fragment

这些能看懂一个网址什么组成的了吧

2.urlunparse

与第一个对立,他接受的参数是可迭代对象,对象长度必须是6

from  urllib.parse import urlunparse
data=['http','www.baidu.com','index.com','user','a=7','comment']
print(urlunparse(data))

结果如下:

http://www.baidu.com/index.com;user?a=6#comment
Process finishedwith exit code 0

这就构造了一个url,当然随便构造一个url是不能正常访问的。对比上面的urlparse,一个是拆分url,一个是构造url,哈哈

3.urlsplit

跟urlparse类似,返回结果只有五个,params合并到了path中

from urllib.parse import urlsplit
s=urlsplit('https://www.csdn.net/?spm=1011.2124.3001.5359')
print(type(s),s)

老规矩还是以CSDN为例子,看打印结果:

<class 'urllib.parse.SplitResult'> 
SplitResult(scheme='https',
 netloc='www.csdn.net', 
 path='/', 
 query='spm=1011.2124.3001.5359',
 fragment='')

但是呢,SplitResult是元组类型,可以通过索取获得想要的,不用都打印出来:

from urllib.parse import urlsplit
s=urlsplit('https://www.csdn.net/?spm=1011.2124.3001.5359')
# print(type(s),s)
print(s.path)
print(s.netloc)
print(s[1])
print(s[3])

这样打印结果如下:

4.urlunsplit()

跟上面那个方法类似,这个就是再把各个部分组合成完整的链接,长度必须是5,举例如下:

from urllib.parse import urlunsplit
data=['http','www.csdn.net','/','spm=1011.2124.3001.5359',' ']
print(urlunsplit(data))

根据前面打印拆分结果,我再给它复原了,运行结果如下,又得到csdn首页链接了

5.urljoin

就是对链接的补充合并,自己可以多打印几个试试

from urllib.parse import  urljoin
print(urljoin('http://www.baidu.com','index.html'))
print(urljoin('http://www.baidu.com','http://www.baidu.com/index.html'))

效果如下:

6.urlencode

跟上面的类似,也是用于构造url
例子如下:

from urllib.parse import urlencode
parms={
    'name':'chuan',
    'age':'20'
}
b_url='http://www.baidu.com?'
url=b_url+urlencode(parms)
print(url)

结果:

7.parse_qs

from urllib.parse import parse_qs
u='name=chuan&age=20'
print(parse_qs(u))

parse_qs作用就是把得到的get请求参数字符串转为字典,这样便于好看理解。前面都是有序列化,这个就是反无序化。

8.parse_sql

from urllib.parse import parse_qsl
u='name=chuan&age=20'
print(parse_qsl(u))


跟上面第七个方法类似,这个就是返回的列表,列表里装的元组,元组左边为名,右边为值

9.quote

from urllib.parse import quote
key='川川'
url='http://www.baidu.com/?wd='+quote(key)
print(url)

这个很常见,我的理解就是把中文转换为url格式。对中文进行编码。

10.unquote

from urllib.parse import unquote
url='http://www.baidu.com/?wd=%E5%B7%9D%E5%B7%9D'
print(unquote(url))

它就可以把被编码后的中文还原。

这个模块差不多就这些了,学习爬虫慢慢来,不要一蹴而就。有了这个模块就可以对url解析和构造了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值