当前位置: 首页 > article >正文

python爬取newbing每日壁纸

1、研究网页结构

本次爬取的网站是:https://bing.wdbyte.com/zh-cn/

这个链接好像不是newbing壁纸的官方,但其中每天也会更新newbing的壁纸。

1.1、分析网页结构

通过研究可以发现,网页上的图片链接都是有固定形式的,所以可以考虑使用正则表达式的方式筛选出这些链接

1.2、写正则表达式

正则表达式的主要功能就是进行模式匹配,给定一定形式的字符串,在大量文本中挑选出符合要求的字符串。

通过点击不同的图片,可以发现这些链接的特点是:首位都是固定的,不同之处进在于中间部分ID=的值不一样。据此可以设定如下匹配模式:
 

pattern = re.compile(r'https://cn\.bing\.com/th\?id=.*?\.jpg&rf=LaDigue_UHD\.jpg&pid=hp&w=3840&h=2160&rs=1&c=4')

且这些链接都是嵌入在<a href> (a标签且有href属性的)。

2、完整代码

代码共有两个文件:①get_picture_link.py和②download_picture.py。

第一个文件是通过网页,利用正则表达式筛选出所有图片下载链接,第二个文件实在第一个文件的基础上,根据得到的图片链接,依次下载所有图片。

get_picture_link.py

# 获得所有图片的链接,并写入Link.txt文档中

import time

import requests
import random
from bs4 import BeautifulSoup
import re
from datetime import datetime, timedelta

agent_list = [
	"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
	"Avant Browser/1.2.789rel1 (http://www.avantbrowser.com)",
	"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.0 Safari/532.5",
	"Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.310.0 Safari/532.9",
	"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.514.0 Safari/534.7",
	"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/9.0.601.0 Safari/534.14",
	"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/10.0.601.0 Safari/534.14",
	"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20",
	"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.27 (KHTML, like Gecko) Chrome/12.0.712.0 Safari/534.27",
	"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.24 Safari/535.1",
	"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.120 Safari/535.2",
	"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.36 Safari/535.7",
	"Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko/2008072421 Minefield/3.0.2pre",
	"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10"
	]
header = {'User-Agent': random.choice(agent_list)}


# 获取每张图片的链接
def get_link(url):
	# 图片链接的正则化表达式
	pattern = re.compile(r'https://cn\.bing\.com/th\?id=.*?\.jpg&rf=LaDigue_UHD\.jpg&pid=hp&w=3840&h=2160&rs=1&c=4')

	res = requests.get(url, headers=header)
	soup = BeautifulSoup(res.content, 'html.parser')

	# 存储匹配到的链接
	matches = []

	# 链接都在<a>标签的href属性中
	a_tags = soup.find_all('a', href=True)  # 首先找到存在href的所有a标签

	# 遍历所有的<a>标签
	for tag in a_tags:
		# 获取href属性
		href = tag['href']
		# 使用正则表达式查找匹配的链接
		if pattern.search(href):
			matches.append(href)

	# 链接写入文本
	with open('links.txt', 'a') as file:
		# 遍历所有匹配的链接
		for match in matches:
			# 将每个链接写入文件,并添加换行符
			file.write(match + '\n')

	print("链接已存储到links.txt文件中!")


if __name__ == "__main__":
	urls = []

	# 设置爬取的起始-结束日期,代码中起止时间为2023.2-2024.11
	start_date = datetime(2023, 2, 1)
	end_date = datetime(2024, 12, 1)

	# 当前日期
	current_date = start_date

	# 循环直到当前日期超过结束日期
	while current_date <= end_date:
		# 格式化日期为字符串
		date_str = current_date.strftime('%Y-%m')
		urls.append("https://bing.wdbyte.com/zh-cn/" + date_str)

		# 将当前日期增加一个月
		current_date += timedelta(days=31)  # 这种方法简单但不精确,因为月份天数不同


	for u in urls:
		get_link(u)
		time.sleep(1)


















download_picture.py

#  通过Link.txt文本下载所有的图片
import requests


