Python 爬虫从入门到进阶之路(四)

之前的文章我们做了一个简单的例子爬取了百度首页的 html,我们用到的是 urlopen 来打开请求,它是一个特殊的opener(也就是模块帮我们构建好的)。但是基本的 urlopen() 方法不支持代理、cookie等其他的HTTP/HTTPS高级功能,所以我们需要用到 Python 的 opener 来自定义我们的请求内容。

具体步骤:

Handler处理器
build_opener()
open()

我们先来回顾一下使用 urlopen 获取百度首页的 html 代码实例:

 1 # 导入urllib 库
 2 import urllib.request
 3 
 4 # url 作为Request()方法的参数,构造并返回一个Request对象
 5 request = urllib.request.Request("http://www.baidu.com")
 6 # Request对象作为urlopen()方法的参数,发送给服务器并接收响应
 7 response = urllib.request.urlopen(request)
 8 # 类文件对象支持 文件对象的操作方法,如read()方法读取文件全部内容,返回字符串
 9 html = response.read().decode("utf-8")
10 # 打印字符串
11 print(html)

接下来我们看一下使用 opener 的处理方式:

1 from urllib import request
 2 
 3 # 构建一个HTTPHandler 处理器对象,支持处理HTTP请求
 4 http_handler = request.HTTPHandler()
 5 
 6 # 构建一个HTTPSHandler 处理器对象,支持处理HTTPS请求
 7 # http_handler = request.HTTPSHandler()
 8 
 9 # 调用 request.build_opener()方法,创建支持处理HTTP请求的opener对象
10 opener = request.build_opener(http_handler)
11 
12 # 构建 Request请求
13 request = request.Request("http://www.baidu.com/")
14 
15 # 调用自定义opener对象的open()方法,发送request请求
16 response = opener.open(request)
17 
18 # 获取服务器响应内容
19 html = response.read().decode("utf-8")
20 
21 # 打印字符串
22 print(html)

在上面的第一段代码中,我们是通过直接 import urllib.request 来导入我们需要的包,这样当我们要使用时需要   urllib.request 来使用,第二段代码我们是通过   from urllib import request 来导入我们需要的包,这样当我们使用时直接   request 来使用就可以了。

第一段代码在前面的文章中我们已经说过了,这里就不多做解释了。

第二段代码中,我们使用了 opener 的方法来处理我们的请求,这样我们就可以对代理,cookie 等做进一步的操作,后续文章会讲到。最终结果如下:

在 http_handler = request.HTTPHandler() 中,我们还可以添加一个   debuglevel=1 参数,会将 Debug Log 打开,这样程序在执行的时候,会把收包和发包的报头在屏幕上自动打印出来,方便调试,有时可以省去抓包的工作。

代码如下:

 1 from urllib import request
 2 
 3 # 构建一个HTTPHandler 处理器对象,支持处理HTTP请求
 4 http_handler = request.HTTPHandler(debuglevel=1)
 5 
 6 # 构建一个HTTPHandler 处理器对象,支持处理HTTPS请求
 7 # http_handler = request.HTTPSHandler(debuglevel=1)
 8 
 9 # 调用 request.build_opener()方法,创建支持处理HTTP请求的opener对象
10 opener = request.build_opener(http_handler)
11 
12 # 构建 Request请求
13 request = request.Request("http://www.baidu.com/")
14 
15 # 调用自定义opener对象的open()方法,发送request请求
16 response = opener.open(request)
17 
18 # 获取服务器响应内容
19 html = response.read().decode("utf-8")
20 
21 # 打印字符串
22 print(html)
PYthon学习qq群:881982657  领取python自动化编程资料教程

输出结果如下:

可以看出在响应结果的时候会为我们打印输出一些请求信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值