资讯专栏INFORMATION COLUMN

【爬虫系列之三】URLError异常处理以及Cookie的使用

xiaochao / 641人阅读

摘要:一的处理出现产生的原因很多,比如网络没法连接,连接不到服务器,或者服务器不存在。二的使用,一般是某些网站为了辨别用户身份,进行跟踪,从而存储在客户端的数据。模块的主要作用是提供可存储的对象,以便于与模块配合使用来访问资源。

一、urlError的处理

出现urlError产生的原因很多,比如:网络没法连接,连接不到服务器,或者服务器不存在。
在代码中,我们需要用try-except的语句来捕获相应的异常

import urllib2
 
req = urllib2.Request("http://blog.csdn.net/cqcre")
try:
    urllib2.urlopen(req)
except urllib2.HTTPError, e:#使用hasattr属性判断code是否存在
    print e.code
except urllib2.URLError, e:
    print e.reason
else:
    print "OK"

上述代码,可以看到httperror,这里HTTPError是URLError的子类,在你利用urlopen方法发出一个请求时,服务器上都会对应一个应答对象response,其中它包含一个数字”状态码”。举个例子,假如response是一个”重定向”,需定位到别的地址获取文档,urllib2将对此进行处理,此处需要了解HTTP状态码相关知识。

二、Cookie的使用

cookie,一般是某些网站为了辨别用户身份,进行session跟踪,从而存储在客户端的数据。比如某些网站需要登录,才能访问某些页面。这里我们可以使用urllib2库保存我们登录的cookie,然后再进行抓取内容。

2.1、Opener

当你获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例)。在前面,我们都是使用的默认的opener,也就是urlopen,它是一个特殊的opener,可以理解成opener的一个特殊实例,传入的参数仅仅是url,data,timeout。

如果我们需要用到Cookie,只用这个opener是不能达到目的的,所以我们需要创建更一般的opener来实现对Cookie的设置。

2.2 Cookielib

cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源。 Cookielib模块非常强大,我们可以利用本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送,比如可以实现模拟登录 功能。该模块主要的对象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。

它们的关系:CookieJar —-派生—->FileCookieJar —-派生—–>MozillaCookieJar和LWPCookieJar

2.2.1 获取Cookie保存到变量
import urllib2
import cookielib
#声明一个CookieJar对象实例来保存cookie
cookie = cookielib.CookieJar()
#利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器
handler=urllib2.HTTPCookieProcessor(cookie)
#通过handler来构建opener
opener = urllib2.build_opener(handler)
#此处的open方法同urllib2的urlopen方法,也可以传入request
response = opener.open("http://www.baidu.com")
for item in cookie:
    print "Name = "+item.name
    print "Value = "+item.value
2.2.2 保存Cookie到文件
import cookielib
import urllib2

#设置保存cookie的文件,同级目录下的cookie.txt
filename = "cookie.txt"
#声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件
cookie = cookielib.MozillaCookieJar(filename)
#利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器
handler = urllib2.HTTPCookieProcessor(cookie)
#通过handler来构建opener
opener = urllib2.build_opener(handler)
#创建一个请求,原理同urllib2的urlopen
response = opener.open("http://www.baidu.com")
#保存cookie到文件
cookie.save(ignore_discard=True, ignore_expires=True)

ignore_discard的意思是即使cookies将被丢弃也将它保存下来,ignore_expires的意思是如果在该文件中 cookies已经存在,则覆盖原文件写入

2.2.3 从文件中读取cookie
import cookielib
import urllib2

#创建MozillaCookieJar实例对象
cookie = cookielib.MozillaCookieJar()
#从文件中读取cookie内容到变量
cookie.load("cookie.txt", ignore_discard=True, ignore_expires=True)
#创建请求的request
req = urllib2.Request("http://www.baidu.com")
#利用urllib2的build_opener方法创建一个opener
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
response = opener.open(req)
print response.read()

这一篇又折腾折腾,结束了,可能看起来比较无聊,都是为了接下来的各种实战来做准备的,从下一篇开始,正式的进行网站的爬虫了。

推荐阅读:

【爬虫系列之一】爬虫开发环境的搭建
【爬虫系列之二】python基础知识的了解

更多精彩内容,欢迎大家关注我的微信公众号:喝醉的清茶

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41853.html

相关文章

  • Python3网络爬虫实战---20、使用Urllib:发送请求

    摘要:下面我们传入多个参数构建一个来感受一下在这里我们通过四个参数构造了一个,即请求,在中指定了和,传递的参数用了和方法来转成字节流,另外指定了请求方式为。运行结果如下通过观察结果可以发现,我们成功设置了,以及。用于处理重定向。 上一篇文章:Python3网络爬虫实战---19、代理基本原理下一篇文章:Python3网络爬虫实战---21、使用Urllib:处理异常 学习爬虫,最初的操作便...

    kun_jian 评论0 收藏0
  • 零基础如何学爬虫技术

    摘要:楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,。本文来源知乎作者路人甲链接楚江数据提供网站数据采集和爬虫软件定制开发服务,服务范围涵盖社交网络电子商务分类信息学术研究等。 楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,http://www.chujiangdata.com。 第一:Python爬虫学习系列教程(来源于某博主:htt...

    KunMinX 评论0 收藏0
  • Python3网络爬虫实战---21、使用Urllib:处理异常

    摘要:最后用来处理正常的逻辑,这是一个较好的异常处理写法。上一篇文章网络爬虫实战使用发送请求下一篇文章网络爬虫实战使用解析链接 上一篇文章:Python3网络爬虫实战---20、使用Urllib:发送请求下一篇文章:Python3网络爬虫实战---22、使用Urllib:解析链接 在前面一节我们了解了 Request 的发送过程,但是在网络情况不好的情况下,出现了异常怎么办呢?这时如果我们...

    hlcfan 评论0 收藏0
  • 爬虫学习(二)基础阶段

    摘要:如果要添加该参数,并且如果它是字节流编码格式的内容,即类型,则需要通过方法转化。通过的格式将字典进行字节流的编码,将编码后的字节流数据传输到指定这里存在一个,要进行指定方式解码。第二个参数如果要传,必须传字节流类型的。 请求头中的内容: Date: 标识 响应产生 的时间 。 Last-Modified: 指定资源的最后修改时间。 Content-Encoding: 指定 响应 内容...

    xiaoqibTn 评论0 收藏0
  • Python标准库学习之urllib

    摘要:本系列以为基础是的标准网络请求库。包含了网络数据请求,处理改变请求头和用户代理,重定向,认证等的函数。超时单位为秒参数必须是的实例返回值返回一个可以作为的对象。返回的个部分,分别是机制网络位置路径路径段参数查询片段。 本系列以python3.4为基础urllib是Python3的标准网络请求库。包含了网络数据请求,处理cookie,改变请求头和用户代理,重定向,认证等的函数。urlli...

    NusterCache 评论0 收藏0

发表评论

0条评论

xiaochao

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<