def download_picture(link_s, i_s):
    # 发送GET请求
    responses = requests.get(link_s)

    # 检查请求是否成功
    if responses.status_code == 200:
        # 打开一个文件用于写入
        with open(f'wallpaper/image{i_s}.jpg', 'wb') as file:
            # 将图片数据写入文件
            file.write(responses.content)
        print(f"图片{i_s}下载成功")
    else:
        print(f"图片{i_s}下载失败,状态码:", responses.status_code)


if __name__ == "__main__":
    links = []
    with open('links.txt','r') as files:
        for link in files:
            links.append(link)

    for index, i in enumerate(links):
        if index == 50:  # 这里只下载了50张,如果想全部下载,可以把条件限制语句删除
            break
        else:
            download_picture(i, index+1)

整个文件目录结构如图所示,如果缺少相关文件记得先创建。

 

3、运行流程

先运行get_picture_link.py文件,生成一个包含所有图片链接的link.txt文件,再运行download_picture.py文件,下载所有图片到wallpaper文件中。

4、通过API下载newbing每日壁纸

该API由网站API - 每日必应壁纸 - DailyBing.com提供。

调用该API的代码集成在文件today_wallpaper.py文件中。运行该文件后,会在桌面生成当天的newbing壁纸文件。(如果运行出错,注意修改文件路径)

API的具体参数可查看该网站根据个人需要修改。

# 通过API下载每日图片

import requests
import random
from datetime import datetime

agent_list = [
	"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
	"Avant Browser/1.2.789rel1 (http://www.avantbrowser.com)",
	"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.0 Safari/532.5",
	"Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.310.0 Safari/532.9",
	"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.514.0 Safari/534.7",
	"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/9.0.601.0 Safari/534.14",
	"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/10.0.601.0 Safari/534.14",
	"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20",
	"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.27 (KHTML, like Gecko) Chrome/12.0.712.0 Safari/534.27",
	"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.24 Safari/535.1",
	"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.120 Safari/535.2",
	"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.36 Safari/535.7",
	"Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko/2008072421 Minefield/3.0.2pre",
	"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10"
	]
header = {'User-Agent': random.choice(agent_list)}

# 获取当前日期和时间
now = datetime.now()

# 只保留年、月、日
current_date = now.strftime('%Y-%m-%d')

# API的URL
api_url = 'https://dailybing.com/api/v1/UHD'

# 发送GET请求
response = requests.get(api_url, headers=header)

# 检查请求是否成功
if response.status_code == 200:
    # 获取壁纸文件的内容
    p_content = response.content

    # 将壁纸文件内容保存到文件,根据需要修改地址
    with open(f'D:\desktop\{current_date}.jpg', 'wb') as file:
        file.write(p_content)

else:
    print("请求失败,状态码:", response.status_code)


http://www.kler.cn/a/392088.html

相关文章:

  • Python数据类型(一):bool布尔类型
  • 前端-同源与跨域
  • ArkTs简单入门案例:简单的图片切换应用界面
  • 21. Drag-Drop拖放操作(二) - 文件、表格和树的拖放实现
  • Lucene 和 Elasticsearch 中更好的二进制量化 (BBQ)
  • react动态路由
  • JDBC事务管理、四大特征(ACID)、事务提交与回滚、MySQL事务管理
  • C语言串讲-2之指针和结构体
  • 2024 ECCV | DualDn: 通过可微ISP进行双域去噪
  • ubuntu20.04 解决Pycharm没有写入权限,无法通过检查更新更新的问题
  • k8s中基于overlay网络和underlay网络的网络插件分别有哪些
  • ima.copilot-腾讯智能工作台
  • react 中 FC 模块作用
  • int溢出值(c基础)
  • next中服务端组件共享接口数据
  • 基于yolov8、yolov5的番茄成熟度检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
  • 2025年使用 AI 识别解决 reCAPTCHA
  • spring-IOC使用注解
  • Python的面向对象
  • SpringBoot+Vue,尽享个性化音乐推荐与分享的网站
  • 揭秘均值抽样分布:因果推断的统计学基础
  • 如何在 Spring Boot 中启用定时任务
  • 【银河麒麟】时间同步工具chrony与ntp对比
  • golang分布式缓存项目 Day2 单机并发缓存
  • labview拆解日期字符串
  • 【大数据学习 | HBASE高级】mr操作hbase