欢迎访问企业官网建站公司网站,拥有丰富的建站经验,快速智能且精美!

企业官网建站公司

自助建站官网平台建设,公司自助官网建站定制

python抓取瀑布流网站的图片

作者:jcmp      发布时间:2021-04-12      浏览量:0
今日需要准备有关烟灰缸的图片数据集,用于

今日需要准备有关烟灰缸的图片数据集,用于烟灰缸检测的目标检测模型的训练。由于目前网上还没有关于烟灰缸的开源数据集,国内的图片网站一般需要收费,而国外的免费图片网站不支持批量下载。因此只能采用网络爬虫的方式去抓取有关烟灰缸的图片数据。

一番调研之后,选择了一家国外的图片网站,网址为: https://unsplash.com。

选择该网站的原因有二,一是该网站尚未发现存在反爬虫的设置,相比而言,国内许多网站的反爬虫机制比较完善,抓取这类网站的数据难度较大;二是该网站有大量的图片资源(有一些免费下载图片的网站的资源库相对匮乏)。

该网站在页面显示端采用的是瀑布流,即用户只需要控制滚动条即可实现传统网站中的分页功能。但由于没有了”下一页“按钮的存在,爬虫程序没办法一次性得到所有的网页链接,因此需要对传统的爬虫程序进行改进。

进入浏览器端,通过开发者模式查看前端向后台发送的数据请求。

上图是使用谷歌浏览器的示范,进入开发者模式,通过滑动滚动条触发网页的瀑布流机制,并观察开发者工具中network下的XHR所显示的请求信息,并得到请求的URL。通过观察此URL可知,一共有20页,此时处于第7页。 在浏览器端输入URL,可得到服务器端相应数据请求的返回。

""" 烟灰缸图片抓取的样例。 2019年10月14日14:40:13"""import urllib.requestimport urllibimport requestsdef download_img(paths): x = 0 #一共有20页,i用于遍历所有的页。 for i in range(1, 21): x = (i - 1) * 20 target_url = 'https://unsplash.com/napi/search/photos?query=ashtray&xp=&per_page=20&page='+str(i) #得到网页的json数据 jsondata = requests.get(target_url) data = jsondata.json()["results"] #pprint.pprint(data) # 格式化打印获取的json for item in data: #得到图片的下载链接 url = item.get("links").get("download") #打开url,下载图片到本地 urllib.request.urlretrieve(url, '{0}{1}.jpg'.format(paths, x)) x += 1 print(x)download_img("D:\\experiments\\datasets\\Ashtray_pics\\")。

运行上述爬虫程序即可完成该网站的图片数据的抓取工作。