鱼C论坛

 找回密码
 立即注册
查看: 2804|回复: 2

[技术交流] 20 爬虫的异常处理实战

[复制链接]
发表于 2017-6-22 13:00:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
20 爬虫的异常处理实战


一、异常处理概述


      爬虫在运行的过程中,很多时候都会遇到这样那样的异常。如果没有异常处理,爬虫遇到异常时就会直接崩溃停止运行。下次再次运行时,又会重头开始。所以,要开发一个具有顽强生命力的爬虫,必须要进行异常处理

二、常见状态码及含义


状态码就是访问网页时服务器返回的一个状态的标志。
  • 200 OK :访问正常
  • 301 Moved Permanently :重定向到新的url,永久性
  • 302 Found :重定向到临时的url,非永久性
  • 304 Not Modified :请求的资源未更新
  • 400 Bad Request :非法请求
  • 401 Unauthorized :请求未经授权
  • 403 Forbidden :禁止访问
  • 404 Not Found :没有找到对应页面
  • 500 Internal Server Error :服务器内部出现错误
  • 501 Not Implemented:服务器不支持实现请求所需要的功能


三、URLError和HTTPError
       两者都是异常处理的类,HTTPError类是URLError的子类。HTTPError有异常状态和异常原因,URLError没有异常状态吗。因此,在使用时,不能使用URLError直接代替HTTPError。如果要代替,必须判断是否有状态码属性。
       URLError出现的原因:(1)连不上服务器。(2)远程url不存在。(3)无网络。(3)触发HTTPError。


四、异常处理实战
  1. import urllib.request
  2. #error模块
  3. import urllib.error
  4. try:
  5.     data = urllib.request.urlopen("http://blog.csdn.net/").read().decode("utf-8")
  6.     print(len(data))
  7. except urllib.error.URLError as err:
  8.     #判断是否有状态码
  9.     if hasattr(err,"code"):
  10.         print(err.code)
  11.     #判断是否有异常原因
  12.     if hasattr(err,"reason"):
  13.         print(err.reason)
复制代码
  1. 59413
复制代码
没有出现异常。本来以前是直接爬不了CSDN博客的,会显示403。现在不知发生了什么。

总的来说,异常处理对于爬虫而言十分重要,它使得爬虫具有顽强的生命力。必须掌握!



评分

参与人数 1鱼币 +7 收起 理由
小甲鱼 + 7 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-22 17:41:16 | 显示全部楼层
这些错误不只是爬虫的吧    所有web请求都一样的会报这个错   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-22 18:19:05 From FishC Mobile | 显示全部楼层
是这样的,这里主要是说使用爬虫时遇到的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 02:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表