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.com/tags.asp?n={}".format(themes) #设置需要查找的主题的链接
self.single_url = "http://www.cssmoban.com" #将要与每个单独模板拼接的网站
self.page_url = "http://www.cssmoban.com/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()
以游戏类型的模板为例(以下为部分截图):