Python爬虫:爬取必应壁纸(可直接运行)

news/2024/7/19 8:50:51 标签: python, 爬虫, 正则表达式

1、Why is bing?

必应专门的壁纸网站,每天都会更新一张高质量,漂亮到不行的图片。非常适合用来当电脑的桌面壁纸,且可以适配不同的桌面尺寸,提升你的桌面逼格。
必应壁纸首页

2、code

2.1 所需要的第三方库

代码中涉及到的第三方库。

  • os
  • re
  • requests

2.2 代码

下载运行前需更改代码中储存下载图片的路径

下载即可运行!!

python">#爬取必应壁纸
import os
import re
import requests
 
def get_one_page(url): # 解析给定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): # 状态码200说明返回状态正确,状态码是404,403等其他代号则说明网页请求失败
        return response.text
    return None
 
def download(url,filename): # 下载图片到本地文件夹
    filepath = 'E:/vlog//  '+ 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: # 把图片以二进制形式写入到本地
        response = requests.get(url,headers=headers)
        f.write(response.content)

def parse(html): # 解析网页源代码
    pattern  = re.compile('data-progressive="(.*?)".*?<h3>(.*?)</h3>') # 正则表达式筛选html
    items = re.findall(pattern,html)
    for item in items:
        try:
            url = item[0].replace('640','1920').replace('480','1080') # 替换图片尺寸
            #print(url)
            imagename = item[1].strip()
            rule = re.compile(r'[a-zA-z1-9()-/]')#[]用来表示一组字符【abc】匹配a,b,或c
            imagename = rule.sub('', imagename)
            download(url,imagename.strip())
            print(imagename,"正在下载")
        except Exception:
            continue
 
if __name__ == '__main__':
    for page in range(1,20): # 爬取页面的范围,可以随意更改
        url = 'https://bing.ioliu.cn/?p='+str(page)
        print("正在抓取第", page, "页" ,url)
        html = get_one_page(url)
        parse(html)
        

3、Result

运行过程

代码运行过程
运行结果

运行结果

一些说明

  1. 下载的有些图片显示不出来,可能是解析源代码的时候出现的小问题,但是概率很小,基本上爬取100张图片才会出现几张问题图片
  2. 如果需要爬取大量图片,需要设置休眠时间,防止被浏览器的反爬机制识别为爬虫从而爬取失败

http://www.niftyadmin.cn/n/1037224.html

相关文章

Leetcode题库:动态规划在猜石子游戏中的应用(Python语言)

动态规划 关于什么是动态规划&#xff0c;这里不再赘述&#xff0c;网上有大把教程和概念&#xff0c;阅读本文前提是你对动态规划已经有了初步的认识。 概括来说&#xff0c;动态规划有四个步骤&#xff1a; 定义状态。寻找状态转移方程状态压缩&#xff08;如果可行的话&a…

D. Decreasing Debts

题目1 题意&#xff1a; 给出n个人的债务关系&#xff0c;要求最简化这个债务关系&#xff0c;比如a欠b10元&#xff0c;b欠c10元&#xff0c;就可以直接让a欠c10元。 分析&#xff1a; 我们思考最终化简后的债务关系&#xff0c;对于每个人来说&#xff0c;要么是欠别人钱&a…

D. Vitya and Strange Lesson

题目1 题意&#xff1a; 给出一组序列&#xff0c;有q次访问&#xff0c;每次访问输入一个x&#xff0c;每次对这组序列异或x&#xff0c;然后输出最小未出现的元素。注意每次访问后数组都会改变。 分析&#xff1a; 由于异或具有结合律&#xff0c;所以不需要每次去改变序列…

E. Marbles

题目1 题意&#xff1a; 有n个数&#xff0c;每个数都有一种颜色。每次操作可以交换两个元素的位置&#xff0c;要求使得相同颜色的元素连续排列的最小次数。     2≤n≤4∗105,1≤ai≤202≤n≤4*10^5,1≤a_i≤202≤n≤4∗105,1≤ai​≤20 分析&#xff1a; 看到颜色数只…

C. The Football Season

题目 题意&#xff1a; 有n场比赛&#xff0c;赢了得d分&#xff0c;平局得w分&#xff0c;输了得0分。现在给你一个最后的得分&#xff0c;要求赢了多少场&#xff0c;平了多少场。     1≤n≤1012,0≤p≤1017,1≤d<w≤1051≤n≤10^{12},0≤p≤10^{17},1≤d<w≤10^…

E. The Contest

题目 题意&#xff1a; 1到n&#xff0c;一共n个元素。k1个元素在集合1&#xff0c;k2个元素在集合2&#xff0c;k3个元素在集合3。每次操作可以令一个元素从原来的集合到任意的集合。要求使得集合1中的数最小&#xff0c;集合3中的数最大&#xff0c;剩下的数在集合2中的最小…

LeetCode题库:股票交易问题(Python,C++语言实现)

1、LeetCode121、买卖股票的最佳时机 题目描述 给定一个数组&#xff0c;它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易&#xff08;即买入和卖出一支股票一次&#xff09;&#xff0c;设计一个算法来计算你所能获取的最大利润。 注意&#…

E. Vasya and Good Sequences

题目 题意&#xff1a; 给出一组序列&#xff0c;对于其中的元素可以任意改变其二进制下1的位置。求出区间[l,r]&#xff0c;使得这个区间的元素在操作后异或值为0。输出这样的区间数量。     1≤n≤3⋅105&#xff0c;1≤ai≤10181≤n≤3⋅10^5&#xff0c;1≤a_i≤10^{1…