上一节中对网络爬虫的学习的准备工作作了简要的介绍,并以一个简单的网页爬取为例子。但网络是十分复杂的,对网站的访问并不一定都会成功,因此需要对爬取过程中的异常情况进行处理,否则爬虫在遇到异常情况时就会发生错误停止运行。
html = urlopen("http://www.heibanke.com/lesson/crawler_ex00/")
这行代码主要可能发生两种异常:
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标签一定存在,因此我们需要考虑这类异常。
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)
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:网络爬虫(2)–异常处理 - Python技术站