给你的个人微信朋友圈数据生成一本电子书吧

[toc] 给你的个人微信朋友圈数据生成一本电子书吧!简介微信朋友圈保留着你的数据,它留住了美好的回忆,记录了我们成长的点点滴滴。发朋友圈从某种意义上来讲是在记录生活,感受生活,并从中看到了每个人每一步的成长。 这么一份珍贵的记忆,何不将它保存下来呢?只需一杯咖啡的时间,即可一键打印你的朋友圈。它可以是纸质书,也可以是电子书,可以长久保存,比洗照片好,又有时间足迹记忆。 这本书,可以用来:送给孩子的生日礼物送给伴侣的生日礼物送给未来的自己……现在,你可以选择打印电子书或者纸质书。打印纸质书的话,可以找第三方机构花钱购买;打印电子书的话,我们完全可以自己动手生成,这可以省下一笔不小的开支。 部分截图在开始写代码思路之前,我们先看看最终生成的效果。 电子书效果 纸质书效果 代码思路获取微信书链接看完效果图之后,开始进入代码编写部分。首先,由于朋友圈数据的隐私性较高,手动获取的话,需要使用root的安卓手机进行解密或对pc端备份的聊天记录数据库进行解密,这对大部分人来说难度较大。所以我们采取的思路是基于现有的数据进行打印电子书。 目前,已经有第三方服务支持导出朋友圈数据,微信公众号【出书啦】就提供了这样一种服务。这种服务很大可能性是基于安卓模拟器进行自动化采取操作的,具体就不详细讲了。 首先,关注该公众号,然后开始制作微信书。该过程为小编添加你为好友,然后你将朋友圈开放给他看,等一会后采集完毕后,小编会发给你一个专属链接,这个链接里面的内容就是你的个人朋友圈数据。 生成电子书有了这个链接后,我们开始对该页面的内容进行打印。 整个过程基于selenium自动化操作,如果你有了解过selenium的话,那么其实该过程是很简单的。 首先,引导用户输入微信书链接,我们采用在浏览器弹出一个输入文本框的形式让用户输入数据。首先,在selenium中执行js代码,js代码中完成弹出输入文本框的功能。 输入微信书链接# 以网页输入文本框形式提示用户输入url地址def input_url(): # js脚本 random_id = [str(random.randint(0, 9)) for i in range(0,10)] random_id = "".join(random_id) random_id = 'id_input_target_url_' + random_id js = """ // 弹出文本输入框,输入微信书的完整链接地址 target_url = prompt("请输入微信书的完整链接地址","https://"); // 动态创建一个input元素 input_target_url = document.createElement("input"); // 为其设置id,以便在程序中能够获取到它的值 input_target_url.id = "id_input_target_url"; // 插入到当前网页中 document.getElementsByTagName("body")[0].appendChild(input_target_url); // 设置不可见 document.getElementById("id_input_target_url").style.display = 'none'; // 设置value为target_url的值 document.getElementById("id_input_target_url").value = target_url """ js = js.replace('id_input_target_url', random_id) # 执行以上js脚本 driver.execute_script(js)上述js代码的具体步骤为:弹出一个输入文本框,创建一个动态元素,随机命名该元素的id,并将这个动态元素插入到当前页面中,使得可以在python中通过selenium获取到输入文本框的内容。 ...

June 7, 2019 · 2 min · jiezi

爬取5K分辨率超清唯美壁纸

