Python爬虫之高清壁纸下载

原创 2016年08月28日 21:09:31

Python爬虫之高清壁纸下载

  今天发现了一个非常不错的壁纸网站https://unsplash.com/,高清非常适合做壁纸,我已经受够自己电脑桌面的那么几张壁纸了,于是准备把它们都给爬下来。

Step 1:分析页面

  首先打开网站https://unsplash.com/,高清又漂亮的壁纸就呈现在眼前了,页面没有“下一页”,向下滑动页面发现新的图片不断被加载出来,这个过程显然是动态完成的。
  于是,打开Chrom浏览器,F12进入开发者工具,抓取页面请求。机智的我发现它们是这样请求图片数据的。

页面请求

  同时,还可以发现url提交的参数中包含了当前页page,每一页显示的图片数per_page以及图片显示顺序order_by,因此想抓取下一页只要在page的值上做改变就可以了。OK,分析完毕可以开抓了。

Step 2:页面抓取

  采用多线程爬虫,页面抓取线程负责对页面进行抓取,解析页面返回的Json数据,将每一页的图片url存储在队列中,图片下载线程负责从队列中取出待下载图片的url进行下载,以下是代码部分
定义一些必要的变量

pictures = Queue()#待下载图片url队列
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36',
           'Connection': 'keep-alive',
           'Upgrade-Insecure-Requests':'1',
           'authorization':'Client-ID d69927c7ea5c770fa2ce9a2f1e3589bd896454f7068f689d8e41a25b54fa6042',
           'x-unsplash-client':'web'}
session = requests.session()
session.headers.update(headers)#更新Http请求头

页面抓取线程:

class wallPaperScracher(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.url = ''
        self.cur_page = 1
        self.pics_pattern = re.compile(r'"download":"(.*?)"',re.S)

    def getPicture(self):
        while self.cur_page <= 15:
            self.url = 'https://unsplash.com/napi/photos/curated?page=' + str(self.cur_page) +'&per_page=12&order_by=latest'
            res = session.get(self.url)
            json = res.content
            pics = re.findall(self.pics_pattern, json)
            for url in pics:
                print('第%d页,正在存储图片%s' % (self.cur_page,url))
                pictures.put(url)
            self.cur_page += 1
        pictures.put(None)#标志结束

    def run(self):
        self.getPicture()

图片下载线程:

class picDownloader(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.pattern = re.compile(r'photos/(.*?)/')

    def downloadPic(self):
        while True:
            pic_url = pictures.get()
            if not pic_url:#取到None则停止下载
                break
            pic_name = re.search(self.pattern, pic_url).group(1)
            f = open('E:\\HDPhoto\\' + pic_name + '.jpg', 'wb')
            res = session.get(pic_url)
            print('正在下载图片 : %s' % pic_url)
            f.write(res.content)

    def run(self):
        self.downloadPic()

主函数:启动三个下载线程

    scracher = wallPaperScracher()
    scracher.start()
    for i in range(3):
        downloader = picDownloader()
        downloader.start()

好了,代码搞定。坐等图片…,有新壁纸喽!

pics

版权声明:本文为博主原创文章,未经博主允许不得转载。

Python 爬取高清桌面壁纸

初学python,写了一个脚本用来爬取ZOL桌面壁纸网站的高清图片; 本程序只爬了美女板块的图片,若要下载其他板块,只需修改程序中标红的”meinv“即可 代码如下: #coding=utf-8 i...
  • wcc27857285
  • wcc27857285
  • 2017年10月26日 20:55
  • 226

Python网络爬虫小试刀——抓取ZOL桌面壁纸图片4

获取整个网站所有类型集合的壁纸图片使用urllib2,正则表达式,threading等高效下载网站’http://desk.zol.com.cn‘中壁纸图片。...
  • u011197105
  • u011197105
  • 2015年12月31日 09:45
  • 571

Python网络爬虫小试刀——抓取ZOL桌面壁纸图片3

获得一个类型页面中所有集合中所有的图片,使用了多线程,线程锁等使其并发执行以增加效率。...
  • u011197105
  • u011197105
  • 2015年12月29日 10:22
  • 767

Python3 爬虫 - 爬取 bing 高清桌面大图

看到 bing 的高清大图,觉得质量都很高,都挺好看的,升到 window 10 以后,每次开机的画面都不一样,也觉得很有特点,我们来做一个简单的抓图 Demo 版脚本。...
  • CSND_Ayo
  • CSND_Ayo
  • 2017年06月24日 14:52
  • 1165

用python实现下载必应壁纸并自动更换壁纸的功能

用python实现下载必应壁纸并自动更换壁纸的功能 动机 Windows下的必应桌面(Bing Desktop)提供了质量非常高的壁纸,但是集成了太多无用的功能,同时还有一些让人恼火的bu...
  • huangbo10
  • huangbo10
  • 2014年09月21日 00:52
  • 2905

Android7.0&8.0 默认壁纸修改

1.拷贝自定义壁纸 默认壁纸是default_wallpaper,在/frameworks/base/core/res下面。找到所以的default_wallpaper所在的地方,然后把我们自己的...
  • Aaron121314
  • Aaron121314
  • 2017年07月11日 16:29
  • 1923

搜狗图片页面爬虫脚本,批量下载图片

#coding=utf-8 #--------------------------------------- # 程序:搜狗图片爬虫 # 作者:ewang # 日期:2016-7-6 # ...
  • henni_719
  • henni_719
  • 2016年07月07日 15:36
  • 1218

【图文详解】python爬虫实战——5分钟做个图片自动下载器

python爬虫实战——图片自动下载器之前介绍了那么多基本知识【Python爬虫】入门知识,大家也估计手痒了。想要实际做个小东西来看看,毕竟: talk is cheap show me the ...
  • hk2291976
  • hk2291976
  • 2016年04月19日 11:18
  • 9040

用python爬虫批量下载pdf

今天老板给了一个excel文件,里面有500多个pdf文件的下载链接。 解决方法:用python爬虫批量下载...
  • baidu_28479651
  • baidu_28479651
  • 2017年07月26日 18:09
  • 4761

实现Launcher默认壁纸、选择壁纸定制化功能

第一部分:客制化默认壁纸:     Launcher默认的壁纸配置是放在framework下res下面配置的,图片也是放在framework下面,对于独立的第三方Launcher要想绕开framew...
  • huangyabin001
  • huangyabin001
  • 2014年11月20日 09:44
  • 4081
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python爬虫之高清壁纸下载
举报原因:
原因补充:

(最多只允许输入30个字)