爬虫自定义创建Opener

爬虫库中的urllib.request.urlopen 可以创建一个opener,但他是特殊的opener,是模块自动帮我们创建好的

为什么要自定义一个Opener呢?

urlopen() 方法不支持 代理、 Cookie、 和其他的http/https等的高级功能

代理:如果一直用一台电脑去访问某个网页,IP地址是一样的,服务器会捕获这个消息,阻挡你的访问;但添加代理后可以使用其他的IP地址来访问这个网页,没有办法通过IP地址追踪。

要支持更高级的打开功能,就要自定义一个Opener

创建方式:

from urllib import request

#构建HTTP处理器对象(专门处理HTTP请求的对象)
http_hander = request.HTTPHandler()

#创建一个自定义Opener对象
opener = request.build_opener(http_hander)

#把自定义的opener设置为全局,这样用urlopen发送的请求也会使用自定义的opener
request.install_opener(opener)

header = {
    'user-Agent':'Mozilla/5.0 (Linux;\
    U; Android 8.1.0; zh-cn; BLA-AL00 \
    Build/HUAWEIBLA-AL00) AppleWebKit/537.36 \
    (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 \
    MQQBrowser/8.9 Mobile Safari/537.36'
    
}
#创建自定义请求对象
REQ = request.Request('http://www.baidu.com', headers=header)

#此时使用的是自定义的全局的opener
reponse = request.urlopen(REQ).read()
print(reponse)

反爬虫机制:

1.userAgent;
2.根据IP地址

代理

免费代理IP地址:西刺代理

from urllib import request
import random

# proxyList = [{"http":"ip地址:端口号"}]
# 117.88.177.101:3000
proxyList = [{"http":"117.88.177.101:3000"}{……}]

proxy = random.choice(proxyList)

#创建代理对象
proxyHandler = request.ProxyHandler(proxy)

#创建自定义的opener对象
opener = request.build_opener(proxyHandler)

#创建请求对象
req = request.Request("http://www.google.cn")

#打开并阅读
res = opener.open(req).read()

print(res)

步骤

1、使用相关的 Handler处理器 来创建特定功能的处理器对象;
2、通过 request.build_opener()方法使用这些处理器对象,创建自定义opener对象;
3、使用自定义的opener对象,调用open()方法发送请求。

注意

如果程序里所有的请求都使用自定义的opener,可以使用request.install_opener() 将自定义的 opener 对象 定义为 全局opener,表示如果之后凡是调用urlopen,都将使用这个opener

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值