├── Python2_PK ├── log │ └── spider.log └── spider_bing.py ├── README.md ├── Release └── BingWallpaper_win_x64.zip └── Src ├── jsonTest.py └── work.py /Python2_PK/log/spider.log: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JavaProgrammerLB/BingWallpaper/d1159e77799723b6db85d790a3d5a3db156e1496/Python2_PK/log/spider.log -------------------------------------------------------------------------------- /Python2_PK/spider_bing.py: -------------------------------------------------------------------------------- 1 | #-*-coding:utf-8 2 | """ 3 | Author:Charles Lau 4 | Date:31/3/2016 5 | 简单的bing首页图片爬取程序 6 | 定时需要配置crontab来做 7 | 8 | """ 9 | import requests 10 | import json 11 | import logging 12 | import os 13 | 14 | seed = 'http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US' 15 | 16 | logging.basicConfig(level=logging.DEBUG, 17 | format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', 18 | datefmt='%a, %d %b %Y %H:%M:%S', 19 | filename='log/spider.log', 20 | filemode='w') 21 | 22 | class BingSpider: 23 | 24 | def __init__(self,base_dir='bing'): 25 | self.base_dir = base_dir 26 | if not os.path.exists(base_dir): 27 | os.makedirs(base_dir) 28 | 29 | def download_img(self,url): 30 | img = requests.get(url,stream=True) 31 | img_name = url.split('/')[-1] 32 | with open(os.path.join(self.base_dir,img_name),'wb') as img_file: 33 | for chunk in img.iter_content(chunk_size=1024): 34 | if chunk: 35 | img_file.write(chunk) 36 | img_file.flush() 37 | img_file.close() 38 | 39 | 40 | 41 | def retrieve_url(self,seed_=seed): 42 | try: 43 | rep = requests.get(seed_) 44 | url = rep.json()['images'][0]['url'] 45 | 46 | except: 47 | url = '' 48 | 49 | return url 50 | 51 | def _run(self): 52 | url = self.retrieve_url() 53 | if url: 54 | url = url if url.find('http') >= 0 else 'http://www.bing.com/'+url 55 | logging.debug(u'图片地址为'+url) 56 | self.download_img(url) 57 | else: 58 | logging.debug(u'获取图片地址失败') 59 | 60 | 61 | def run(self): 62 | self._run() 63 | 64 | 65 | if __name__=='__main__': 66 | spider = BingSpider() 67 | spider.run() 68 | 69 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # BingWallpaper 2 | #### :octocat:介绍 3 | Bing:http://cn.bing.com/ 4 | Wallpaper:壁纸 5 | BingWallpaper是一个从Bing服务器下载每日壁纸的一个爬虫项目 6 | 7 | 项目Python2实现:Python2_PK目录 8 | 项目Python3实现:Src目录 9 | 项目发布目录:Release 10 | #### :snowflake:原理 11 | 根据如下的动态链接,进行下载 12 | JSON:http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US 13 | 其中修改idx的参数值来实现循环下载 14 | #### :evergreen_tree:使用 15 | 从Release文件夹根据自己的操作系统下载可执行文件 16 | https://github.com/JavaProgrammerLB/BingWallpaper/tree/master/Release 17 | #### :sun_with_face:合作 18 | 欢迎合作 19 | #### :dog:注意 20 | 本项目仅做技术交流之用,请遵守Bing版权约定 21 | -------------------------------------------------------------------------------- /Release/BingWallpaper_win_x64.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JavaProgrammerLB/BingWallpaper/d1159e77799723b6db85d790a3d5a3db156e1496/Release/BingWallpaper_win_x64.zip -------------------------------------------------------------------------------- /Src/jsonTest.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | obj = [[1,2,3],123,123.123,'abc',{'key1':(1,2,3),'key2':(4,5,6)}] 4 | encodedjson = json.dumps(obj) 5 | print(repr(obj)) 6 | print(encodedjson) 7 | 8 | 9 | decodejson = json.loads(encodedjson) 10 | print(type(decodejson)) 11 | print(decodejson[4]['key1']) 12 | print(decodejson) 13 | -------------------------------------------------------------------------------- /Src/work.py: -------------------------------------------------------------------------------- 1 | import urllib.request 2 | import urllib.parse 3 | import json 4 | import codecs 5 | from datetime import date 6 | import os 7 | 8 | def main(): 9 | #'http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US' 10 | for i in range(20): 11 | address0 = 'http://www.bing.com/HPImageArchive.aspx?format=js&idx=' 12 | address1 = str(i) 13 | address2 = '&n=1&mkt=en-US' 14 | address = address0 + address1 + address2 15 | response = getJsonResponse(address) 16 | if response.strip() == 'null': 17 | DstDir = os.getcwd() + os.path.sep 18 | print('【请从',DstDir,'查看下载结果】') 19 | break 20 | url = getUrl(response) 21 | #print(url) 22 | #print('正在下载前{}天的壁纸'.format(i)) 23 | url = "http://www.bing.com" + url 24 | downloadPic(url,i) 25 | 26 | def getJsonResponse(address): 27 | #获取json文件 28 | with urllib.request.urlopen(address) as response: 29 | result = response.read() 30 | s = result.decode() 31 | s = codecs.encode(s,encoding='utf-8') 32 | s = s.decode() 33 | return s 34 | 35 | def getUrl(response): 36 | dict = json.loads(response) 37 | keys = dict.keys() 38 | list = dict['images'] 39 | #获取url 40 | url = list[0]['url'] 41 | #print(url) 42 | return url 43 | 44 | def downloadPic(url,i): 45 | with urllib.request.urlopen(url) as dataValue: 46 | jpg = dataValue.read() 47 | DstDir = os.getcwd() + os.path.sep 48 | FileName1 = 'BingWallpaper' 49 | today = date.today() 50 | fileDate = date.fromordinal(today.toordinal() - i) 51 | FileName2 = fileDate.isoformat() 52 | FileNameEnd = '.jpg' 53 | FileName=FileName1+FileName2+FileNameEnd 54 | 55 | #下载图片并保存在当前路径 56 | File = open(DstDir + FileName,'wb') 57 | File.write(jpg) 58 | print('正在下载{FileName2}的壁纸'.format(FileName2 = FileName2)) 59 | File.close() 60 | 61 | if __name__ == '__main__': 62 | main() 63 | --------------------------------------------------------------------------------