前辈能给这段代码添加一个超时就换下一张图片的代码吗?

2017-03-25 13:13:13 +08:00
 woshinide300yuan
搜了段 PY ( PY 交易)爬虫代码,想储备点壁纸好过冬。但是总会遇到 BLOCKED 的页面(应该是颜色图),也不跳过,就呆呆的站在那里等。我的天呐~这是地球爬虫该干的事吗。
是不是应该遇到请求超时 30 秒的就 pass 掉,换下一个了呢?
大家觉得呢?
丰富一下吧,我百度了发现网上并没有很好的采集 WALL 的壁纸爬虫,丰富之后,让更多的人收益吧~
虽然现在我觉得花瓣的图也挺好!
鞠躬~
当然, V2 现在风气不是辣么好,如果你不愿意回答问题本身的,请 pass 掉,别冷酸灵牙膏了。么么哒~


=====
import urllib2
from urllib2 import HTTPError, URLError
import math
import sys
import time

print "The start time: "+time.ctime()
x = input("Start value:")
y = input("Stop value:")
k = y-x
for i in range(x, y+1):
url = 'https://wallpapers.wallhaven.cc/wallpapers/full/wallhaven-'+str(i)+'.jpg'
req = urllib2.Request(url)
req.add_header("User-agent", "Mozilla/5.0 (Linux; Android 4.4.4; A31 Build/KTU84P; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043015 Safari/537.36 V1_AND_SQ_6.6.9_482_YYB_D QQ/6.6.9.3060 NetType/4G WebP/0.3.0 Pixel/480")
name = 'D:\\pic\\'+str(i)+'.jpg'
try:
conn = urllib2.urlopen(req)
f = open(name, 'wb')
f.write(conn.read())
f.close()
if k < 100:
sys.stdout.write("Computing: [%s%s] %.2f%%\r" % ('#' * (i-x) , '-' * (y-i), (i-x)*100/k))
sys.stdout.flush()
time.sleep(0.01)
else:
sys.stdout.write("Computing: [%s%s] %.2f%% \r" % ('#' * ((i-x)/(k/50)) , '-' * ((y-i)/(k/50)), (i-x)*100.0/k))
sys.stdout.flush()
time.sleep(0.01)
except HTTPError ,e:
i = i+1
except URLError, e:
print "The server\'s something is wrong!"
break
print "\nThe finished time: "+time.ctime()
print 'pic saved'

……

1469 次点击
所在节点    问与答
3 条回复
masha
2017-03-25 20:07:26 +08:00
你这个缩进让我无能为力
woshinide300yuan
2017-03-25 20:25:51 +08:00
@masha 谢谢你。周末愉快~!
masha
2017-03-25 20:48:18 +08:00
@woshinide300yuan urlopen 加上 timeout 参数

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/350226

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX