前言
现在讲一下错误处理,关于错误处理主要是对requests.get的错误处理。就是说如果我们requests返回错误怎么办?错误了怎么处理。
这里我们就要用到try和except的语法,这里就不细讲。
代码
def get(url):
count=0
url_list=[]
url_list.append(url)
statu=0
while url_list!=[]:#列表不为空,进行爬取。
time.sleep(3)
try:
list_url=url_list.pop(0)
r = requests.get(list_url,headers=hd)
r.encoding=r.apparent_encoding
if r.status_code==200:
print("页面返回正常!")
return r
else:
print("页面返回异常!")
count=count+1
statu=1
if count==5:
print(str(list_url)+"获取失败!错误代码:1")
return statu
except:
print("页面返回失败!")
count=count+1
statu=2
if count==5:
print(str(list_url)+"获取失败!错误代码:2")
return statu
if statu!=0:
url_list.insert(0,url)
continue
这里是我对错误的处理,使用函数的。
不过在使用的时候,还有对这个函数进行接收判断。
r=get(url)
if type(r)==int:
continue
else:
res=key.findall(r.text)
这样就可以进行解决了,但是如果只是获取一个网页的话就不是这样了因为没有写在一个循环里。
解析
这段代码,我实现了两个要求:
1.使用try语句进行错误处理模块
2.当错误发生时,再次运行执行错误的URL,直到5次之后,结束request,运行for循环的下一个。
我们先看一下变量:
def get(url):
count=0#计数
url_list=[]#列表
url_list.append(url)#导入url
statu=0#错误代码
这个函数传进来的参数是一个URL链接,我们把它append进到一个叫做url_list的列表。
while url_list!=[]:
time.sleep(3)
try:
list_url=url_list.pop(0)
r = requests.get(list_url,headers=hd)
r.encoding=r.apparent_encoding
if r.status_code==200:
print("页面返回正常!")
return r
我们的总体爬取条件是如果列表不为空,进行爬取。
在try里面,我们有获取了list_url=url_list.pop(0)就是url_list的第一个并删除,接下来就是普普通通的两条requests.get函数。如果requests返回的网页的状态码为200时(就是爬取的网页返回正常的意思),我们就返回这个网页。
else:
print("页面返回异常!")
count=count+1
statu=1
if count==5:
print(str(list_url)+"获取失败!错误代码:1")
return statu
如果状态码返回异常,比如404找不到之类的,就会count++,返回错误代码1,在这里我们有一个判断,如果count错误次数达到5次时候,我们就返回错误代码,print 返回失败。函数输出status错误代码1
except:
print("页面返回失败!")
count=count+1
statu=2
if count==5:
print(str(list_url)+"获取失败!错误代码:2")
return statu
这个except的错误是爬取的时候突然网络断开,导致的错误。对于错误的处理跟上一个一样。
if statu!=0:
url_list.insert(0,url)
continue
当while循环运行完一次时,在最后面会对错误代码进行一个判断,如果错误代码1或者2时,把url加到url_list里。
这函数基本就是这样子,比较简单。我们来看一下接收的代码吧。
for i in url_page_list:
r=get(i)
if type(r)==int:
continue
else:
res=key.findall(r.text)
在这里是一个使用案例,在我们多个获取网页的时候使用for循环。因为get()函数会返回错误代码,所以当函数返回的是错误代码(1或2)时,就跳过这次循环。
OK错误处理弄完了。因为我把代码封装在一个函数里面,所以你们复制粘贴调用函数就可以了。
往期文章:
Pyhton爬小说实例解析笔记——爬虫基础
Pyhton爬小说实例解析笔记——内容分析(正则表达式)
Pyhton爬小说实例解析笔记——文件写入
觉得有用的话点个赞吧。