吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4295|回复: 62
收起左侧

[Python 原创] 批量爬取wallhaven壁纸

  [复制链接]
gebiafu 发表于 2022-11-14 00:09

批量爬取wallhaven壁纸

1、导入需要用到的模块

import requests
from bs4 import BeautifulSoup

2、获取网页内容

link = 'https://wallhaven.cc/toplist'
# 请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}

res=requests.get(url=link,headers=headers).text
print(res)

大概是这样的

在这里插入图片描述
3、使用浏览器元素抓取 获得图片元素所在位置

在这里插入图片描述
4、解析数据,获取图片链接;从上图可知class id=preview

# 解析数据
soup = BeautifulSoup(res,'html.parser')
items=soup.find(class_='preview')['href']
print(items)

控制台打印
结果如下:

C:\Users\w\AppData\Local\Programs\Python\Python37\python.exe D:\PY\catchVideos\test.py 
https://wallhaven.cc/w/zygeko

5、拿到的地址为图片预览页面,还需要再次解析才能获得图片的真实路径;同上

resUel=requests.get(url=items,headers=headers).text
soup1 = BeautifulSoup(resUel, 'html.parser').find('img', id='wallpaper')['src']
print(soup1)

得到最终图片链接,点击可以打开图片
https://w.wallhaven.cc/full/zy/wallhaven-zygeko.jpg

6、获取图片的二进制内容并保存到本地,根据链接可知为jpg格式的图片

ts_content = requests.get(url=soup1, headers=headers).content
# 保存图片
soup1_content = requests.get(url=soup1, headers=headers).content
with open('e:\\' + soup1[-20:-4] + '.jpg', mode='ab') as f:
    f.write(soup1_content)

在这里插入图片描述

这样只是获取了一张图片,下面改成批量获取,改造步骤4

    # 解析数据
    soup = BeautifulSoup(res.text,'html.parser')
    items=soup.find_all(class_='preview')

    for item in items:
        link=item['href']
        resUel=requests.get(url=link,headers=headers).text
        soup1 = BeautifulSoup(resUel, 'html.parser').find('img', id='wallpaper')['src']
        soup1_content = requests.get(url=soup1, headers=headers).content
        with open('e:\\img\\' + soup1[-20:-4] + '.jpg', mode='ab') as f:
            f.write(soup1_content)

>这里使用find_all获取所有符合条件的元素,得到一个包含很多链接的数组;循环步骤5、6,即可实现批量保存

在这里插入图片描述

上面只会获取一页的图片,下面再次改造,把这些方法定义为函数,页数和链接作为参数,批量爬取多页的图片;

import requests
from bs4 import BeautifulSoup
# 循环爬取壁纸网站图片

def catchImg(url,page):

    # 请求头
    headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
    }

    res=requests.get(url=url+'?page='+page,headers=headers)
    # 解析数据
    soup = BeautifulSoup(res.text,'html.parser')
    items=soup.find_all(class_='preview')

    for item in items:
        link=item['href']
        resUel=requests.get(url=link,headers=headers).text
        soup1 = BeautifulSoup(resUel, 'html.parser').find('img', id='wallpaper')['src']
        soup1_content = requests.get(url=soup1, headers=headers).content
        with open('e:\\img\\' + soup1[-20:-4] + '.jpg', mode='ab') as f:
            f.write(soup1_content)
            print(soup1)

for i in range(10):
    page=2
    link = 'https://wallhaven.cc/toplist'
    catchImg(link, str(page))
    page += 1

这里我们看一下图片的大小,不是缩略图

在这里插入图片描述

这个网站比较简单一些,不过壁纸是真的nice!

免费评分

参与人数 14吾爱币 +16 热心值 +12 收起 理由
ddinging + 1 谢谢@Thanks!
tgbbhn + 1 我很赞同!
wang2747 + 1 + 1 热心回复!
jamessteed + 1 + 1 谢谢@Thanks!
431761794 + 1 我很赞同!
lifan02 + 1 + 1 我很赞同!
wushaominkk + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
lishengde322 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
timeni + 1 + 1 用心讨论,共获提升!
h512h + 1 我很赞同!
jiahaoya + 1 我很赞同!
qwasdzxcvzt + 1 + 1 鼓励转贴优秀软件安全工具和文档!
YSJohnson + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
why3316 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

叫我小白呀 发表于 2022-11-15 11:40
巧了,上个星期我也写了个,专门针对收藏夹的,图片太大了,爬起来很慢我这宽带下行最高才10兆
 楼主| gebiafu 发表于 2022-11-14 10:17
YSJohnson 发表于 2022-11-14 08:53
只获取了24张就没了怎么办
把for i in range的范围改成了30后,链接有获取新的和重复的,但 ...

应该是有限制,topList应该只能抓到48张,换个链接试试,https://wallhaven.cc/hot
wjqok 发表于 2022-11-14 01:16
我原来手动把这个网站4k以上的壁纸扒完了,其它有几个网站也扒完了,
XiaoYxx 发表于 2022-11-14 01:29
不错,我也去试试
adlom0530 发表于 2022-11-14 02:03
多谢分享,我去试试!
long8818 发表于 2022-11-14 04:49
多谢分享,正需要
sxtyys 发表于 2022-11-14 07:45
多谢分享,我去试试!
stvk1986 发表于 2022-11-14 07:48
看了看 学了学 没学会

免费评分

参与人数 1吾爱币 +1 收起 理由
祁连涵畅 + 1 我很赞同!

查看全部评分

jinos 发表于 2022-11-14 08:04
好东西,看会了,一学就废
jiahaoya 发表于 2022-11-14 08:06
可以跟着搞一搞
ADMMUU 发表于 2022-11-14 08:16
正好需要壁纸,试试
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表