python3爬取高清壁纸(2)

上次只是爬取一个专辑的图片,这次要爬取一整个页面的所有专辑的图片。

在上次的代码的基础上进行修改就行了,从专辑的索引页面开始,爬取该页面上所有的专辑的链接,再套用上次的代码就行了。

若要爬取多个页面只需在外围套上一个循环就可以了。

代码如下:

import requests
import re
from bs4 import BeautifulSoup
import os

#爬取的网站:http://www.win4000.com/wallpaper_detail_54520.html

def Get_image_url(url):
    #传入页面的URL,得到所有图片所在的标签和图册的名字,并返回
    
    Res = requests.get(url)
    Soup = BeautifulSoup(Res.text,'lxml')
    
    Name = Soup.select('h1')[0].string
    Tag = 'img[title="' + Name + '"]'
    Image = Soup.select(Tag)
    
    return Image,Name

def Download_Image(Image_url):
    #传入图片的URL,将图片保存在本地
    Image = requests.get(Image_url,stream=True)
    #将链接的最后一个字符串最为图片的名字
    name = Image_url.split('/')[-1]
    #白村图片
    with open(name,'wb') as f:
        f.write(Image.content)

def Get_index_image(Url):
    Res = requests.get(Url)
    Reg = r'<a href="(.+?)" title=.+? target='
    Reg = re.compile(Reg)
    Image = re.findall(Reg,Res.text)
    Image = set(Image)
    Image = [i for i in Image if len(i) > 49]
    return Image
        
def main(url):
    #主调函数
    #url = "http://www.win4000.com/wallpaper_detail_54520.html"
    [Image,Name] = Get_image_url(url)
    #print(Name,Image)
    #保存当前目录
    path = os.getcwd()
    #创建保存图片的目录
    if (not os.path.exists(Name)):
        os.mkdir(Name)
        os.chdir(path + '/' + Name)
        for I in Image:
            Download_Image(I['src'])
        #返回之前的目录
        os.chdir(path)
        print(Name+'
')
    else:
        print(Name + " 已经下载过了")
    
if __name__ == '__main__':
    Main_Url = "http://www.win4000.com/wallpaper_192_0_0_1.html"
    Url = Get_index_image(Main_Url)
    for u in Url:
        main(u)
    print("下载完成!")
原文地址:https://www.cnblogs.com/jxc321/p/7396603.html