爬取天堂图片网图片

'''
爬取一个网站我们首先要对网站的结构进行分析。
天堂网网址www.ivsky.com
首页是有两个图片大分类分别为图片素材和桌面壁纸地址分别为
/tupian    /bizhi
两个大分类下是各个小分类url地址的形式是如 /bizhi/nvxing
点击小分类后展示的是各个图片小合集页面地址形式为   /bizhi/nvxing/index_1.html (这里可以改变页码进行循环)
在这个页面我们可以获取到每一个小合集的地址形式为  /bizhi/zhangtianai_v43460/
在每个小合集里面就是每张图片的具体地址了 http://img.ivsky.com/img/bizhi/t/201708/31/zhangtianai.jpg
通过观察可以通过这个地址构造出高清图片的下载地址 只需将t换为pic即可
http://img.ivsky.com/img/bizhi/pic/201708/31/zhangtianai.jpg
'''

header = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64)" 
+"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"}

#由于该网站只有两个大分类所以我们直接手动构造不用去爬取了。
catalogue = ['tupian','bizhi']

#保存小分类的列表
s_catalogue_list = []
#保存小分类的列表的中文名称。

url = "http://www.ivsky.com"
request = urllib.request.Request(url)   
response = urllib.request.urlopen(request)#第一个页面   
html = response.read().decode('utf8')
pattern = re.compile('.*?') 
result = re.finditer(pattern, html)
for a in result:
    s_catalogue_list.append(a.group(1))
    
    
#对结果进行整理去掉不要的东西
for a in s_catalogue_list:
    if (a.count('/')!=3):
        s_catalogue_list.remove(a)

#接下来通过获取得到的小分类构造图片合集页面并分别访问
#如 /bizhi/nvxing/index_1.html (这里可以改变页码进行循环)

for a in s_catalogue_list:
#获取各个小分类的名称并创建一个大文件夹
    
    #在这里定制要下载的分类,可以去掉 
    #去掉的话默认下载全部分类--请确定你的内存足够大(去掉后注意去除一个tab空格)
    if (a=='/bizhi/nvxing/'):
        url = "http://www.ivsky.com"+a
        request = urllib.request.Request(url) 
        response = urllib.request.urlopen(request)
        html = response.read().decode('utf8')
        pattern = re.compile('(.*?)')
        result1 = re.finditer(pattern,html)
        
        cur_dir = 'G:/eclipse/spider/tupian'#注意此处的斜杠  此处的文件夹要自己创建
        for name in result1:
            if not os.path.exists(cur_dir+'/'+name.group(1)):#判断文件夹是否已经存在
                os.mkdir(os.path.join(cur_dir,name.group(1)))
            cur_dir =cur_dir+'/'+name.group(1)    
        
    #判断有多少个/bizhi/nvxing/index_1.html这样的页面        
    
        #page处可以自己定制要下载多少页
        page = 100
        result1 = []
        while (len(result1)==0):
            url1 = "http://www.ivsky.com"+a+"index_"+str(page)+".html"
            try:
                request = urllib.request.Request(url1) 
                response = urllib.request.urlopen(request)
                html = response.read().decode('utf8')
                pattern = re.compile('')
                result1 = re.findall(pattern,html)
            except urllib.error.HTTPError as e:
                error1 = e.code
                #print(response)    
            page = page-1
            
    #获取到了每个小分类有多少个page
    #然后依次访问每个小分类的小合集页面抓取/bizhi/zhangtianai_v43460/这种图片专辑地址
        page = page+1
        while(page>=1):
            url2 = "http://www.ivsky.com"+a+"index_"+str(page)+".html"
            request2 = urllib.request.Request(url2,headers=header) 
            response2 = urllib.request.urlopen(request2)
            html2 = response2.read().decode('utf8')
            pattern2 = re.compile(' 
  

 

你可能感兴趣的:(爬虫)