用Python爬取wallhaven高清原图

第一步:整理思路

首先要知道自己要干嘛,怎么干,去哪里干?
	要干嘛?
	我们要爬取图片,而且我们要原图。
	怎么干?
	这里我用的到的语言是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还是一门很值得小白学习的一门语言,该语言语法简单,通俗易懂,用来爬虫是真的很香!

最后希望,此篇文章能对你有所帮助!

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值