urllib中包括了四个模块:
可以用来发送request和获取request的结果
包含了 产生的异常
用来解析和处理URL
用来解析页面的robots.txt文件
在之前内容中,我们只涉及一些相对简单的操作,但是现实操作中,可能会有更高要求的使用,比如Cookies处理,代理设置等等,我们该怎么办呢?
代理设置
爬虫固然很好用,但是一般网站都会采取一些反爬措施,这时候就有必要了解一下代理了,HTTP协议(三)之代理。
了解了基本原理后,我们就直接上代码
然后,使用 生成一个代理处理器,在处理器的基础上新建一个 ,使用opener的 方法发送一个请求,和之前使用的 方法类似。
于是,我们同样可以得到:
如果你的IP被某个网站封了,不妨采用这种方法再试试!
Cookies
首先声明一个CookieJar对象,接下来我们就需要利用HTTPCookieProcessor来构建一个handler,最后利用build_opener()方法构建出opener,执行open()函数。
执行结果如下:
输出了Cookies.
关于urllib.request模块的更多内容,可以查看:https://docs.python.org/3.6/library/urllib.request.html#module-urllib.request
异常处理URLError
通常引起URLError的原因是:无网络连接(没有到目标服务器的路由)、访问的目标服务器不存在。在这种情况下,异常对象会有reason属性(是一个(错误码、错误原因)的元组)。
捕获到了错误:
HTTPError
每一个从服务器返回的HTTP响应都有一个状态码。其中,有的状态码表示服务器不能完成相应的请求,默认的处理程序可以为我们处理一些这样的状态码(如返回的响应是重定向,urllib会自动为我们从重定向后的页面中获取信息)。有些状态码,urllib模块不能帮我们处理,那么urlopen函数就会引起HTTPError异常,其中典型的有404/401。
HTTPError异常的实例有整数类型的code属性,表示服务器返回的错误状态码。
urllib模块默认的处理程序可以处理重定向(状态码是300范围),而且状态码在100-299范围内表示成功。因此,能够引起HTTPError异常的状态码范围是:400-599.
当引起错误时,服务器会返回HTTP错误码和错误页面。你可以将HTTPError实例作为返回页面,这意味着,HTTPError实例不仅有code属性,还有read、geturl、info等方法。
更多的内容,请大家查看官方文档!
以上。
领取专属 10元无门槛券
私享最新 技术干货