python爬虫系列(四):请求伪装的做法

(一):Handler 处理器和自定义的Opener

之前我们,一直使用的是request.urlopen去获取响应信息。如果想要添加代理的话,cookie等其他的http/https高级的功能。我们需要自己去实现一体opener:
1.使用相关的Handler处理器来创建特定功能的处理器对象。
2.然后通过request.build_opener()去定义
3.使用自定义的opener对象,调用open()方法发送请求
4.可以设置成全局的opener,之后调用,urlopen(),都将使用URlopen.

(二):Proxyhandler处理器设置(代理IP)

基本用法很简单看一下代码就能理解了:

from urllib import request
#定义了两个proxy_handler对象
httpproxy_handler = request.ProxyHandler({"http" : "0.0.0.0:80"})
nullproxy_handler = request.ProxyHandler({})

proxySwitch = True #定义一个代理开关

# 通过request.build_opener()方法使用这些代理Handler对象,创建自定义opener对象
# 根据代理开关是否打开,使用不同的代理模式
if proxySwitch:  
    opener = request.build_opener(httpproxy_handler)
else:
    opener = request.build_opener(nullproxy_handler)

(三):CookieJar库和HTTPCookieProcess处理器

cookierjar模块:主要用于存储cookier的对象

HTTPCookieProcessor处理器:主要作用是处理这些cookie的对象。并构建handler对象。
这里必须要注意的是:python2.x 和python3.x 是从不同的库里面导入的。
详细请见我的爬虫系列一: http://blog.csdn.net/little_monkey1223/article/details/78035598

(四):代码演示

from urllib import request
import http.cookiejar

url = "http://news.163.com/16/0825/09/BVA8A9U500014SEH.html"
headers = {
    'Accept':'text/html,application/xhtml_+xml,application/xml;q=0.9',
    'User-Agent':'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)',
    'Connection':'keep-alive',
    'referer':'http://www.163.com/'
}
cjar = http.cookiejar.CookieJar()
proxyIp = request.ProxyHandler({'http':'0.0.0.0:80'})
opener = request.build_opener(request.HTTPHandler,request.HTTPCookieProcessor(cjar),proxyIp)
#因为addheaders识别的类型是列表所以要遍历添加
headall = []
for key,value in headers.items():
    item = (key,value)
    print(item)
    headall.append(item)
#设置请求浏览器
opener.addheaders = headall
#设置成全局的opener对象,以便于下面请求的反复使用。
request.install_opener(opener)
#这里的read跟requests响应的text作用是一样的。
data = request.urlopen(url).read()
#写入文件
fhandle = open('1.html','wb')
fhandle.write(data)
fhandle.close()
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值