鱼C论坛

 找回密码
 立即注册
楼主: lb971216008

[作品展示] [Python]网络爬虫~大神之作(火热更新中·····)

[复制链接]
 楼主| 发表于 2016-8-20 13:35:10 | 显示全部楼层
SixPy 发表于 2016-8-20 13:33
那我是怎么找到的?

不清楚,你肯定有的方法,继续找,其他地方肯定有,可能就换了个说法,改了个名字也不好说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-20 13:37:13 | 显示全部楼层
SixPy 发表于 2016-8-20 13:34
你再扯淡,就禁烟2天,面壁思过去~

好吧,我不说了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-20 13:41:33 | 显示全部楼层
SixPy 发表于 2016-8-20 13:34
你再扯淡,就禁烟2天,面壁思过去~

版主,已经按您的吩咐修改了帖子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-21 17:13:19 | 显示全部楼层

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

本帖最后由 lb971216008 于 2016-8-21 17:15 编辑

欢迎一起学python爬虫先来说一说HTTP的异常处理问题。
当urlopen不能够处理一个response时,产生urlError。
不过通常的Python APIs异常如ValueError,TypeError等也会同时产生。
HTTPError是urlError的子类,通常在特定HTTPURLs中产生。

1.URLError
通常,URLError在没有网络连接(没有路由到特定服务器),或者服务器不存在的情况下产生。
这种情况下,异常同样会带有"reason"属性,它是一个tuple(可以理解为不可变的数组),
包含了一个错误号和一个错误信息。
我们建一个urllib2_test06.py来感受一下异常的处理:
1.  import urllib2  
2.    
3.  req = urllib2.Request('http://www.baibai.com')  
4.    
5.  try: urllib2.urlopen(req)  
6.    
7.  except urllib2.URLError, e:   
8.      print e.reason  




按下F5,可以看到打印出来的内容是:
[Errno 11001] getaddrinfo failed
也就是说,错误号是11001,内容是getaddrinfo failed
2.HTTPError
服务器上每一个HTTP 应答对象response包含一个数字"状态码"。
有时状态码指出服务器无法完成请求。默认的处理器会为你处理一部分这种应答。
例如:假如response是一个"重定向",需要客户端从别的地址获取文档,urllib2将为你处理。
其他不能处理的,urlopen会产生一个HTTPError。
典型的错误包含"404"(页面无法找到),"403"(请求禁止),和"401"(带验证请求)。
HTTP状态码表示HTTP协议所返回的响应的状态。
比如客户端向服务器发送请求,如果成功地获得请求的资源,则返回的状态码为200,表示响应成功。
如果请求的资源不存在, 则通常返回404错误。
HTTP状态码通常分为5种类型,分别以1~5五个数字开头,由3位整数组成:
------------------------------------------------------------------------------------------------
200:请求成功      处理方式:获得响应的内容,进行处理
201:请求完成,结果是创建了新资源。新创建资源的URI可在响应的实体中得到    处理方式:爬虫中不会遇到
202:请求被接受,但处理尚未完成    处理方式:阻塞等待
204:服务器端已经实现了请求,但是没有返回新的信 息。如果客户是用户代理,则无须为此更新自身的文档视图。    处理方式:丢弃
300:该状态码不被HTTP/1.0的应用程序直接使用, 只是作为3XX类型回应的默认解释。存在多个可用的被请求资源。   处理方式:若程序中能够处理,则进行进一步处理,如果程序中不能处理,则丢弃
301:请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源    处理方式:重定向到分配的URL
302:请求到的资源在一个不同的URL处临时保存    处理方式:重定向到临时的URL
304 请求的资源未更新     处理方式:丢弃
400 非法请求     处理方式:丢弃
401 未授权     处理方式:丢弃
403 禁止     处理方式:丢弃
404 没有找到     处理方式:丢弃
5XX 回应代码以“5”开头的状态码表示服务器端发现自己出现错误,不能继续执行请求    处理方式:丢弃
------------------------------------------------------------------------------------------------
HTTPError实例产生后会有一个整型'code'属性,是服务器发送的相关错误号。
Error Codes错误码
因为默认的处理器处理了重定向(300以外号码),并且100-299范围的号码指示成功,所以你只能看到400-599的错误号码。
BaseHTTPServer.BaseHTTPRequestHandler.response是一个很有用的应答号码字典,显示了HTTP协议使用的所有的应答号。
当一个错误号产生后,服务器返回一个HTTP错误号,和一个错误页面。
你可以使用HTTPError实例作为页面返回的应答对象response。
这表示和错误属性一样,它同样包含了read,geturl,和info方法。
我们建一个urllib2_test07.py来感受一下:
1.  import urllib2  
2.  req = urllib2.Request('http://bbs.csdn.net/callmewhy')  
3.    
4.  try:  
5.      urllib2.urlopen(req)  
6.    
7.  except urllib2.URLError, e:  
8.    
9.      print e.code  
10.     #print e.read()  


