在Python 2 中,有urllib 和 urllib 2 两个库来实现请求的发送。而在Python 3 中,已经不存在 urllib 2 了,统一为 urllib 。urllib 库是Python 内置的请求库,不需要额外安装就能使用;它包含四个模块,即request、error、parse、robotparser 。
request 是最基本的 HTTP 请求库,可以用来模拟发送请求,只需要给库方法传入URL以及额外的参数,就可以模拟实现这个过程了;
error 是异常处理模块,如果出现请求错误,它能够捕获这些异常,然后进行重试或其他操作以保证程序不会意外终止;
parse 是一个提供URL处理方法的工具模块,比如拆分、解析以及合并等;
robotparser 主要用来识别网站的 robot.txt 文件,然后判断该网站是否能爬,哪些内容能爬。
1. urlopen()
urllib.request 模块提供了最基本的构造HTTP请求方法,利用它可以模拟浏览器的一个请求发起过程,同时它还带有处理授权验证(authentication)、重定向(redirection)、浏览器Cookies以及其他内容。
下图以Python官网为例,将网页源代码抓取下来:
利用最基本的urlopen()方法,可以完成最基本的简单网页的GET请求抓取;如果请求中需要加入 Headers 等信息,就可以利用更强大的 Request 类来构建。
Request 的构造方法为:class urllib.request.Request(url,data=none,headers={},origin_req_host=None,unverifiable=False,method=None)
第一个参数url用于请求URL,这是必传参数。第三个参数headers是一个字典,它就是请求头,在构造请求头时可以通过headers参数直接构造,也可以通过调用请求实例的add_header()方法添加;添加请求头最常用的方法是通过修改User-Agent 来伪装浏览器,默认的 User-Agent 是 Python-urllib。