python 爬虫批量下载图片

今天加班啊,苦啊!!

无聊,用python写了一个抓图片的爬虫,感觉很不错啊,哈哈

先贴上代码:(python 版本:2.7.9)

__author__ = 'bloodchilde'
 
 
import  urllib
import urllib2
import  re
import os
 
class Spider:
    def __init__(self):
        self.siteUrl="http://sc.chinaz.com/biaoqing/"
        self.user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko'
        self.headers = { 'User-Agent' : self.user_agent }
 
    def getPage(self,pageIndex):
        url = self.siteUrl+"index_"+str(pageIndex)+".html"
        request = urllib2.Request(url,headers = self.headers)
        response = urllib2.urlopen(request)
        return response.read().decode("utf-8")
 
    def getContents(self,pageIndex):
        page = self.getPage(pageIndex)
 
        pattern = re.compile('''<div.*?class='num_1'.*?>.*?<p>.*?<a.*?href='.*?'.*?target='_blank'.*?title='(.*?)'.*?><img.*?src2="(.*?)".*?>.*?</a>.*?</p>.*?</div>''',re.S)
 
        items = re.findall(pattern,page)
 
        contents=[]
 
        for item in items:
            contents.append([item[0],item[1]])
        return contents
 
    def mk_dir(self,path):
 
 
        isExisist = os.path.exists(path)
 
        if not isExisist:
            os.makedirs(path)
            return True
        else:
            return False
 
    def downImage(self,url,dirname):
        imageUrl = url
        request = urllib2.Request(imageUrl,headers = self.headers)
        response = urllib2.urlopen(request)
        imageContents = response.read()
 
        urlArr = imageUrl.split(u"/")
        imageName = str(urlArr[len(urlArr)-1])
 
        print imageName
 
        path = u"C:/Users/bloodchilde/Desktop/image_python/"+dirname
 
        self.mk_dir(path)
 
        imagePath = path+u"/"+imageName
 
        f = open(imagePath, 'wb')
        f.write(imageContents)
        f.close()
 
    def downLoadAllPicture(self,PageIndex):
        contents = self.getContents(PageIndex)
 
        for list in contents:
            dirname = list[0]
            imageUrl = list[1]
            self.downImage(imageUrl,dirname)
 
 
 
 
demo = Spider()
 
for page in range(3,100):
    demo.downLoadAllPicture(page)
 

效果如下:


下载这么多图片,瞬间搞定,下面来分析一下程序:

首先,我的目标网页是:

http://sc.chinaz.com/biaoqing/index_3.html

程序功能是到这个网页下载表情图片

程序思路:

1,获取网页的源码信息

2,解析源码获取要下载的图片的URL(正则处理)

3,重新定位url向这个图片的url发起请求获取url的信息,这个url信息其实就是图片内容contents

4,通过上面获取的图片的URL还可以获取图片的名称(带后缀名) imageName

5,在本地创建文件以获取的imageName命名,将内容contents写进文件即可

打开http://sc.chinaz.com/biaoqing/index_3.html,查看源码,找到要处理的代码段如下:

对应的正则是:

'''<div.*?class='num_1'.*?>.*?<p>.*?<a.*?href='.*?'.*?target='_blank'.*?title='(.*?)'.*?><img.*?src2="(.*?)".*?>.*?</a>.*?</p>.*?</div>'''

我们要从代码段中获取title和src2,title作为文件夹名,src2作为目标图片URL
————————————————
版权声明:本文为CSDN博主「小小玮」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dai_jing/article/details/46661969

发布了91 篇原创文章 · 获赞 47 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qq_30007885/article/details/102521390