吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2320|回复: 37
收起左侧

[Python 原创] 做了个入门级的必应壁纸爬虫

[复制链接]
hoochanlon 发表于 2023-5-5 21:56

准备工作

bing壁纸网页元素及API分析

词组与时间,可行。

http://www.isummer.cn/#/search?searchVal=森林
http://www.isummer.cn/#/search?searchDate=20230429

格式固定,可作为重命名的选项。

<div data-v-61a4e448="" class="x_item_description">
    <h3 data-v-61a4e448="">约书亚树国家公园上空的银河,美国加利福尼亚州(© Schroptschop/Getty Images)</h3>
    </div>

图片链接元素定位,将 800x480 换成 1920x1080,可行。

<img data-v-61a4e448="" src="https://cn.bing.com/th?id=OHR.RebelBase_ZH-CN0484516261_800x480.jpg" alt="" class="x_item_img">

不过,我个人因兴而起,也是因为懒,最后选型是json。

测试过程

直接使用原始的图片地址保存,会带有一些额外的参数或随机字符串,导致无法正确下载或者保存图片。因此,对于这种情况,最好先做好分割,得出实际的图片下载地址,再根据需要合并,得到本地保存名称。

request.json(),它返回HTTP请求正文解析后的JSON对象,使用request.json()方法可以将其转化为Python字典对象。

# 循环获取返回的图片地址
for i in request.json()["data"]["list"]:
    # "wpUrl" 字符串中提取出第一个以 & 符号为分隔符的第一个字符串
    picture_list = i["wpUrl"].split("&")[0]
    # print(picture_list) 返回结果:/th?id=OHR.SouthPadre_ZH-CN8788572569_1920x1080.jpg
    # 采取策略:先分割后拼接
    picture_name = picture_list.split(".") # 返回结果:['/th?id=OHR', 'SouthPadre_ZH-CN8788572569_1920x1080', 'jpg']
    print(picture_name)

通过 3/library/re.split,将列表字串进行进一步分割,将“.”和“_”分割。

picture_name=re.split("[._]", picture_list) # 返回结果:['/th?id=OHR', 'SouthPadre', 'ZH-CN8788572569', '1920x1080', 'jpg']

初试效果

成型及源码

这回就路径简单做了下跨平台:

  • macOS: ~/Pictures/bing
  • Windows:c:/users/用户名/Pictures/bing

附录源码:https://github.com/hoochanlon/ihs-simple/blob/main/d-python/get_bing_wallpapers.py

import requests
import re
import os

# 模拟浏览器请求
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"
}

# getWpList json 部分参数
# data = {
#     "pageNum": 1,
#     "pageSize": 9
# }

# 循环3次,即从首页到第三页
# "pageNum" 页码;pageSize,最多9张图。
for i in range(4):
    data = {
        "pageNum": i,
        "pageSize": 9
    }

    # 请求图片网站API,调用json参数
    request = requests.post('http://www.isummer.cn/x_site/wp/getWpList', json=data, headers=headers)

    # 拼接用户主目录下的 Pictures 文件夹路径
    default_pictures_dir = os.path.join(os.path.expanduser("~"), "Pictures")
    # 拼接成指定保存的图片目录
    picture_path = os.path.join(default_pictures_dir, "bing")
    # 如果目录不存在则创建
    if not os.path.exists(picture_path):
        os.makedirs(picture_path)

    # 测试现象
    # /th?id=OHR.Popocatepetl_ZH-CN5483138337_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp

    # 循环获取返回的图片地址
    for i in request.json()["data"]["list"]:
        # "wpUrl" 字符串中提取出第一个以 & 符号为分隔符的第一个字符串
        picture_list = i["wpUrl"].split("&")[0]
        # print(picture_list) 返回结果:/th?id=OHR.SouthPadre_ZH-CN8788572569_1920x1080.jpg
        # 采取策略:先分割后拼接
        # picture_name = picture_list.split(".") # 返回结果:['/th?id=OHR', 'SouthPadre_ZH-CN8788572569_1920x1080', 'jpg']
        picture_name=re.split("[._]", picture_list)

        # 拼接图片保存路径
        save_path = os.path.join(picture_path, f"{picture_name[1]}.{picture_name[4]}")

        # 请求图片的下载地址
        request = requests.post(f'https://cn.bing.com{picture_list}')
        # 保存图片到本地
        with open(save_path, "wb") as f:
            f.write(request.content)

        print("下载完成:" + save_path)

在线测试

python -c "$(curl -fsSL https://ghproxy.com/https://raw.githubusercontent.com/hoochanlon/ihs-simple/main/d-python/get_bing_wallpapers.py)"

免费评分

参与人数 4吾爱币 +8 热心值 +4 收起 理由
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
davinic121 + 1 + 1 热心回复!
random1 + 1 + 1 用心讨论,共获提升!
吾爱有三 + 1 + 1 用心讨论,共获提升!

查看全部评分

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

myseil 发表于 2023-5-7 15:11
试试https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=10&nc=1612409408851&pid=hp&FORM=BEHPTB&uhd=1&uhdwidth=3840&uhdheight=2160
coolfire1983 发表于 2023-5-5 22:19

回帖奖励 +15 CB吾爱币

感谢楼主分享 学习了 python越来越强大了
382PJ 发表于 2023-5-5 22:30

回帖奖励 +15 CB吾爱币

感谢楼主分享

我是来拿CB 的

回复本帖可获得 15 CB
sihua3000 发表于 2023-5-5 22:31

回帖奖励 +15 CB吾爱币

感谢分享,有空试试
wors66 发表于 2023-5-5 22:35
学习学习,感谢分享
JackeyLoveONE 发表于 2023-5-5 22:37
感谢楼主分享

我是来拿CB 的
欲求清风伴凫水 发表于 2023-5-5 22:39

学习学习,感谢分享
alingwin 发表于 2023-5-5 23:05
感谢分享,有空试试
htxz2022 发表于 2023-5-6 00:04
最近刚开始学Python,刚好练练手
洋葱哥哥 发表于 2023-5-6 00:15
学习了,感谢分享技术
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-12-27 17:06

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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