@[toc]爬取5K分辨率超清唯美壁纸简介壁纸的选择其实很大程度上能看出电脑主人的内心世界,有的人喜欢风景,有的人喜欢星空,有的人喜欢美女,有的人喜欢动物。然而,终究有一天你已经产生审美疲劳了,但你下定决定要换壁纸的时候,又发现网上的壁纸要么分辨率低,要么带有水印。这里有一款Mac下的小清新壁纸神器Pap.er,可能是Mac下最好的壁纸软件,自带5K超清分辨率壁纸,富有多种类型壁纸,当我们想在Windows或者Linux下使用的时候,就可以考虑将5K超清分辨率壁纸爬取下来。编写思路为了方便快速开发,我们使用python中的wxpy模块完成微信的基本操作。首先,打开Charles软件,进行抓包。打开Pap.er,开始抓包。(由于是Mac系统下的APP,所以非Mac系统的朋友可以直接看抓包结果)抓包分析结果如下:类型地址最新https://service.paper.meiyuan…最热https://service.paper.meiyuan…女生https://service.paper.meiyuan…星空https://service.paper.meiyuan…参数page不用改动,per_page指的是每页提取的数量,也就是我们想要提取的图片数量。抓完包之后,我们开始编写5K壁纸解析程序# 爬取不同类型图片def crawler_photo(type_id, photo_count): # 最新 1, 最热 2, 女生 3, 星空 4 if(type_id == 1): url = ‘https://service.paper.meiyuan.in/api/v2/columns/flow/5c68ffb9463b7fbfe72b0db0?page=1&per_page=' + str(photo_count) elif(type_id == 2): url = ‘https://service.paper.meiyuan.in/api/v2/columns/flow/5c69251c9b1c011c41bb97be?page=1&per_page=' + str(photo_count) elif(type_id == 3): url = ‘https://service.paper.meiyuan.in/api/v2/columns/flow/5c81087e6aee28c541eefc26?page=1&per_page=' + str(photo_count) elif(type_id == 4): url = ‘https://service.paper.meiyuan.in/api/v2/columns/flow/5c81f64c96fad8fe211f5367?page=1&per_page=' + str(photo_count) headers = {“User-Agent”: “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36”} # 获取图片链接列表数据,json格式 respond = requests.get(url, headers=headers) # 对json格式转化为python对象 photo_data = json.loads(respond.content) # 已经下载的图片张数 now_photo_count = 1 # 所有图片张数 all_photo_count = len(photo_data) # 开始下载并保存5K分辨率壁纸 for photo in photo_data: # 创建一个文件夹存放我们下载的图片(若存在则不用重新创建) if not os.path.exists(’./’ + str(type_id)): os.makedirs(’./’ + str(type_id)) # 准备下载的图片链接,5K超清壁纸链接 file_url = photo[‘urls’][‘raw’] # 准备下载的图片名称,不包含扩展名 file_name_only = file_url.split(’/’) file_name_only = file_name_only[len(file_name_only) -1] # 准备保存到本地的完整路径 file_full_name = ‘./’ + str(type_id) + ‘/’ + file_name_only # 开始下载图片 Down_load(file_url, file_full_name, now_photo_count, all_photo_count) # 已经下载的图片数量加1 now_photo_count = now_photo_count + 1根据不同类型的壁纸,创建不同的文件夹编号进行分类。上面的Down_load()函数是下载文件的意思,调用requests库,具体代码如下:# 文件下载器def Down_load(file_url, file_full_name, now_photo_count, all_photo_count): headers = {“User-Agent”: “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36”} # 开始下载图片 with closing(requests.get(file_url, headers=headers, stream=True)) as response: chunk_size = 1024 # 单次请求最大值 content_size = int(response.headers[‘content-length’]) # 文件总大小 data_count = 0 # 当前已传输的大小 with open(file_full_name, “wb”) as file: for data in response.iter_content(chunk_size=chunk_size): file.write(data) done_block = int((data_count / content_size) * 50) data_count = data_count + len(data) now_jd = (data_count / content_size) * 100 print("\r %s:[%s%s] %d%% %d/%d" % (file_full_name, done_block * ‘█’, ’ ’ * (50 - 1 - done_block), now_jd, now_photo_count, all_photo_count), end=" “) # 下载完图片后获取图片扩展名,并为其增加扩展名 file_type = filetype.guess(file_full_name) os.rename(file_full_name, file_full_name + ‘.’ + file_type.extension)chunk_size指的是单次请求的最大值,content_size指的就是我们下载5K超清壁纸的大小,为了能够直观显示下载情况,所以添加了下载进度条的显示效果。核心代码为file.write(data)。下载完毕后,为了方便我们查看文件,所以需要给图片添加对应的扩展名,比如jpg,png,gif,这里使用到filetype库对文件进行解析,判断其类型。最后,开始在main中爬取5K高清壁纸:if name == ‘main’: # 最新 1, 最热 2, 女生 3, 星空 4 # 爬取类型为3的图片(女生),一共准备爬取100张 print(“程序已经开始运行,请稍等……”) crawler_photo(1, 100) crawler_photo(2, 100) crawler_photo(3, 100) crawler_photo(4, 100)使用教程确保以下库均已安装:# 如果没有安装,请使用pip install module安装import requestsimport filetypeimport osimport jsonfrom contextlib import closing演示图片完整源代码项目源代码在GitHub仓库项目持续更新,欢迎您star本项目 ...

March 16, 2019 · 2 min · jiezi