美文网首页
Python爬取图片并以二进制方式保存到本地

Python爬取图片并以二进制方式保存到本地

作者: 不存在的一角 | 来源:发表于2018-12-09 00:58 被阅读40次

    本篇主要介绍python 爬取图片并以二进制形式保存到本地

    这回爬取的是一个写真图片网站,上面有一个365日365枚照片写真
    写真图片网站链接

    这里写图片描述

    明确目标,爬取每一页的20张图片,循环生成没一页的url,爬取一页时生成一个对应的页数的文件夹在本地,将图片以二进制保存下来

    1、
    那么第一步就是requests获取网页的源码了,接着就是分析图片所在的标签,也就是我们需要的通过正则获取的内容

    这里写图片描述

    2、
    获取图片的网页链接及图片的名称,获取图片网页链接的目的之一是为了保存到本地的时候,建立对应页码的文件夹(因为连接中包含了对应的码数)

    #取到每一页URL对应的页码
            page = int(url.split('/')[7])
    

    对每一页的图片在爬取的时候都建立一个文件夹,这里需要注意直接以数字命名的文件夹不能直接放在路径中,需加上一个反斜杠

    def mkDir(self,i):
            fileName = str(i)
            path = 'D:\Python\PycharmProject\Enhance\\365\%s'%(fileName)
            E = os.path.exists(path)
            if not E:
                os.makedirs(path)
                print u'创建page'+str(i)+u'成功!'
            else:
                print u'创建page'+str(i)+u'失败!,已存在文件夹'
    

    3、
    循环生成url的时候,要获取最大页码数,经过分析最大页码数在第一页中存在,通过正则获取后循环

    4、注意爬取时最好设置一下时延,防止对网站造成过大的负担,也可添加IP

    唉 直接上代码:

    #!/usr/bin/python
    # -*- coding:utf-8 -*-
    # author:joel 18-6-12
    
    '''
    365日365枚
    http://sozaing.com/category/photo/365photo/page/1/
    '''
    import random
    import time
    import os
    import requests
    import re
    
    class Spider():
        def getHtml(self,url):
            headers = {
                'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36'
            }
            proxies = [
                {'https': '183.128.243.81:6666'},
                 {'https': '121.231.168.5:6666'},
                  {'https': '121.231.168.123:6666'},
            ]
            proxy = proxies[random.randint(0,2)]
            r = requests.get(url,headers = headers,proxies = proxy)
            html = r.text
            return html
    
        def getOnePageData(self,url):
            html = self.getHtml(url)
            pattern = re.compile('<p class="title"><a href="(.*?)">(.*?)</a></p>',re.S)
            result = re.findall(pattern,html)
            pictureList = []
            #取到每一页URL对应的页码
            page = int(url.split('/')[7])
            num = 1
            #创建对应页数的文件夹
            self.mkDir(page)
            for i in result:
                html2 = self.getHtml(i[0])
                pictureLink = re.findall(r'<p class="mar_b_25 center">.*?<img.*?src="(.*?)".*?/>.*?</p>',html2,re.S)
                pictureList.append(pictureLink)
                #将每页的图片按图片名存储(二进制),这里直接用数字365做文件名会出错,所以多加一个斜杠
                pic_path = 'D:\Python\PycharmProject\Enhance\\365\%s\%s.jpg'%(page,i[1])
                E = os.path.exists(pic_path)
                if not E:
                    pic = requests.get(pictureLink[0])
                    f = open(pic_path,'wb')
                    f.write(pic.content)
                    f.close
                    print u'第'+str(num)+u'张...'
                else:
                    print u'文件已存在...'
                num += 1
                time.sleep(4+random.randint(1,10))
            return pictureList
    
        def mkDir(self,i):
            fileName = str(i)
            path = 'D:\Python\PycharmProject\Enhance\\365\%s'%(fileName)
            E = os.path.exists(path)
            if not E:
                os.makedirs(path)
                print u'创建page'+str(i)+u'成功!'
            else:
                print u'创建page'+str(i)+u'失败!,已存在文件夹'
    
        def getMore(self):
            html = self.getHtml('http://sozaing.com/category/photo/365photo/page/1/')
            #从第一页中获取最后一页的页码数
            lastPage = re.findall(r"<span class='pages'>Page 1 of (\d+)</span>",html)
            for i in range(1,int(lastPage[0])+1):
                self.url = 'http://sozaing.com/category/photo/365photo/page/{}/'.format(i)
                self.getOnePageData(self.url)
    
    spider = Spider()
    spider.getMore()
    
    

    若有问题欢迎交流~


    print('微信公众号搜索 "猿狮的单身日常" ,Java技术升级、虫师修炼,我们 不见不散!')
    print('也可以扫下方二维码哦~')
    
    猿狮的单身日常

    相关文章

      网友评论

          本文标题:Python爬取图片并以二进制方式保存到本地

          本文链接:https://www.haomeiwen.com/subject/pixhhqtx.html