小白第一次尝试爬取电脑壁纸

查看 428|回复 10
作者:PLA-heart   
作为一个潜水好久的小白,最近突然想搞点壁纸,就去学了一下爬虫,实现的是爬取wallhaven该网站的壁纸,因为不想要其他像手机端之类的的壁纸,就把壁纸长度限制在了我电脑的分辨率1920x1080,其他参数想改的可以根据网页访问请求信息自己修改,可以去浏览器重新获取一下菜鸡一个,请大家多多指教{:1_893:}  
如果代码不可用了,可能是因为header里面的cookie失效了,可以找图片中的修改试试


QQ截图20221227195909.png (771.86 KB, 下载次数: 0)
下载附件
2022-12-27 19:59 上传

# !/usr/bin/env python
# -*- coding:utf-8 -*-
# @FileName  :wallhaven_demo.py
# @Time      :2022/12/27 11:51
# @Author    :Mr_Ren
import os
import time
import requests
from pyquery import PyQuery
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
# os.environ["TF_CPP_MIN_LOG_LEVEL"]='1' # 这是默认的显示等级,忽略所有信息
os.environ["TF_CPP_MIN_LOG_LEVEL"] = '2'  # 忽略 warning 和 Error
# os.environ["TF_CPP_MIN_LOG_LEVEL"]='3' # 忽略 Error
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
    "cookie":"_pk_id.1.01b8=a8be8d7f7ae37b1a.1672112746.; _pk_ses.1.01b8=1; XSRF-TOKEN=eyJpdiI6InJkYVFyZ0tJZHlUMmxKZCtDRjNhS0E9PSIsInZhbHVlIjoiR3paVG5KUnNOaTg1a3RmNHF6NXJqaFpsVHNUeXo5YWY2RzlDOFJ4b1dCeDdvV29CMDNPZ29zWWhqUld3TEgyUiIsIm1hYyI6ImQyM2EwZjQwYWU4YjM1N2E2ZDk2MTk1ZDZmMTY4YWQ2ZDVhZjRkZTE4NDM4ZDFmN2E1OGQ5YWU3NjQ1NzE4ODUifQ==; wallhaven_session=eyJpdiI6IndSZHJXYklNME00R25ScVFhNEN5cUE9PSIsInZhbHVlIjoiZGxJa290QkpkTmRaZ3NWZW5GbkR1aE8zZ1hMNE02bjFzWHJISkRBdGVqaW1XUUFFRGFLNDlcL2lQTlZpWVZnOFoiLCJtYWMiOiIyYTg4Y2MzODY2ZTEwYjE4ZjkyMzEzMjNjNDE3ZmNjNGZiYzhiMWY1NDdjYWJiZDA3YWM2ZWU2OTc5YjkwZjA0In0="
}
#设置参数 比如分辨率 其他的可自行探索
params = {
    "resolutions":"1920x1080"
}
# 获取html
def get_html_info(page):
    # f是format函数的缩写, 用于格式化输出。
    url = f'https://wallhaven.cc/search?categories=111&purity=100&topRange=1M&sorting=toplist&order=desc&page={page}'
    resp = requests.get(url,headers=headers,params=params)
    resp_html = resp.content
    # print(resp_html)
    return PyQuery(resp_html)
if __name__ == "__main__":
    #要爬取的页数
    count = 10
    #图片名
    cnt = 1
    for i in range(count):
        html = get_html_info(i)
        pic_urls = []
        # 获取当前页所有缩略图包含的信息
        items = html("#thumbs >  .thumb-listing-page > ul > li").items()
        for item in items:
            # 获取存放在缩略图信息中的缩略图原图网址
            url = item("a").attr("href")
            pic_urls.append(url)
            # print(url)
        for pic_url in pic_urls:
            resp = requests.get(pic_url, headers=headers)
            html = PyQuery(resp.content)
            # 获取id为wallpaper的img标签里面是src属性 也就是原始图片
            final_url = html("#wallpaper").attr("src")
            pic = requests.get(final_url, headers=headers).content
            if not os.path.exists("Wallhaven"):
                os.mkdir("Wallhaven")
            # 因为爬取的图片名字是乱字母,就以数字作为名
            with open("Wallhaven/" + str(cnt) + final_url[-4:], "wb") as f:
                f.write(pic)
                print("第" + str(cnt) + "张图片下载完毕")
                cnt = cnt + 1
        #防止一次性爬太多 ip被封了
        time.sleep(2)
    print("爬取结束")

壁纸, 缩略图

xinliu   

似乎不需要cookie啊。。。
而且你爬的是缩略图啊。。。。
缩略图:https://th.wallhaven.cc/small/9d/9d6wg8.jpg
原图:https://w.wallhaven.cc/full/9d/wallhaven-9d6wg8.jpg
找不同替换一下。。。。
xinliu   


llyaomo 发表于 2022-12-28 09:03
很棒,必应壁纸是不是还有更高的分辨率,1080当下略微不足

可以看看api文档
https://www.apifox.cn/apidoc/shared-961673e6-161d-4129-88b6-e7b0a3b86cf1/doc-1696238
chesion001   

欢迎来爬我的壁纸网站:https://www.bimg.cc/
King1993   


xinliu 发表于 2022-12-27 23:47
欢迎来爬我的壁纸网站:https://www.bimg.cc/

你这里的壁纸简直太棒了。不用到处找壁纸了
uno668   

很棒,谢谢
ofw   

好东西,谢谢分享
markdik31   


xinliu 发表于 2022-12-27 23:47
欢迎来爬我的壁纸网站:https://www.bimg.cc/

通过JS文件动态加载的
kdroid27   

谢谢大神的教导,分享
zrfxcndsxue0606   

很有用,学习一下
您需要登录后才可以回帖 登录 | 立即注册

返回顶部