爬虫基本库的使用(urllib)

urllib库

是Python内置的HTTP请求库,含有4个模块

request 是最基本的HTTP请求模块,可以用来模拟发送请求
error 异常处理模块,如果出现请求错误,可以捕获异常
然后进行重试或其他操作以保证程序不会意外终止
parse 一个工具模块,提供了许多URL处理方法
robotparser 主要是用来识别网站的robots.txt文件
判断哪些网站可以爬,哪些网站不能爬

urllib.request.urlopen 该方法返回的是一个HTTPResponse类型对象

urllib.request.urlopen(url,data=None,[timeout,]*,cafile=None,capath=None,cadefault=False,context=None)

此API官网参考链接
参数
data
如果它是字节流编码格式内容(bytes类型),需要通过bytes()方法转化
如果传递了这个参数,它的请求方式不再是GET方式,而是POST方式
timeout
用于设置超时时间,单位为秒,如果请求超出了设置的这个时间,还没有得到响应,就会抛出异常
默认使用全局默认时间
cafile
指定CA证书
capath
指定CA路径
cadefault
已经被弃用了,默认值False
context
必须是ssl.SSLContext类型,用来指定SSL设置

提供了最基本的构造HTTP请求的方法,利用它可以模拟浏览器的一个请求发起的过程,同时还带有处理授权验证(authentication),重定向(redirection),浏览器Cookies以及其他内容
包含的属性:
read() 调用该方法可以得到返回的网页内容
status 得到返回结果的状态码
getheaders() 得到响应的头信息
getheader(name) 该方法传递一个‘name’获取响应头中的’name‘值
readinto(),fileno(),
msg,version,reason,debuglevel,closed


urllib.request.Request 因为urlopen()方法可以实现最基本请求的发起,但并不足以构建一个完整的请求,若请求中需要加入Headers等信息,需要利用Request类来构建

urllib.request.Request(url,data=None,headers={},origin_req_host=None,unverifiable=False,method=None)

参数
url
用于请求URL,必传参数
data
传入必须是bytes(字节流)类型,若是字典,需使用urllib.parse.urlencode() 进行编码
headers
是一个字典,它是请求头,可以通过调用请求实例 add_header() 方法添加
origin_req_host
指的是请求方的host名称或IP地址
unverifiable
标识这个请求是否是无法验证的
默认False, 是说用户没有足有权限来选择接受这个请求的结果
method
是一个字符串,用来指示请求使用的方法


urllib.parse.urlencode()该方法将参数字典转化未字符串,第二个参数指定编码格式


Handler

可理解未各种处理器,有专门处理登录验证的
urllib.request模块里的BaseHandler类,它是所有其他Handler的父类
OpenerDirector类,也可称为 Opener
HTTPDefaultErrorHandler 用于处理HTTP响应错误,错误都会抛出HTTPError类型的异常
HTTPRedirectHandler 用于处理重定向
HTTPCookieProcessor 用于处理Cookies
ProxyHandler 用于设置代理,默认代理为空,其参数是一个字典,键名是协议类型(例如HTTP或者HTTPS),
       键值是代理链接,可以添加多个代理
HTTPPasswordMgr 用于管理密码,它维护了用户名和密码的表
HTTPBasicAuthHandler 用于管理认证,如果一个链接打开时需要认证,那么可以用它来解决认证问题

build_opener()方法构建一个Opener


处理异常

error.URLError()
URLError类来自urllib库的error模块,它继承自OSError类,是error异常模块的基类,由request模块生的异常都可以通过捕获这个类来处理
程序不会直接报错,会输出Not Found,通过此方法可以避免程序异常终止,同时得到了有效地处理


error.HTTPError()
是URLError的子类,专门用来处理HTTP请求错误,如认证请求失败,有三个属性
code 返回HTTP状态码
reason 同父类一样,返回错误的原因; 返回的不一定是字符串,也可能是一个对象
headers 返回请求头


解析链接

urlparse()
该方法可以实现URL的识别和分段
输出的是一个ParseResult 类型的对象
API

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

参数
urlstring 必填,即待解析的URL
sheme 默认的协议(比如http或者https) 只有在URL中不包含scheme信息时有效
allow_fragments 即是否忽略fragment; 如果被设置成False,fragment部分会被忽略

scheme 协议代表 : // 前面的内容
netloc 域名 第一个 / 符号前面的内容
path 访问路径 域名后面的是访问路径
params 参数 分号 ; 前面的是参数
query 查询条件 问号 ? 后面的是查询条件
一般用作GET类型的URL
fragment 锚点 井号 # 后面的内容是锚点
用于直接定位页面内部的下拉位置

urlsplit()
与 urlparse() 方法相似,返回5个结果,将params合并到path中
返回的是一个元组类型,可索引获取其值


urlunparse()
实现了URL的构造
参数是一个可迭代对象,但长度必须是6,否则会爬出参数数量不足或者过多的问题


urlunsplit()
实现了URL的构造
蚕食是一个可迭代对象(例如元组或列表),长度是5


urljoin()
生成链接的一种方法
参数一: 提供一个base_url(基础链接),参数二:新的链接
该方法会分析 base_url 中的scheme, netloc, path 这三个内容并对参数二新链接缺失的部分进行补充,最后返回结果


urlencode()
该方法可将字典序列化为GET请求参数


parse_qs()
可将一串GET请求参数,转化为字典


parse_qsl()
将参数转化为元组组成的列表


quote()
该方法将内容转化为URL编码的格式


unquote()
该方法可进行URL解码


猜你喜欢

转载自blog.csdn.net/Mikowoo007/article/details/85345608