urllib库是python爬虫中的常用库,这个库来说,我们不需要关心请求的链接是什么,需要传的参数是什么,以及如何设置可选的请求头就好了,不用深入到底层去了解它到底是怎样的传输和通信的。有了它,两行代码就可以完成一个请求和相应的处理过程,得到网页。
urllib的模块
urllib包含4个模块:
request
:它是最基本的HTTP请求模块,可以用了模拟发送请求
error
:异常处理模块,如果出现请求错误,我们可以捕获这些异常,然后进行重试或其他操作以保证程序不会意外终止。
parse
:一个工具模块,提供了许多URL处理方法,比如拆分、解析、合并等。
rebotparser
:主要是用来识别网站的rebots.txt文件,然后判断哪些网站可以爬,哪些网站不可以爬,实际用的不多。
Request
我们知道利用 urlopen()方法可以实现最基本请求的发起,但这几个简单的参数并不足以构建一
个完整的请求。
如果请求中需要加入 Headers等信息,就可以利用更强大的 Request类来构建。 首先,我们用实例来感受一下 Request 的用法:
1 | import urllib.request |
可以发现,我们依然是用 urlopen()方法来发送这个请求,只不过这次该方法的参数不再是 URL, 而是一个 Request 类型的对象 。 通过构造这个数据结构,一方面我们可以将请求独立成一个对象,另 一方面可更加丰富和灵活地配置参数 。
下面我们看一下 Request可以通过怎样的参数来构造,它的构造方法如下:class urllib. request. Request (ur1, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
- 第一个参数 url用于请求 URL, 这是必传参数,其他都是可选参数。
- 第二个参数 data 如果要传,必须传 bytes (字节流)类型的 。 如果它是字典,可以先用 urllib.parse模块里的 urlencode()编码。
- 第三个参数 headers是一个字典,它就是请求头,我们可以在构造请求时通过 headers参数直 接构造,也可以通过调用请求实例的 add_header()方法添加。
添加请求头最常用的用法就是通过修改 User-Agent 来伪装浏览器,默认的 User-Agent 是 一’- Python-urllib,我们可以通过修改它来伪装浏览器 。 比如要伪装火狐浏览器,你可以把它设 E 置为 :
问ozilla/s.o (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11 - 第四个参数 origin_req_host指的是请求方的 host名称或者 IP地址。
- 第五个参数 unveri干iable表示这个请求是否是无法验证 的,默认是 False,意思就是说用户没
有足够权限来选择接收这个请求的结果。 例如,我们请求一个 HTML文档中的图片,但是我
们没有向动抓取图像的权限,这时 unverifiable 的值就是 True。 - 第六个参数 method是一个字符串,用来指示请求使用的方法,比如 GET、 POST和 PUT等。
例子
1 | url = 'http://httpbin.org/post' |
运行结果:
1 | respin is { |
高级用法
在上面的过程中,我们虽然可以构造请求,但是对于一些更高级的操作(比如 Cookies处理 、 代 理设置等),我们该怎么办呢?
接下来,就需要更强大的工具 Handler 登场了 。 简而言之,我们可以把它理解为各种处理器,有 专门处理登录验证的,有处理 Cookies 的,有处理代理设置的 。 利用它们,我们几乎可以做到 HTTP 请求中所有的事情 。
首先,介绍一下 urllib.request 模块里的 BaseHandler类,它是所有其他 Handler 的父类,它提 供了最基本的方法,例如 default_open()、 protocol_request()等。
接下来,就有各种 Handler 子类继承这个 BaseHandler类,举例如下 。
口 HITPDefaultErrorHandler:用于处理HTTP响应错误,错误都会抛出 HTTPError类型的异常。 口 HTTPRedirectHandler:用于处理重定向 。
口 HTTPCookieProcessor: 用于处理 Cookies。
口 ProxyHandler:用于设置代理 , 默认代理为空 。
口 HπPPasswordMgr:用于管理密码,它维护了用户名和密码的表。
口 HTTPBasicAuthHandler: 用于管理认证,如果一个链接打开时需要认证,那么可以用它来解
决认证问题 。
原文链接: http://yoursite.com/2019/02/25/爬虫系列-urllib的使用/
版权声明: 转载请注明出处.