简单壁纸爬虫
壁纸网站:FACETS.la
壁纸风格如下图,我挺喜欢的,于是设计一个爬虫,自动保存网站所有壁纸.
ps:
1.网站一共300多张壁纸,每张大小不到1M,全部壁纸150M大小.
2.爬虫语言:python,还需要用到而外的requests,bs4库.
网站壁纸风格如下:
说一下简单思路:
1.获取图片链接.
1.1:先获取网站每一页的链接
打开网站会发现一个规律,第n页的链接为:"facets.la/offset/(n-1)*63/"
比如:
第一页是facets.la/offset/0/,
第二页是:facets.la/offset/63/.
1.2:获取每页的链接后,获取每页中壁纸的链接.
打开浏览器开发者选项,选定一张壁纸查看源码,会发现每张图片下都有两个链接,href和src.链接src指向壁纸的小图.链接href跳转到该壁纸的详情页,在详情页有壁纸大图的下载链接.
大图链接为:facets.la/wallpaper/W_2013_238.jpg
小图的链接:facets.la/thumbnail/T_2013_238.jpg
所以这里获取壁纸大图链接有两种可行思路:
1.2.1:思路一:依次打开每页壁纸,先获取该页中所有壁纸详情页链接(href);再依次进去壁纸详情页,获取壁纸大图链接.
1.2.2:思路二:依次打开每页壁纸,先获取该页中所有小图链接,再直接通过规律变换成大图链接
思路一和思路二都很容易实现.差别在于:思路一会访问更多次该网站,思路二壁纸的大图链接不是直接从网站获取的,可能会出现错误.
做这种壁纸网站也挺不容易的,这里选择思路二,尽量减少网站负担.对于可能出现的错误也可以查验一下然后解决.
下面是代码:
import requests from bs4 import BeautifulSoup import re import os def get_small_url(): for i in range(1,2): a=(i-1)*63 home_url='http://www.facets.la/offset/'+str(a)+'/' home_html = requests.get(home_url) bs = BeautifulSoup(home_html.text, 'html.parser') small_urls = bs.findAll('img',{'src':re.compile('.*\.jpg')}) url='' for small_url in small_urls: small_url=small_url['src'] url=url+small_url return(url) def get_bigimg(): #用正则截取所有复合要求字符串,返回一个列表 for img_url in re.findall(r'\_\d+.{7,20}\.jpg',img_urls): #拼接成大图的链接 img_url="http://www.facets.la/wallpaper/W"+img_url #获取图片链接的哈希值,用以命名图片 a=hash(img_url) b=0
#图片保存的位置 image_name="D:/python/image1/"+str(a)+".jpg" try: image=requests.get(img_url) print("正在下载:"+img_url) if image.status_code == 200: with open(image_name,"wb") as f: f.write(requests.get(img_url).content) b+=1 break except requests.ConnectionError: print("无效链接>>>>:"+img_url) print("一共下载了"+" "+str(b)+" "+"张图片") img_urls=get_small_url() get_bigimg()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了