
初学者想学写个爬虫,边学边写
想要下载一张 Y 站的图片,代码为
urllib.request.urlopen('http://xxx.jpg').read() 其中 url 是可以正常访问的。图片不大,浏览器打开只需要几秒(排除缓存原因)。但在 python 中下载它却需要 30+秒,将下载到的数据写出为文件是可以正常查看的
那么问题来了,究竟是什么原因导致下载一张图片那么慢呢?
请问是还有什么地方需要配置吗?
附完整代码:
# 创建目录存放今天爬下来的图 dir_name = datetime.datetime.now().strftime('%Y%m%d') if not os.path.exists(dir_name): os.mkdir(dir_name) # info[1] 的值为 https://files.yande.re/sample/6718a8caa71a4547a417f41bc9f063bb/yande.re%20385001%20sample%20byakuya_reki%20seifuku.jpg print('开始下载……') print(info[1]) i = time.time() img = urllib.request.urlopen(info[1]).read() print('下载完毕。耗时:'+str(int(time.time() - i))+'s') # 获取文件名,并将%20 替换为空格 file_name = info[1].split('/')[-1].replace('%20', ' ') file = open(dir_name+'/'+file_name, 'wb') file.write(img) file.close() exit(200) 1 zhanglintc 2017-02-27 18:20:23 +08:00 我打开这张图也要很久 |
2 mokeyjay OP @zhanglintc 可能是区域问题?但我浏览器打开很快呀,换个浏览器速度也差不多。我的代码是在本地运行的,怎么速度差那么多呢? |
3 ltux 2017-02-27 18:27:35 +08:00 也许服务器对爬虫限速了呢 |
4 CloudnuY 2017-02-27 18:58:35 +08:00 你看看是不是打开了系统代理 |
5 HFcbyqP0iVO5KM05 2017-02-27 19:04:03 +08:00 via Android 浏览器有缓存吧 |
6 mokeyjay OP @ltux 还真有这个可能……@CloudnuY 用的是 ss 的 pac 模式,这个不碍事吧?@gulu 换过浏览器一样几秒打开 |
7 fengxiang 2017-02-27 19:17:19 +08:00 因为你浏览器走代理了,yandex 大一点的图片 2 30m,慢很正常 |
8 fbtfonfp 2017-02-27 19:17:48 +08:00 跑了一下 , 3s |
9 mokeyjay OP |
10 mianju 2017-02-27 20:20:06 +08:00 如果挂 ss 的话,推荐使用这个库 PySocks 具体使用参考 http://stackoverflow.com/questions/31777692/python3-requests-with-sock5-proxy |
12 dsg001 2017-02-27 20:29:15 +08:00 一般调用 wget 下载 |
13 fengxiang 2017-02-27 21:00:30 +08:00 还是挂个代理吧,萌妹的服务器时不时抽风,不太好判断. 推荐用 requests 代替 urllib |
14 binux 2017-02-27 21:23:57 +08:00 根据你的表述,就是系统代理没跑了。 |
15 TTwilight 2017-02-28 10:12:36 +08:00 我一般用 urlretrieve |
17 4ever911 2017-02-28 23:02:07 +08:00 1 loop, best of 3: 2.98 s per loop |