请求库之urllib

Posted on 2022-10-09 00:25  风云伴日斜  阅读(26)  评论(0编辑  收藏  举报

Urllib

request

Urlopen

Urlopen()来访问一个url,额外参数data可以用来设置url请求中的参数,timeout用来设置超时

Request对象

Urllib.request.Request对象,构建更强大的请求,可以设置请求头

Handler类

Urllib.request中还有各种handler类,借助handler使用build_opener()方法构建opener对象,使用opener.open()方法打开一个url,urlopen就是urllib库封闭好的opener对象,觉handler有

认证案例:

代理案例:

Cookie案例:

获取文本样式

存储为文件

可以对cookie对象使用load()方法读取本地的cookie文件

error

URLError

Error模块的基类,request模块的所有异常均可以使用这个类捕获,e.reason是产生异常的原因

HTTPError

URLError的子类,处理http异常,e.code返回状态码,e.reason同上,e.headers可以返回请求头

parse

Urlparse

参数有urlstring、scheme、allow_fragments

Scheme用于在url中没有协议部分时指定一个默认的类型,例如http或者https

Allow_fragments为false时忽略锚点部分

解析一个完整的url的每个部分

结果如下

Fragment为锚点用于定位

特殊情况:当url中不包含params和query时,fragment会被解析为path

结果ParseResult可能是一个namedtuple,可以使用索引的方式或者属性的方式获取内容

Urlunparse

Urlparse的对立方法,参数为一个可迭代对象,必须包含有url的6个部分,没有的部分可以用空字符串代替,不然会报错

结果如下:

Urlsplit

没有params部分的urlparse,params部分会合并到path部分、

Urlunsplit

类似于urlunparse方法

Urljoin

提供两个url参数分别为base_url和new_url,方法将分析base_url的scheme、netloc和path部分补全new_url缺失的部分,返回new_url

示例如下:

Urlencode

提供一个存储着query的dict,返回为get请求下的query序列样式

结果如下:

Parse_qs

反序列化get查询参数为dict

Parse_qsl

反序列化为元组组成的列表

Quote

将中文字符转化为url编码

结果如下:

其实也可以直接向url中加入中文然后经quote转化

Unquote

将url编码后的结果进行还原

结果如下:

Robotparser

RobotFileParser(url=’’)

只需要传入robots.txt的url即可,当然也可先声明对象后使用set_url()设置,下一步必须使用read()进行读取和分析,之后可以使用can_fetch()来判断是否可以抓取

Parse()传入robots.txt的某些行来进行分析,之后同样可以使用can_fetch()判断

Can_fetch(),参数为user-agent和要抓取的url,返回true或false

Read样例:

运行结果为True和False

Parse样例: