from lxml import etree
import requests

class Mobanzhijia(object):
    def __init__(self,themes):
        self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}
        self.themes_url = "http://www.cssmoban/tags.asp?n={}".format(themes)  #设置需要查找的主题的链接
        self.single_url = "http://www.cssmoban"  #将要与每个单独模板拼接的网站
        self.page_url = "http://www.cssmoban/tags.asp"   #将要每一页模板拼接的网站
        self.page_url_o = None    #初始化每页需拼接的内容
        self.themes_list = []    #game_list初始化列表,用来存储themes_url链接中所有的单个模板页的链接
        self.themes_zip_list = []    #game_zip_list初始化列表,用来存储themes_list列表中的每个链接的zip文件的下载链接
        self.moban_name = []    #get_moban_themes初始化列表,用来存储themes_list列表中的每个链接的zip文件的文件名

    #获取每页的链接
    def get_page_url(self):
        page_response = requests.get(self.themes_url, headers=self.headers)
        page_html = etree.HTML(page_response.content)
        self.page_url_o = page_html.xpath('//div[@class="tagsPage"]/form/a[text()="下一页"]/@href')  # 获取下一页的网页需拼接的地址
        #判断获取是否为空,为空则获取到最后一页了
        if not self.page_url_o:
            return
        self.themes_url = self.page_url+self.page_url_o[0]
        self.get_moban_url_list()

    #获取themes_url页中的所有模板的网页
    def get_moban_url_list(self):
        themes_response = requests.get(self.themes_url, headers=self.headers)
        themes_html = etree.HTML(themes_response.content)
        moban_url_list = themes_html.xpath('//ul[@class="thumbItem large clearfix"]/li/a/@href')  # 获取每个模板的网页地址
        for url in moban_url_list:
            self.themes_list.append(self.single_url+url)  #拼接储存
        self.get_moban_zip()

    #获取themes_url链接中所有zip文件的下载地址
    def get_moban_zip(self):
        for i in self.themes_list:
            moban_response = requests.get(i, headers=self.headers)
            moban_html = etree.HTML(moban_response.content)
            moban_zip = moban_html.xpath('//div[@class="btn"]/a[2]/@href')    #获取zip链接
            moban_name = moban_html.xpath('//h1/text()')    #获取zip文件名字
            self.themes_zip_list.append(moban_zip[0])
            self.moban_name.append(moban_name[0])
        print(self.themes_zip_list)   #输出获取到的模板的zip文件的链接
        print(self.moban_name)    #输出获取到的文件的名字
        self.get_write()

    #将所有zip文件下载
    def get_write(self):
        for index, i in enumerate(self.themes_zip_list):
            zip_response = requests.get(i, headers=self.headers)
            with open(str(self.moban_name[index])+".zip","wb") as f:
                f.write(zip_response.content)
        #清空列表准备保存下一页内容
        self.themes_list = []
        self.themes_zip_list = []
        self.moban_name = []

        self.get_page_url()

themes = input("input:")    #输入想获取的模板类型
spider = Mobanzhijia(themes)
spider.get_moban_url_list()

以游戏类型的模板为例(以下为部分截图):

 

 

更多推荐

python爬虫学习——分类获取模板之家的所有模板