大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学爬虫】专栏,帮助小白快速入门爬虫,本期为网络请求库的使用。
网络请求库概述
作为一名爬虫初学者,熟练使用各种网络请求库是一项必备的技能。利用这些网络请求库,我们可以通过非常简单的操作来进行各种协议的模拟请求。我们不需要深入底层去关注如何建立通信与数据如何传输,只需要调用各种网络请求库封装好的方法。Python提供了很多功能强大的网络请求库,如urllib、requests、等,下文中会对这些库做一一介绍。
urllib
安装与介绍
安装
urllib是Python的内置请求库,不需要再额外安装。
介绍
urllib库包含四个模块:
urllib.request: 向目标url发起请求并读取响应信息。
urllib.error: 负责异常处理,捕获urllib.request抛出的异常。
urllib.parse: 解析url,提供了一些url的解析方法。
urllib.robotparser: 解析网站robots.txt文件,判断网站是否允许爬虫程序进行采集。
使用方法
请求与响应
使用到了urllib.request模块中的urlopen方法来打开一个url并获取响应信息。urlopen默认返回的是一个方法得到它的明文信息。
设置请求头与参数
当请求需要设置请求头时,就需要用到urllib.request模块中的另一个方法Request,它允许传递如下几个参数:
url:目标url
data:请求参数,默认为None
headers:请求头信息,字典类型
origin_req_host:请求的主机地址
unverifiable:设置网页是否需要验证
method:请求方式
异常捕获
在发起请求时,可能会因为网络、url错误、参数错误等问题导致请求异常,程序报错。为了应对这种情况,我们需要添加异常处理功能。
requests
requests是Python爬虫开发中最常使用到的库,它提供了简单易用的API,使得在Python中发送模块更加简洁,使用更加方便。
安装与介绍
安装
requests是Python的第三方库,使用 pip install requests 进行安装
介绍
requests包含了许多模块,这里只介绍主要模块:
requests: 主模块,提供了HTTP请求方法。
requests.session: 会话模块,提供了Session类,用于多个请求中共享请求信息。
requests.adapters: 适配器模块,提供了不同协议的适配器类,用于处理不同协议的请求。
requests.cookie: Cookie模块,用于处理cookie信息。
requests.exceptions: 异常处理模块,用于处理请求中会出现的各种异常。
requests.status_codes: 状态码模块,提供了HTTP状态码常量和状态码解释。
使用方法
请求与响应
requests库发送请求非常简单,并支持多种请求方式,如:get、post、put、delete等。发起请求后requests会返回一个Response对象,可以使用多种方法来解析Response对象。
设置请求头与参数
requests中设置请求头可以通过headers参数来设置,headers是一个字典类型,键为请求头的字段名,值为对应请求头的值。
请求参数可以通过params方法进行设置,类型为字典。键为参数名,值为对应参数的值。
在网络请求中,携带的参数可以分为两个类型,它们在python中对应的字段名如下:
查询字符串参数: params
请求载荷: data/json
查询字符串参数params是拼接在url中的参数,常用于get请求,作为查询参数使用。而data与json一般使用与post请求中,它是要发送到服务器的实际数据。
Session的使用
当一个网站我们需要多次请求时,如我需要登录 -> 请求个人页面,在面对这种场景时,我们可以使用到Session方法。因为通过requests发送到的请求是独立,我们请求登录接口与请求个人页面之间是没有联系的,我们需要请求登录接口后获取它返回的cookie,然后设置cookie进行下一次请求。每次请求后都需要设置一次cookie,如果请求流程更多的话那么过程就会显得很繁琐。使用Session方法就能更好的模拟一次请求流程,不需要频繁的设置cookie。
Session的作用类似于浏览器中的cookie与缓存,它可以用于在多次请求中维护一些状态信息,避免重复发送相同的信息和数据,使用Session可以优化HTTP请求的性能与可维护性,它的使用也非常简单。
异常捕获
requests.exceptions 中提供了一系列请求异常。
ConnectTimeout:连接超时
ReadTimeout:服务器在指定时间内没有应答
Connecti:未知的服务器
ProxyError:代理异常
URLRequired:无效URL
TooManyRedirects:重定向过多
MissingSchema:URL缺失,如缺少:
InvalidSchema:提供的URL方案无效或不受支持
InvalidURL:提供的URL不知何故无效
InvalidHeader:提供的请求头无效
InvalidProxyURL:提供的代理URL无效
ChunkedEncodingError:服务器声明了编码分块,但发送了无效分块
ContentDecodingError:无法对响应信息解码
StreamConsumedError:此响应内容已被使用
RetryError:自定义重试逻辑错误
UnrewindableBodyError:请求在尝试倒带正文时遇到错误
错误
SSLError:发生SSL错误
Timeout:请求超时
前面讲到了requests库,它功能强大、使用简单,并且提供session会话模块,似乎requests库已经可以满足所有的应用场景了。但是requests也有一些致命的缺点:
同步请求,不支持异步,requests默认使用同步请求,在网络请求中同步请求到导致性能问题。
不支持。
而也是一个非常不错的选择。
安装与介绍
安装
进行安装
如果需要]
介绍
大同小异,因此不做介绍。
使用方法
实例。
Client作用与requests的session方法一致,但用法有些区别。
常见用法是使用上下文管理器,这样可以确保在请求完成后能够正确清理连接。 在设置请求头、传递参数时也有新的写法。
aiohttp
aio协议。
安装
aio 进行安装
使用
aio库的使用需要爬虫开发者自行斟酌。
websocket
Python websocket库是专门用于创建WebSocket服务的库。WebSocket是一种在客户端与服务端之间进行双向通信的协议,服务端可以向客户端推送数据,客户端也可以向服务端推送数据,这样就能实现数据的及时通信,它与通常使用在直播、弹幕等场景中。
安装
websocket是Python的内置库,不需要手动安装。当你在运行下文中的实例时,如果报错cannot import name 'WebSocketApp' from 'websocket',你可以卸载现有的websocket库,安装websocket-client==0.53.0版本的包。
使用
websocket用于客户端与服务端通信,爬虫开发中一般只会进行客户端的开发,所有这里只介绍客户端的开发。
使用WebSocketApp可以快速的建立一个Websocket连接。
可以看到websocket提供了四个模块:
on_message: 接收服务器推送来的数据
on_error: 连接异常时会触发on_error
on_close: 连接关闭时触发on_close
on_open: 连接开启时触发on_open
归纳
上文中讲到了urllib、requests、协议的库,使用也较为简单,可以在需要时再做了解。
发表评论 取消回复