用Python3写爬虫下载所有必应壁纸

2019年11月17日

0 条评论 1.26k 个文字

前言

众所周知,Bing是做壁纸的hh..必应搜索的背景图质量一直很不错,很适合做电脑或者iPad的壁纸,每天会更新一张。于是乎,有人搜集了从bing上线这个功能以来的绝大部分图片,并做成了网站,奈何我想天天换壁纸呢?来写个简单的爬虫吧。

Python3代码

python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import requests
import re
import os


'''获取网页源码函数
'''

def getSrc(page):
    try: # 容错处理,连接错误则返回空文本继续往下走
        url = "http://bing.plmeizi.com/?page=" + str(page)
        req = requests.get(url)
        return req.text
    except ConnectionError:
        return ""


'''主函数
'''

def main():
    # 循环页码,从第1页到第133页
    for pageNow in range(1,134):
        # 清空终端
        os.system("clear")
        sourceCode = getSrc(pageNow)
        # 从源码获取图片地址,放入列表
        reg = r'img src="(.*?)-listpic'
        picList = re.findall(reg,sourceCode)
        # 从源码获取图片描述,放入列表
        reg = r'alt="(.*?)"'
        nameList = re.findall(reg,sourceCode)
        # 如果获取到的图片地址数量和描述数量一致且不为0表示获取正确
        print("正在下载第{}页,共{}张".format(pageNow,len(nameList)))
        if len(nameList) == len(picList) != 0:
            for i in range(len(nameList)):
                # 下载图片
                img = requests.get(picList[i]).content
                print("正在下载第{}张".format(i+1))
                try: # 容错处理,保存图片
                    filePath = "./pic/" + nameList[i].replace(" ","").replace("/","-").replace("©","") + ".jpg"
                    with open(filePath,"wb") as f:
                        f.write(img)
                        if os.path.getsize(filePath)/1024 < 50:
                            os.remove(filePath)
                except FileNotFoundError:
                    print(nameList[i],"名称存在非法字符,无法保存")
                except IOError:
                    print(nameList[i],"读写异常,保存失败")

'''对整体进行容错处理
'''

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print("用户退出")
        exit()

先在本例子.py文件相同目录下,新建好一个pic目录,剩下的,就让他自己来吧

文章评论(0)

我来讲两句~