进阶操作3 添加Proxy 代理
在之前学习了如何添加headers 来伪装浏览器,下面简单讲一下如何通过创建"处理器" 来添加Proxy代理, 回顾之前的第一章,我们用的urlopen()方法来直接请求网页,但是urlopen()这个函数中并没有添加代理的方法,因此需要另辟蹊径。
添加handler 的方法添加Proxy
爬虫的四个步骤还是那样,
第一步 添加要爬取网页的url 地址
第二步 发送数据请求
第三步 分析数据
第四部保存
# 还是引用urllib.request 库文件
import urllib.request
# 第一步 添加url 地址
url = "http://www.baidu.com"
# 第二步 使用代码发送请求
# 2.1 创建请求对象
# 在这里不能简单的创建Request 对象,因为urllib.request.Request 中创建的请求对象只包含url, 和header
'''
这里是urllib.request.Request 的定义 可以看出 里边有个data, 和headers.等信息 但是并没有包含我们需要的Proxy 代理信息
class Request:
def __init__(self, url, data=None, headers={},
origin_req_host=None, unverifiable=False,
method=None):
'''
# 因此我们需要用另一种方式创建一个对象。---handler
# 3. 创建handler 并添加代理 可以将其理解为也是一个请求的人, 简称请求对象, handler 是这个人解决问题的方法。
# 3.1 创建Proxy 代理
Proxy = {
# 在这里我们还是用字典的方式对其进行存储,但是并不意味着可能下边的函数可能接受这个字典,有时候可能需要对其进行转义
'http': 'http://192.168.121.101:8080', # 前边是协议,后边是代理的ip地址和端口号, 可以添加多个
}
# 创建可添加代理的handler 并传递参数Proxy
proxy_handler = urllib.request.ProxyHandler(Proxy)
# 创建好handler 之后 也就是创建好解决问题的方法之后,要把这个方法交给另一个对象, 创建opener
opener = urllib.request.build_opener(proxy_handler)
# 创建好opener 之后就相当于一个request,请求对象,我们通过这个opener 来打开网页, 获取相应
response = opener.open(url)
# 到这里就回到了以前的步骤
data = response.read().decode('utf-8')
print(data)