必应壁纸批量下载

必应壁纸批量下载
最近发现 bing 的壁纸质量是真的好,小编就想将壁纸下载到本地,作为自己的桌面壁纸,然而需要一个一个点击下载,而且一页只有12张,还需要手动翻页才能继续下载壁纸。
然后就想到能不能用程序代替重复的机械操作
说来就来,上代码

import os
import re
import time
import urllib.request

import requests


def get_one_page(url):
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'}
    response = requests.get(url, headers=headers)
    if (response.status_code == 200):
        return response.text
    return None


def download(url, filename):
    time.sleep(4)	# 这里防止被墙,睡4秒,根据情况来定
    filepath = 'E:\\必应壁纸\\' + filename + '.jpg' 
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'}
    if os.path.exists(filepath):
        return
    with open(filepath, 'wb')as f:
        req = urllib.request.Request(url, headers=headers)
        response = urllib.request.urlopen(req)
        f.write(response.read())


def parse(html):
    if not html:
        return None
    pattern = re.compile('class="ctrl download" href="(.*?)".*?<h3>(.*?)</h3>')
    items = re.findall(pattern, html)
    for item in items:

        try:
            url = 'https://bing.ioliu.cn'+item[0]
            imagename = item[1].strip()
            rule = re.compile(r'[a-zA-z1-9()-/]')
            imagename = rule.sub('', imagename)
            download(url, imagename.strip())
            print(imagename, "正在下载")
        except Exception:
            continue


if __name__ == '__main__':
    start_page = int(input("起始页:"))
    end_page = int(input("结束页:"))
    for page in range(start_page, end_page):
        url = 'https://bing.ioliu.cn/ranking?p=' + str(page)
        print("正在抓取第", page, "页", url)
        html = get_one_page(url)
        parse(html)

睡眠时间尽量不要太小,太小会被 bing 检测并墙掉,被墙后只能等第二天了 哈哈(ps:不要问我怎么知道的)

最终数据会保存到 E:\必应壁纸\ 下
在这里插入图片描述
每每出现如下图,恭喜中奖,奖项 “再等一天” 或者挂代理吧
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值