python简单爬虫(二)
来源:互联网 发布:python社区哪个好 编辑:程序博客网 时间:2024/05/17 08:59
首先必须要会用python中处理异常的语法。看了一个很好,字体感觉很舒服(原谅我的挑剔)且很详细,python异常:点击打开链接
二者环境仍和上篇一样,版本2.X
最后虽然上面那个异常处理讲的很清楚,但是我们这里主要用的两个异常没有具体说,我这里再提一下:URLError、HTTPError。URLError是HTTPError的基类,HTTPError的错误中会返回相应的code,如我们最常见的404,其他的可以自己去查。
1.原本平时访问网站时都会出现错误,请求不到等等,更遑论我们这是爬虫了(且可能是漏洞百出)。且网站是被人的,说不定人家什么时候就把文件的存放位置改了呢,是不是,仔细想想,状况百出呀,然你总不能做电脑旁边一直看着你的程序吧。。。这个时候就需要try来解决了。
首先来个小栗子:
import urllib2url = 'http://bbs.csdn.net/WhereAreYou'req = urllib2.Request(url)try:response = urllib2.urlopen(req)except urllib2.URLError, e:print e.reasonprint e.code#print response.read()你执行这个栗子,结果是:
---------- Python ----------
Forbidden
403
输出完成 (耗时 0 秒) - 正常终止
然大家千万不要被他骗了,你把那个url地址在浏览器中尝试,你会发现csdn给你的是404错误。403错误是csdn服务器禁止了你的请求,为毛咧?因为他发现了你不是正常访问。解决方法是让它以为你是正常访问,这里假装我们是chrome浏览器,在req里添加头,也就是它:
req.add_header('User-Agent','Chrome')现在再执行就是404(找不到你要的文件)
这是个HTTPError的栗子,如果把url换成“http://wwwbalibali.com/”就成了URLError(那就不能有code)里的了。我的理解是如果服务器存在一般都是HTTPError,否则就是除了HTTPError的URLError了。
2.下面是一个可以体现URLError是HTTPError父类的栗子,以及异常处理的语法,一旦捕捉到异常即跳出:
#coding=utf-8import urllibimport urllib2#url = 'http://www.balabala.com/'url = 'http://bbs.csdn.net/WhereAreYou'req = urllib2.Request(url)req.add_header('User-Agent','Chrome')try:request = urllib2.urlopen(req)except urllib2.HTTPError,e:print 'the server can not fullfill our request'print 'the return code is: {0}'.format(e.code)except urllib2.URLError,e:print 'we can not catch the server'print 'the reason is: {0}'.format(e.reason)else :print 'success!'
3.这是一个和上面处理结果一样的栗子,方式略不同
import urllib2url = 'http://www.baibai.com/'#url = 'http://bbs.csdn.net/WhereAreYou'req = urllib2.Request(url)req.add_header('User-Agent','Chrome')try:request = urllib2.urlopen(req)except urllib2.URLError, e:if hasattr(e,'code'):print 'the server can not fullfill our request'print 'the return code is: {0}'.format(e.code)elif hasattr(e,'reason'):print 'we can not catch the server'print 'the reason is: {0}'.format(e.reason)else :print 'success!'其实就我自身小经验觉得,很多地方解决可能出现的且你知道什么样的异常选择if-elif处理也不失为一个好办法。举个栗子吧,如果你在分析一个页面的成分时,可能将来你分析的那个节点没有了,这就可以轻易的停止你的程序,而这时如果用try解决明显很累赘。所以,你懂得。
- python简单爬虫(二)
- Python开发简单爬虫(二)
- 简单Python爬虫实现(二)
- python 爬虫(二)
- python爬虫(二)
- python爬虫(二)
- Python 爬虫(二)
- Python爬虫学习(简单的模拟登陆(二))
- python爬虫入门教程(二):开始一个简单的爬虫
- Python爬虫(二)图片下载爬虫
- nodejs 简单爬虫(二)
- Python爬虫整理(二)
- python 爬虫笔记(二)
- python网络爬虫(二)
- Python爬虫实战(二)
- python爬虫记录(二)
- Python爬虫小记(二)
- python网络爬虫(二)
- Android JNI机制
- SQLAlchemy---ORM技术
- Gradle in Android Studio (2) - 配置Gradle
- php开发微信公众号 第三方平台一键绑定(授权)感言
- 非常全面的免费资源网站
- python简单爬虫(二)
- Linux SPI驱动框架剖析
- 理解Fragment生命周期
- 关于字符串常考函数
- chrome启动失败
- android listview中getView重复被调用的问题
- java_map集合
- C++的STL进一步总结之lower_bound和upper_bound
- 凌夕卡密微商城