按下F5可以看见输出了404的错误码,也就说没有找到这个页面。


3.Wrapping
所以如果你想为HTTPError或URLError做准备,将有两个基本的办法。推荐使用第二种。
我们建一个urllib2_test08.py来示范一下第一种异常处理的方案:
1.  from urllib2 import Request, urlopen, URLError, HTTPError  
2.    
3.  req = Request('http://bbs.csdn.net/callmewhy')  
4.    
5.  try:  
6.    
7.      response = urlopen(req)  
8.    
9.  except HTTPError, e:  
10.   
11.     print 'The server couldn\'t fulfill the request.'  
12.   
13.     print 'Error code: ', e.code  
14.   
15. except URLError, e:  
16.   
17.     print 'We failed to reach a server.'  
18.   
19.     print 'Reason: ', e.reason  
20.   
21. else:  
22.     print 'No exception was raised.'  
23.     # everything is fine  


和其他语言相似,try之后捕获异常并且将其内容打印出来。
这里要注意的一点,except HTTPError 必须在第一个,否则except URLError将同样接受到HTTPError 。
因为HTTPError是URLError的子类,如果URLError在前面它会捕捉到所有的URLError(包括HTTPError )。
我们建一个urllib2_test09.py来示范一下第二种异常处理的方案:
1.  from urllib2 import Request, urlopen, URLError, HTTPError  
2.    
3.  req = Request('http://bbs.csdn.net/callmewhy')  
4.     
5.  try:   
6.     
7.      response = urlopen(req)   
8.     
9.  except URLError, e:   
10.   
11.     if hasattr(e, 'code'):   
12.    
13.         print 'The server couldn\'t fulfill the request.'   
14.    
15.         print 'Error code: ', e.code   
16.   
17.     elif hasattr(e, 'reason'):   
18.    
19.         print 'We failed to reach a server.'   
20.    
21.         print 'Reason: ', e.reason   
22.    
23.    
24. else:   
25.     print 'No exception was raised.'   
26.     # everything is fine

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

使用道具 举报

 楼主| 发表于 2016-8-21 19:26:59 | 显示全部楼层
SixPy 发表于 2016-8-20 13:33
那我是怎么找到的?

怎么可以这样子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-21 19:29:19 | 显示全部楼层
lb971216008 发表于 2016-8-20 13:08
所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。
类似于使用程序模拟IE浏 ...

楼主学的是python2呀-.-
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-21 19:33:22 | 显示全部楼层
看看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-21 19:40:06 | 显示全部楼层

对,2的,科普文,普及知识,现在3应该兼容的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-21 19:40:40 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-22 12:11:03 | 显示全部楼层

正在努力更新中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-22 22:19:46 | 显示全部楼层

牛逼的不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-25 23:27:12 | 显示全部楼层
谢谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-27 10:58:24 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-27 12:01:02 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-27 18:04:27 | 显示全部楼层
写的很好 多谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-27 22:53:46 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-27 22:52:46 | 显示全部楼层
谢谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-28 20:59:29 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-3 23:17:59 | 显示全部楼层
123
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-12-24 20:53:10 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 02:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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