网络爬虫(2)--异常处理

上一节中对网络爬虫的学习的准备工作作了简要的介绍,并以一个简单的网页爬取为例子。但网络是十分复杂的,对网站的访问并不一定都会成功,因此需要对爬取过程中的异常情况进行处理,否则爬虫在遇到异常情况时就会发生错误停止运行。

让我们看看urlopen中可能出现的异常:

html = urlopen("http://www.heibanke.com/lesson/crawler_ex00/")

这行代码主要可能发生两种异常:

1.网页在服务器上不存在(或获取页面的时候出现错误)
2.服务器不存在
第一种异常发生时,程序会返回HTTP错误,urlopen函数会抛出“HTTPError”异常。
第二种异常,urlopen会返回一个None对象。
加入对这两种异常的处理后,上一节中的代码如下:

 1 __author__ = ‘f403‘
 2 #coding = utf-8
 3 from urllib.request import urlopen
 4 from urllib.error import HTTPError
 5 from bs4 import BeautifulSoup
 6
 7 try:
 8    html = urlopen("http://www.heibanke.com/lesson/crawler_ex00/")
 9    if html is None:
10       print("Url is not found")
11    else:
12       bsobj = BeautifulSoup(html,"html.parser")
13       print(bsobj.h1)
14 except HTTPError as e:
15    print(e)

加入异常处理后,可以处理网页访问中发生的异常,可以保证网页从服务器的成功获取。但这不能保证网页的内容和我们的预期一致,如上面的程序中,我们不能保证h1标签一定存在,因此我们需要考虑这类异常。

这类异常也可以分为2类:

1.访问一个不存在的标签

2.访问一个不存的标签的子标签

第一种情况出现时,BeautifulSoup返回一个None对象,而第二种情况会抛出AttributeError。

加入这部分的异常处理后,代码为:

 1 __author__ = ‘f403‘
 2 #coding = utf-8
 3 from urllib.request import urlopen
 4 from urllib.error import HTTPError
 5 from bs4 import BeautifulSoup
 6
 7 try:
 8    html = urlopen("http://www.heibanke.com/lesson/crawler_ex00/")
 9    if html is None:
10       print("Url is not found")
11    else:
12       bsobj = BeautifulSoup(html,"html.parser")
13       try:
14          t = bsobj.h1
15          if t is None:
16             print("tag is not exist")
17          else:
18             print(t)
19       except AttributeError as e:
20          print(e)
21 except HTTPError as e:
22    print(e)

来自为知笔记(Wiz)

时间: 2024-10-27 04:56:59

网络爬虫(2)--异常处理的相关文章

Python网络爬虫 - 3. 异常处理

handle_excpetion.py from urllib.request import urlopen from urllib.error import HTTPError from bs4 import BeautifulSoup import sys def getLogo(url): try: html = urlopen(url) except HTTPError as e: print("url open exception:") print(e) return Non

Python网络爬虫

http://blog.csdn.net/pi9nc/article/details/9734437 一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛.网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址, 然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止. 如果把整个互联网当成一个网站,那么

python网络爬虫之cookie的使用方法汇总

在编写python网络爬虫时,除了要考虑到爬虫的异常处理问题,我们是否还会考虑到cookie的使用呢?在使用cookie时,有想过为什么要使用cookie吗?一起来看看吧. Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密)比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的.那么我们可以利用Urllib2库保存我们登录的Cookie,然后再抓取其他页面就达到目的了. 在此之前呢,我们必须先介绍一个open

Python实现网络爬虫

一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛. 网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址, 然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止. 如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来. 这样看来,网络爬虫就是一个爬行程序,一个抓

[Python]网络爬虫(三):异常的处理和HTTP状态码的分类(转)

先来说一说HTTP的异常处理问题.当urlopen不能够处理一个response时,产生urlError.不过通常的Python APIs异常如ValueError,TypeError等也会同时产生.HTTPError是urlError的子类,通常在特定HTTP URLs中产生. 1.URLError通常,URLError在没有网络连接(没有路由到特定服务器),或者服务器不存在的情况下产生. 这种情况下,异常同样会带有"reason"属性,它是一个tuple(可以理解为不可变的数组),

Python]网络爬虫

Originated From: http://blog.csdn.net/pi9nc/article/details/9734437#comments [Python]网络爬虫(一):抓取网页的含义和URL基本构成 一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛.网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址, 然后通过这些

Python网络爬虫实战视频教程

Python网络爬虫实战教程(全套完整版) 课程观看地址:http://www.xuetuwuyou.com/course/168课程出自学途无忧网:http://www.xuetuwuyou.com 课程目录:课时1:课程介绍课时2:Python初识课时3:Python语法基础 课时4:Python控制流与小实例 课时5:答疑环节 课时6:Python函数详解 课时7:Python模块实战 课时8:Python文件操作实战 课时9:Python异常处理实战 课时10:Python面向对象编程

python网络爬虫学习资料

第一:Python爬虫学习系列教程(来源于某博主:http://cuiqingcai.com/1052.html) Python版本:2.7 整体目录: 一.爬虫入门 1. Python爬虫入门一之综述 2. Python爬虫入门二之爬虫基础了解 3. Python爬虫入门三之Urllib库的基本使用 4. Python爬虫入门四之Urllib库的高级用法 5. Python爬虫入门五之URLError异常处理 6. Python爬虫入门六之Cookie的使用 7. Python爬虫入门七之正则

零基础自学Python 3开发网络爬虫(二): 用到的数据结构简介以及爬虫Ver1.0 alpha

上一回, 我学会了 用伪代码写出爬虫的主要框架; 用Python的urllib.request库抓取指定url的页面; 用Python的urllib.parse库对普通字符串转符合url的字符串. 这一回, 开始用Python将伪代码中的所有部分实现. 由于文章的标题就是"零基础", 因此会先把用到的两种数据结构队列和集合介绍一下. 而对于"正则表达式"部分, 限于篇幅不能介绍, 但给出我比较喜欢的几个参考资料. Python的队列 在爬虫程序中, 用到了广度优先搜