wallhaven的热度壁纸爬取(入门级爬虫)——python

wallhaven的热度壁纸爬取

首先介绍一下wallhaven

wallhaven这个壁纸网站是一个壁纸质量十分高的网站,最主要它还是一个免费的壁纸网站,于是突发奇想想去爬取一下里面的热度壁纸,在博客上看过许多大佬的作品,终于有一点思路,于是借鉴了这位大佬的成果。
大佬的博客链接:
https://blog.csdn.net/qq_29367075/article/details/111940621

过程

1.我们要开始爬虫,需要先设置一个headers,将我们书写的爬虫伪装成为浏览器,打开我们的网页,按下F12,按照如下步骤获取user-agent
在这里插入图片描述
2.第二步当然是获取需要爬取的网站网址,这里我们爬取的是wallhaven热度榜,网址如下:https://wallhaven.cc/toplist?page=1

在这里插入图片描述
3.使用request包获取网页图片缩略图的链接,获取链接我们使用正则,通过观察我们发现图片的缩略图都是在w/后面有6位字符,所以我们在使用正则进行匹配的时候可以这样:

        reg = r"""<a.*?href="(https://wallhaven.cc/w/......)".*?</a>"""
        reg = re.findall(reg, wall_txt)

在这里插入图片描述
4.之前我们获取的还只是我们想要获取图片的外衣,所以我们还需要使用request进行请求
在这里插入图片描述
我们不难发现这个图片的真实链接,这时候我们想要获取图片就简单的多,通过观察我们发现这个图片的链接和缩略图的链接是有关联的,(主要还是在大佬的博客中发现的),如图:
在这里插入图片描述
所以我们在获取图片的链接的时候可以先对缩略图的链接进行字符串的分割,之后在对分割后的最后一项进行切片,最后拼接起来就完成了图片链接的获取。
5.最后由于网页有翻页,所以我们在外面套上一个for循环,使其在吧当页的内容获取完成后可以继续获取下一页。完整代码在下面;

import time

import requests
import re
for i in range(17, 127):
    Referer = 'https://wallhaven.cc/toplist?page='
    Referer_url = Referer + str(i)
    print(f"开始第{i}页")
    headers = {
        "Referer": 'https://wallhaven.cc/?',
        'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
        'Accept-Language': 'en-US,en;q=0.8',
        'Cache-Control': 'max-age=0',
        'Connection': 'keep-alive'
    }  ###设置请求的头部,伪装成浏览器
    response = requests.get(headers=headers, url=Referer_url)
    if response.status_code == 200:
        wall_txt = response.text
        reg = r"""<a.*?href="(https://wallhaven.cc/w/......)".*?</a>"""
        reg = re.findall(reg, wall_txt)
        pass
        for j in reg:
            print(j)
            sp = j.split('/')
            last = sp[4]
            new_last = sp[4][0:2]
            image_url = 'https://w.wallhaven.cc/full/{}/wallhaven-{}.jpg'.format(new_last, 			last)           
             res = requests.get(url=image_url, headers=headers)
            print(res, image_url)
            with open('D:/wallhaven/{}.jpg'.format(last), "wb") as f:
                f.write(res.content)
                tt = time.localtime()
                print(f'{tt[3]}时{tt[4]}分{tt[5]}秒')
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值