前言:本人之前并没有接触过python爬虫,但是现在因为要做个试验,需要下载海量人脸图片,所以需要用到python爬虫这个办法。但是过程中遇到到了很多问题,程序调了很久都不成功,终于调通了,所以就记录一下,万一以后还能用到呢(顺便一提,程序不是我写的,是我的师兄写的,我只是调了很久还没调通,最后依然是师兄调通的,感觉自己有点不要脸,嘻嘻)
正文:我们这个链接中有的是需要通过翻墙才能访问的,所以遇到了一些问题,下面这个链接描述了我们的下载任务:下载任务
我们的程序如下:
import urllib.request
import os
paths = r'F:/vgg_face_dataset/files'
paths_1 = paths[0:19]
files = os.listdir(paths)
headers = {'User-Agent': 'Mozilla/5.0'}
for i in files:
name = i[:-4]
path_name = paths_1+'/'+name
dec = os.path.exists(path_name)
add_path = 'F:/vgg_face_dataset/file'+'/'+name
dec1 = os.path.exists(add_path)
if not dec:
os.mkdir(path_name)
if not dec1:
os.mkdir(add_path)
f = open(add_path + "/" + i, 'w')
j=1
with open(paths+"/"+i ,'r') as p:
lines = p.readlines()
for line in lines:
path = line.split(' ')[1]
path_n = path_name+'/'+str(j)+'.jpg'
j = j + 1
det = os.path.exists(path_n)
if not det:
req = urllib.request.Request(path, headers=headers)
print("output1",req)
try:
f = urllib.request.urlopen(req)
print("output2",f)
except urllib.error.HTTPError as e:
with open(add_path+"/"+i,'a') as f:
f.write(line)
except ConnectionResetError as e:
with open(add_path+"/"+i,'a') as f:
f.write(line)
except urllib.error.URLError as e:
with open(add_path+"/"+i,'a') as f:
f.write(line)
else:
det = os.path.exists(path_n)
if not det:
with open(path_n, 'wb') as code:
code.write(f.read())
print('第 '+str(j)+' 张图片下载成功!')
f.close()
上面的是我们的程序,因为存在一些无法访问的链接,所以我们试图去跳过它,刚开始在出现错误链接时,我们是这么写的:
try:
f = urllib.request.urlopen(req)
print(f)
except urllib.error.HTTPError as e:
if e.code=='404':
continue
else:
det = os.path.exists(path_n)
if not det:
with open(path_n, 'wb') as code:
code.write(f.read())
f.close()
但是还是调不通,该过程之后,是这么写的:
try:
f = urllib.request.urlopen(req)
print("output2",f)
except urllib.error.HTTPError as e:
with open(add_path+"/"+i,'a') as f:
f.write(line)
except ConnectionResetError as e:
with open(add_path+"/"+i,'a') as f:
f.write(line)
except urllib.error.URLError as e:
with open(add_path+"/"+i,'a') as f:
f.write(line)
else:
det = os.path.exists(path_n)
if not det:
with open(path_n, 'wb') as code:
code.write(f.read())
print('第 '+str(j)+' 张图片下载成功!')
f.close()
然后调通了,做法是对于无法访问的链接我们把它存在了文件中,比较两者,感觉就是跳过无济于事,非要做一些处理,我也有些不懂,对于三种错误做处理就可以了。
下面有几个链接,是关于这个程序所需要了解的知识:
解决:ConnectionResetError 的一个博客
python爬虫之urlError异常处理
python os
python urllib.request
好的,就这样,关于链接大家可以在下载任务中下载。
大家可以在python中逐条运行,这样可以便于大家理解程序,我注释了一部分,其余的大家可以自己运行。
如有错误,欢迎指出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)