一.日常扯淡
这里给大家介绍一个,个人觉得非常好的图片网站:https://unsplash.com/
这个网站里的图片全是可以免费下载的,最重要的是,它的图片不仅精美而且图片质量超高!所以,你只的拥有。
既然可以免费下载那为什么还要用爬虫呢?这个嘛,确实不需要, =。= 就当我闲的蛋疼吧。
二.代码实现
首先,这是一个ajax的网站,所以,我们打开火狐浏览器,打开上方网址,进入网站后依次F12,网络,XHR,这时刷新下网页,就能看见如图的样子,这就是存放图片信息的json文件了
然而事实上,这还不是我们需要的链接,这个链接长这样:https://unsplash.com/napi/photos?page=2&per_page=2&order_by=latest
当我们将网页往下翻时,会出现这样的链接:https://unsplash.com/napi/photos?page=3&per_page=12&order_by=latest
二者区别在于后者page是从3开始的,我试了下,page=1也是有内容的;第二个区别在后者的per_page=12,
打开链接,查看json文件,发现无损的原图放在urls的raw下
好了,分析完毕,进入代码实操。
data = json.loads(requests.get(url,headers=get_user_hearder()).text)
首先获得我们需要的json文件
然后进入下载
def download_images(data,path): image_list=[] image_id=[] for i in range(0,len(data)): image_url=data[i]['urls']['raw'] image_list.append(image_url) name=data[i]['id'] image_id.append(name) for i in range(0,len(image_list)): auto_down(image_list[i],path + str(image_id[i])+'.jpg' print('第' + str(i) + '个图片下载完成')
我们在下图片时经常会遇到下载失败的情况,其中有种情况是出现urllib.ContentTooShortError错误,原因是文件下载不完全导致的错误,为防止图片下载失败,我用了一个大神的自动下载方法(图片爬虫——unsplash爬虫),当下载异常时,自动重新下载,超时会跳出循环。
def auto_down(url,filename): socket.setdefaulttimeout(30) try: urllib.request.urlretrieve(url, filename) except socket.timeout: count = 1 while count <= 5: try: urllib.request.urlretrieve(url, filename) break except socket.timeout: err_info = 'Reloading for %d time' % count if count == 1 else 'Reloading for %d times' % count print(err_info) count += 1 if count > 5: print("downloading picture failed!")
好了,最后输入以下开始下载的页号、停止下载的页号和图片保存的路径就可以跑了
def main(start,end,path): for i in range(start,end): url='https://unsplash.com/napi/photos?page='+str(i)+'&per_page=12&order_by=latest' data=getdata(url) download_images(data,path) print('第'+str(i)+'页下载完成')
最后的最后,放两张我下载的美图吧
额,原图有些大,我缩小了下。
注:原创,转载请注明出处。文中图片来自https://unsplash.com
今天的文章 图片爬虫——unsplash爬虫分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/77823.html