Python 爬取高清桌面壁纸

今天写了一个脚本用来爬取ZOL桌面壁纸网站的高清图片;

链接:http://desk.zol.com.cn/1920x1080/

本程序只爬了美女板块的图片,若要下载其他板块,只需修改程序中的”meinv“即可


代码如下:

#coding=utf-8
import urllib  
import re
import time
class Spider:
    baseUrl='http://desk.zol.com.cn/'
    pic_index=0
    itemGroupPic=[]
    def __init__(self,page_count):
        time.sleep(1)
        url=self.baseUrl+"meinv/1920x1080/"
        for i in range(10, page_count):
            time.sleep(5)
            html=self.getHtml(url,i)
            getbi=self.getPageImageGroup(html) 
            bizhi_url=self.getbizhiurlList(getbi)
    
    
    def getHtml(self,url,page_index):
        url=url+str(page_index)+".html"
        page = urllib.urlopen(url)
        html = page.read()
        return html

    def getPageImageGroup(self,html):
        reg=r'<a class="pic" href="/bizhi/.*?.html'  
        imgre=re.compile(reg)
        imagelist=re.findall(imgre,html)
        return imagelist
        
    def getbizhiurlList(self,imagelist):
        for iurl in imagelist:
            reg=r'bizhi/.*?.html'  
            imgre=re.compile(reg)
            itmeimageurl=re.findall(imgre,iurl)
            self.itemGroupPic.append(itmeimageurl)
           
    def GetCurrentUrlAndDownload(self,url):
        page = urllib.urlopen(url)
        html = page.read() #read()出来的文本和网页右键源代码有点出入,这里需要优化
        reg=r'<img id="bigImg" src="http://.*.jpg"'  
        imgre=re.compile(reg)
        urllist=re.findall(imgre,html)
        for _u in urllist:
            reg1=r'http://.*.jpg'  
            imgre1=re.compile(reg1)
            itmeimageurl=re.findall(imgre1,_u)
            print u'正在下载'+str(self.pic_index)+u'图片'
            #D:\PictureAvi目录要事先创建好
            urllib.urlretrieve(itmeimageurl[0],'D:\PictureAvi\%s.jpg' % self.pic_index)
            self.pic_index+=1
        #获取当前页面的url,next_html
        next_reg=r'<a id="pageNext" class="next" href=".*.html"'  
        next_imgre=re.compile(next_reg)
        next_urllist=re.findall(next_imgre,html)
        if(len(next_urllist)==0):
            return ""
        #获取真正的next_html
        next_reg_child=r'bizhi.*?.html'  
        next_imgre_child=re.compile(next_reg_child)
        real_url=re.findall(next_imgre_child,next_urllist[0])
        return real_url[0]

    def MatchUrl(self,imagelist):
        for imgurl in imagelist:
            url=self.baseUrl+imgurl[0]
            next_url=self.GetCurrentUrlAndDownload(url)
            #递归获取下一个url
            while(next_url != ''):
                _itme_next_url=self.baseUrl+next_url
                next_url=self.GetCurrentUrlAndDownload(_itme_next_url)
            
           

if __name__ == '__main__':
    spider = Spider(15)
   
    spider.MatchUrl(spider.itemGroupPic)
    print u'结束下载'



运行结果如下:




运行环境是py2.7,原理很简单,并没有用到类似scrapy这样的框架,也没用什么动态获取

1.通过urllib获取网页源代码

2.找到规律,通过正则表达式找到url

3.用urllib下载到本地文件



未完待续。。。。。

posted @ 2017-10-26 20:55  birdhumen鸟人  阅读(356)  评论(0编辑  收藏  举报