第一步:整理思路
首先要知道自己要干嘛,怎么干,去哪里干?
要干嘛?
我们要爬取图片,而且我们要原图。
怎么干?
这里我用的到的语言是python,用python爬取更为简单。
去哪里干?
今天我们要爬取的是一个国外的网址'https://wallhaven.cc’这个网址的图片还是很nice的
好了现在准备工作有了,那就正式开始爬取图片
第二步:分析网址
我们先进入到网站首页
进入到首页我们发现这个是类似于百度一样的是靠通过关键字搜索,然后匹配出来的图片。
然后随便输入一个关键字进行搜索试一下
这里我们可以看到,我搜索的关键字是‘boy’,得到了现在这个页面,接下来我们随便找个图片,分析一下网址的结构,
进入开发者模式可以看到网页源代码,我们所要获取的图片是在‘<a’标签里的,只不过你会发现这里有两个非常相似的链接
第一个链接是‘.jpg’结尾的那它肯定就是一个图片链接,那我们就可以先通过几行简单的代码下载一下,或者直接复制链接打开,看是不是我们所要的高清原图
很明显看到这个链接是个缩略图,不是我们想要的图片链接
第二个链接我们用同样的方式进行操作
没错这个就是我们想要的得要的图片,这里我们一样先进入开发者模式,查看网站源代码,在从源代码中得到图片的地址
这个就是我们所要下载的图片地址,到了这里网站分析就ok了,现在整理一下思路:
1:先进入到网站首页通过关键字搜索得到图片
2:接着分析网页源代码发现了原图的链接
3:然后通过原图链接得到了原图下载链接
一切准备就绪,开始实战吧!
第三步:编写代码
通过以上分析,得到的思路也就比较明确了
代码如下:
import re
import requests
import time
import os
if __name__=='__main__':
header={
'accept':'text/html, */*; q=0.01',
'accept-language':'zh-CN,zh;q=0.9',
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36',
}
Q=str(input('请输入你要搜索的内容【仅支持英文】:'))
N=int(input('请输入你要下载图片的数量:'))
if os.path.exists('D:/wallhaven/'+Q)==False: #检查目录,如果目录不存在则返回一个False,然后自动创建一个目录
os.mkdir('D:/wallhaven/'+Q)
counts = 1 #链接次数
num = 1 #控制页数
html = []
Tag=True
print('正在获取资源,请等待------')
while Tag==True:
if num == 1:
url='https://wallhaven.cc/search?q='+Q
else:
url='https://wallhaven.cc/search?q='+Q+'&page='+str(num)
try:
requ=requests.get(url,timeout=30,headers=header)
requ.encoding='utf-8'
except:
print('图片资源获取失败')
findurl='<a class="preview" href=(.*?) target.*?></a>' #正则匹配
lowhtml=re.findall(
findurl,requ.text,re.S|re.M
)
for kk in lowhtml:
print('已获取'+str(counts)+'张图片资源')
counts += 1
l=kk.replace('"','').strip() #去除链接的双引号和空格
try:
newhtml=requests.get(l,timeout=30)
newhtml.encoding = 'utf-8'
except:
print('图片资源获取失败')
continue
cc='<img id="wallpaper" src="(.*?)" alt.*?></div>'
newfind=re.findall(cc,newhtml.text,re.M|re.S)
for I in newfind:
if I is None:
print('图片资源获取失败')
else:
html.append(I) #把匹配到的链接存放到html列表里
if counts>N: #当获取的链接大于你想要的链接时,就得跳出整个循环
Tag = False
break
num += 1
print('---图片资源已全部获取完毕,正在准备下载操作')
print('---过程稍慢,请耐心等待!')
Count = 1
for img in html:
print('正在下载第'+str(Count)+'张图片')
try:
photo=requests.get(img,timeout=20)
except:
print('图片下载失败,自动下载下一张')
Filepath=r'D:/wallhaven/'+Q+'/'
fpath=open(Filepath+Q+str(Count)+'.jpg','wb+' )
fpath.write(photo.content)
fpath.close()
time.sleep(3)
Count+=1
print('---图片已全部下载完毕')
因为这个网址是国外的,所以下载速度比较慢,
本人亲测下载有效,不过代码也是刚写出来还没有优化,也存在几个小bug(建议下载图片数量不要一次大于100张),目前还没有解决,希望发现的小伙伴们及时提出,我加以改正。
python还是一门很值得小白学习的一门语言,该语言语法简单,通俗易懂,用来爬虫是真的很香!
最后希望,此篇文章能对你有所帮助!