urllib.request优缺点和cookie及proxy切换

本文详细介绍了urllib.request模块的优缺点,包括其对proxy和cookie的处理方式。讨论了如何在爬虫过程中切换cookie和proxy,并探讨了urllib.request在处理http 300重定向时的不足。最后,提出了一个模仿urllib.request的解决方案,以实现长连接、cookie和proxy的切换,以降低服务器资源消耗。
摘要由CSDN通过智能技术生成
urllib.request优缺点
优点
  1. 将proxy,cookie,重定向等功能做成插件式,并对这些插件排序管理,用于在网络访问时各个功能按次使用
  2. 集成http、https、ftp等应用层协议
  3. 默认自动处理 http 300 系列重定向响应
  4. 采用【connection:close】方式来作为数据接收完成的信号,不再用底层的 http.client 的 【Content-Length】来作为数据接收完成的判断
缺点
  1. 【connection:close】是把双刃剑,每访问一次,就要建立-关闭一次连接,耗费资源
  2. 对 http 300 重定向的缺省处理,有时对爬虫来说并不需要重定向操作。如通过响应的报文头中的location便可以获取想要的信息
cookie切换
  • 在此,有必要记录一下urllib.request的插件式工作原理。urllib.request发起请求的基础为OpenerDirector,由他管理着一系列插件,如proxyhandler,httpcookieprocessor,httpredirecthandler等,通过openerdirector.add_handler()插入,这些插件都有相应的序号,方便openerdirector按个调用。这些插件都维护着基本格式的方法接口,<protocol>_open(), <protocol>_error_<nnn>(), <protocol>_request(), <protocol>_response() 方法,openerdirector便是找这些插件调用这些方法。如httpredirectorhandler在重定向前需要http_error_30x()重构req以便再次访问
  • openerdirector不止维护着一个handlers序列,还维护着四个集合用于后续open处理,分别为hand_open, hand_error process_request, process_response,此四个序列所关联的全是各handler插件
  • python原生模块提供对http协议cookie的支持,在 http.cookiejar 中,在urllib.request.HttpCookieProcessor插件中封装cookiejar HTTPCookieProcessor(CookieJar()) ,提供api。
  • 要在爬取过程中切换cookie,则只需要在HttpCookieProcessor插件的内置cookiejar实例在一定条件下清空所保存的cookie,该cookiejar便会重新获取cookie用于下次访问
def cookie_switch(self):
    if hasattr(self, 'httpCookieProcessor'):
        self.cookie_used_times += 1
        if self.cookie_used_times > self.max_cookie_used_times+1:
            self.httpCookieProcessor.cookiejar.clear
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值