当前位置: 首页 > 科技观察

20行Python代码批量抓取免费高清图片!

时间:2023-03-16 16:45:14 科技观察

相信大家在工作中可能经常会用到PPT。你在制作PPT的过程中是否有这样的困惑,那就是哪里可以找到高清无版权的图片素材?强烈推荐ColorHub,一个允许个人和商业使用的免费图片网站,真的很酷!从她的主页界面来看,说不定你会爱上她。那么,如何将网站中的图片存储到本地(比如比较关注数据相关的素材)?如果你做了,你可以随心所欲地挑选精美的图片制作PPT,无需网络也能随时随地查看属于自己的图片库。本文想和大家分享的是解决这个问题的方法。众所周知爬虫思路,爬取一个图片网站往往需要三层网页链接。为了直观的理解这三层链接,可以看下图:如果对图片方向感兴趣,就会进入图片列表页面,如下图:子级页面:指点击某一个图片列表页中的图片,然后是相应的图片详情页,如下所示:目标页:最后是在图片详情页中抓取高清图片,这张图片是源中的图片链接网页代码,看起来是这样的:因此,爬虫抓取图片的最终目的是找到高清图片对应的链接。下面通过代码的介绍,来呈现三层链接的搜索和请求过程。1#导入第三方包2importrequests3frombs4importBeautifulSoup4importrandom5importtime6fromfake_useragentimportUserAgent78#通过循环实现多页图片9forpageinrange(1,11):10#生成顶级图片列表页的链接11fst_url=rhttps://colorhub.me/search?tag=data&page={}.format(page)12#生成UA,用于设置爬虫请求头13UA=UserAgent()14#向顶部链接发送请求15fst_response=requests.get(fst_url,headers={User-Agent:UA.random})16#分析顶级链接源码17fst_soup=BeautifulSoup(fst_response.text)18#根据HTML标记规则,返回子级图片详情页的链接和图片名称19sec_urls=[i.find(a)[href]foriinfst_soup.findAll(name=div,attrs={class:card})]20pic_names=[i.find(a)[title]foriinfst_soup.findAll(name=div,attrs={class:card})]21#为每个子级Link循环22forsec_url,pic_nameinzip(sec_urls,pic_names):23#为爬虫请求头设置生成UA24UA=UserAgent()25ua=UA.random26#向子层链接发送请求27sec_response=requests.get(sec_url,headers={User-Agent:ua})28#分析子层链接源码29sec_soup=BeautifulSoup(sec_response.text)30#根据HTML标记规则,返回图片link31pic_url=https:+sec??_soup.find(img,{class:card-img-top})[src]32#向图片发送请求link33pic_response=requests.get(pic_url,headers={User-Agent:ua})34#在本地写入二进制图片数据(即把图片存到本地)35withopen(pic_name+.jpg,mode=wb)asfn:36fn.write(pic_response.content)37#生成一个随机秒数,不用留38seconds=random.uniform(1,3)39time.sleep(seconds)不难发现代码的核心部分只有16行,还是很简单的,我们快速测试一下代码(如果你对某个方面感兴趣,比如商业、建筑、植物等,可以通过搜索找到顶级页面链接,替换代码中的fst_url值).运行以上代码后,会从ColorHub网站抓取10页图片,共325张高清图片,如下图:

猜你喜欢