python爬虫 爬取超清壁纸代码实例


Posted in Python onAugust 16, 2019

简介

壁纸的选择其实很大程度上能看出电脑主人的内心世界,有的人喜欢风景,有的人喜欢星空,有的人喜欢美女,有的人喜欢动物。然而,终究有一天你已经产生审美疲劳了,但你下定决定要换壁纸的时候,又发现网上的壁纸要么分辨率低,要么带有水印。

壁纸的选择其实很大程度上能看出电脑主人的内心世界,有的人喜欢风景,有的人喜欢星空,有的人喜欢美女,有的人喜欢动物。然而,终究有一天你已经产生审美疲劳了,但你下定决定要换壁纸的时候,又发现网上的壁纸要么分辨率低,要么带有水印。

演示图片

python爬虫 爬取超清壁纸代码实例

python爬虫 爬取超清壁纸代码实例

完整源代码

'''
在学习过程中有什么不懂得可以加我的
python学习交流扣扣qun,934109170
群里有不错的学习教程、开发工具与电子书籍。
与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容。
'''
# -*- coding:utf-8 -*- 
from requests import get
from filetype import guess
from os import rename
from os import makedirs
from os.path import exists
from json import loads
from contextlib import closing 
# 文件下载器
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(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 = guess(file_full_name)
  rename(file_full_name, file_full_name + '.' + file_type.extension)  
# 爬取不同类型图片
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"}
  respond = get(url, headers=headers)
  photo_data = loads(respond.content)
  # 已经下载的图片张数
  now_photo_count = 1 
  # 所有图片张数
  all_photo_count = len(photo_data)
  # 开始下载并保存5K分辨率壁纸
  for photo in photo_data:
    # 创建一个文件夹存放我们下载的图片
    if not exists('./' + str(type_id)):
      makedirs('./' + str(type_id))
    # 准备下载的图片链接
    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)
    now_photo_count = now_photo_count + 1  
if __name__ == '__main__': 
  # 最新 1, 最热 2, 女生 3, 星空 4
  # 爬取类型为3的图片(女生),一共准备爬取20000张
  wall_paper_id = 1
  wall_paper_count = 10
  while(True):
    # 换行符
    print('\n\n') 
    # 选择壁纸类型
    wall_paper_id = input("壁纸类型:最新壁纸 1, 最热壁纸 2, 女生壁纸 3, 星空壁纸 4\n请输入编号以便选择5K超清壁纸类型:")
    # 判断输入是否正确
    while(wall_paper_id != str(1) and wall_paper_id != str(2) and wall_paper_id != str(3) and wall_paper_id != str(4)):
      wall_paper_id = input("壁纸类型:最新壁纸 1, 最热壁纸 2, 女生壁纸 3, 星空壁纸 4\n请输入编号以便选择5K超清壁纸类型:")
    # 选择要下载的壁纸数量
    wall_paper_count = input("请输入要下载的5K超清壁纸的数量:")
    # 判断输入是否正确
    while(int(wall_paper_count) <= 0):
      wall_paper_count = input("请输入要下载的5K超清壁纸的数量:") 
    # 开始爬取5K高清壁纸
    print("正在下载5K超清壁纸,请稍等……")
    crawler_photo(int(wall_paper_id), int(wall_paper_count))
    print('\n下载5K高清壁纸成功!')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简单介绍利用TK在Python下进行GUI编程的教程
Apr 13 Python
举例讲解Python编程中对线程锁的使用
Jul 12 Python
Python实现简单的四则运算计算器
Nov 02 Python
利用django如何解析用户上传的excel文件
Jul 24 Python
python django 增删改查操作 数据库Mysql
Jul 27 Python
python爬虫之xpath的基本使用详解
Apr 18 Python
Python爬虫框架scrapy实现的文件下载功能示例
Aug 04 Python
Python字符串对象实现原理详解
Jul 01 Python
使用Django xadmin 实现修改时间选择器为不可输入状态
Mar 30 Python
python有几个版本
Jun 17 Python
Expected conditions模块使用方法汇总代码解析
Aug 13 Python
Pytorch 如何加速Dataloader提升数据读取速度
May 28 Python
Python PO设计模式的具体使用
Aug 16 #Python
python使用sessions模拟登录淘宝的方式
Aug 16 #Python
Django错误:TypeError at / 'bool' object is not callable解决
Aug 16 #Python
Python facenet进行人脸识别测试过程解析
Aug 16 #Python
Python Web框架之Django框架Model基础详解
Aug 16 #Python
pycharm配置git(图文教程)
Aug 16 #Python
Django如何实现上传图片功能
Aug 16 #Python
You might like
30个php操作redis常用方法代码例子
2014/07/05 PHP
PHP获得数组交集与差集的方法
2015/06/10 PHP
PHP多维数组排序array详解
2017/11/21 PHP
php curl获取到json对象并转成数组array的方法
2018/05/31 PHP
PHP面向对象程序设计之多态性的应用示例
2018/12/19 PHP
JavaScript DOM学习第四章 getElementByTagNames
2010/02/19 Javascript
js获取内联样式的方法
2015/01/27 Javascript
JavaScript DOM进阶方法
2015/04/13 Javascript
JS实现样式清新的横排下拉菜单效果
2015/10/09 Javascript
在Javascript操作JSON对象,增加 删除 修改的简单实现
2016/06/02 Javascript
使用three.js 画渐变的直线
2016/06/05 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
mac上node.js环境的安装测试
2017/07/03 Javascript
手动下载Chrome并解决puppeteer无法使用问题
2018/11/12 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
python实现DNS正向查询、反向查询的例子
2014/04/25 Python
Django中实现一个高性能计数器(Counter)实例
2014/07/09 Python
python简单实现旋转图片的方法
2015/05/30 Python
python实现基本进制转换的方法
2015/07/11 Python
Python实现SVN的目录周期性备份实例
2015/07/17 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
python中logging包的使用总结
2018/02/28 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
2018/11/30 Python
python简单的三元一次方程求解实例
2020/04/02 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
司机岗位职责
2013/11/15 职场文书
大学生应聘推荐信范文
2013/11/19 职场文书
初二政治教学反思
2014/01/12 职场文书
电视节目策划方案
2014/05/16 职场文书
乐观自信演讲稿范文
2014/05/21 职场文书
旅游与酒店管理专业求职信
2014/07/21 职场文书
交警作风整顿剖析材料
2014/10/11 职场文书
教师学期个人总结
2015/02/11 职场文书
英文慰问信
2015/02/14 职场文书
MySQL基于索引的压力测试的实现
2021/11/07 MySQL