ARtcgb 发表于 2021-4-28 07:32

【Python】实现批量搜索下载Wallhaven站壁纸功能

本帖最后由 ARtcgb 于 2021-4-28 07:36 编辑

## 简介
**功能介绍:** 搜索、爬取并下载wallhaven.cc壁纸站的壁纸,自动建立文件夹。

**环境需求:**
Python 3
requests库
BeautifulSoup库
Faker库(可选)

**使用方法:** 下载直接运行源码即可。

## 爬取思路
**壁纸站的搜索链接构成:**https://wallhaven.cc/search?q= `搜索关键词` &page= `页码`。

先找到搜索页面里所有`a, class_="preview"`标签,获取里面的`href`值存入列表。

然后进入图片子界面,找到`img, id='wallpaper'`,获取他的`src`,访问链接并下载即可。

## 源代码
```
import requests
from faker import Faker
from bs4 import BeautifulSoup
import os

f = Faker()
HEADERS = {
    'user-agent': f.user_agent()
}
search = input("请输入搜索关键词:")
num = 0
list_html = []
for page in range(1, 6):
    html = "https://wallhaven.cc/search?q=" + search + "&page=" + str(page)
    requests_html = requests.get(html, headers=HEADERS)

    bs_html = BeautifulSoup(requests_html.text, "lxml")
    for link in bs_html.find_all('a', class_="preview"):
      image_link = link['href']
      if image_link:
            list_html.append(image_link)
            num += 1
            print("已获取第" + str(num) + "个链接")

a = os.path.exists("./壁纸/")
if a:
    print("文件夹已存在,PASS")
else:
    os.mkdir("./壁纸/")
    print("文件夹建立成功")
b = os.path.exists("./壁纸/" + search)
if b:
    print("文件夹已存在,PASS")
else:
    os.mkdir("./壁纸/" + search)
    print("文件夹建立成功")

num = 0
past_download_list = []

for html_link in list_html:
    requests_html = requests.get(html_link, headers=HEADERS)
    bs_html = BeautifulSoup(requests_html.text, "lxml")
    img = bs_html.find('img', id='wallpaper')
    r = requests.get(img['src'])
    num += 1
    with open("./壁纸/" + search + "/" + str(num) + ".png", 'wb') as f:
      f.write(r.content)
      print("第" + str(num) + "张写入成功")

```

## 教程
### 如何指定下载壁纸数量(默认120)
修改代码第十三行,调整爬取的页码数量(从1-6),一页20张.
```
for page in range(1, 6):
```

### 如何调整下载路径
修改如下几行代码。
```
a = os.path.exists("./壁纸/")
if a:
    print("文件夹已存在,PASS")
else:
    os.mkdir("./壁纸/")
    print("文件夹建立成功")
b = os.path.exists("./壁纸/" + search)
if b:
    print("文件夹已存在,PASS")
else:
    os.mkdir("./壁纸/" + search)
    print("文件夹建立成功")
```
```
with open("./壁纸/" + search + "/" + str(num) + ".png", 'wb') as f:
```

吾爱有三 发表于 2021-4-28 12:07

感谢大佬,我终于成功了 成功了。由于新安装的,基本什么库都没有,我直接用的ANACONDA的库,比较全,稍微修改了一学就OK了

https://wallhaven.cc/上面的壁纸一直都是我比较喜欢的感谢大佬写的代码,让我解放双手

不成功的兄弟们,可以先看看自己的库全不全,再者就是复制的代码可能会有区别,对照一下,最后,由于这个网站不是国内的,所以有的时候你懂的!!!

ccwjj 发表于 2021-4-28 07:43

学习了,感谢分享

lfm333 发表于 2021-4-28 08:16

感谢楼主分享

yjn866y 发表于 2021-4-28 08:20

g天天学习,,,,谢谢分享

吾爱有三 发表于 2021-4-28 10:18

C:\Users\admin\Desktop\Snipaste_2021-04-28_10-16-05.png
大佬我这是怎么回事啊?

氵怪 发表于 2021-4-28 10:37

吾爱有三 发表于 2021-4-28 10:18
大佬我这是怎么回事啊?

百度一下就知道了

ARtcgb 发表于 2021-4-28 10:55

吾爱有三 发表于 2021-4-28 10:18
大佬我这是怎么回事啊?

没装第三方库。。。
自己pip安装一下

吾爱有三 发表于 2021-4-28 11:00

大佬啊,我运行就报错,如图

吾爱有三 发表于 2021-4-28 11:01

我看你写了个可选。。。。。。。{:301_982:}

ARtcgb 发表于 2021-4-28 11:33

吾爱有三 发表于 2021-4-28 11:01
我看你写了个可选。。。。。。。

可选就是没有安装就去掉相关代码啊。。。

这种报错信息下次你去百度搜一下都能看到解决方案。
页: [1] 2
查看完整版本: 【Python】实现批量搜索下载Wallhaven站壁纸功能