分享72个Html杂七杂八模板,总有一款适合您

简介: 分享72个Html杂七杂八模板,总有一款适合您

分享72个Html杂七杂八模板,总有一款适合您


 

72个Html杂七杂八模板下载链接:https://pan.baidu.com/s/1rhQv5htRbPE5zM0JiuFqYg?pwd=8888

提取码:8888

学习知识费力气,收集整理更不易。知识付费甚欢喜,为咱码农谋福利。

import os
import shutil
import time
from time import sleep
from docx import Document
from docx.shared import Inches
from selenium.webdriver.edge.options import Options
from framework.base.BaseFrame import BaseFrame
from sprider.business.SeleniumTools import SeleniumTools
from sprider.business.SpiderTools import SpiderTools
from selenium import webdriver
from selenium.webdriver.common.by import By
from sprider.model.SpriderEntity import SpriderEntity
from sprider.access.SpriderAccess import SpriderAccess
title_name = "Html模板"
class MoBanWangHtmlSelenium:
    #region 经常修改的变量
    base_url = "http://www.mobanwang.com"  # html模板王
    save_path = "D:\\Spider\\Html"
    spider_count =72  #采集数量
    spider_start_count =1812 #正在采集第55页的第12个资源,共204页资源
    #endregion
    word_content_list = []
    folder_name = "Html模板"
    page_end_number = 50 # 最后一页
    max_pager = 30  # 每页的数量 影响再次采集的起始位置
    haved_spider_count = 0  # 已经采集的数量
    page_count = 1  # 每个栏目开始业务content="text/html; charset=gb2312"
    filter_down_file = []
    word_image_count = 1  # word插入图片数量 同时也是明细采集图片和描述的数量
    sprider_detail_index = 0  # 明细方法采集的数量 累加
    tempFileList = []
    def spider(self, title_name):
        """
        :return:
        """
        if title_name == "Html册模板":
            self.first_column_name="mb"
            self.second_column_name = "album"
        elif title_name == "Html模板":
            self.first_column_name = "mb"
            self.second_column_name = "other"
        BaseFrame().debug("开始采集" + self.folder_name + "...")
        self.merchant = int(self.spider_start_count) // int(self.max_pager) + 1  # 起始页码用于效率采集
        BaseFrame().right("本次采集参数:日志路径=" + str(BaseFrame().LOG_PATH) + "")
        BaseFrame().right("本次采集参数:spider_count=" + str(self.spider_count) + "")
        BaseFrame().right("本次采集参数:title_name=" + title_name + "")
        self.sprider_category = title_name  # 一级目录self.folder_name
        #多少个 某某某
        second_folder_name = str(self.spider_count) + "个" + title_name  # 二级目录
        self.sprider_type = second_folder_name #多少个某某某东东
        #浏览器的下载路径
        #self.down_path = self.save_path + os.sep +"\\" + self.folder_name + "\\" + second_folder_name + "\\Temp\\"
        self.down_path = self.save_path + os.sep + self.folder_name + os.sep + second_folder_name + "\\Temp"
        BaseFrame().right("本次采集参数:down_path=" +  self.down_path + "")
        # 原始路径+一级目录+二级目录
        # First/PPT/88个动态PPT模板
        self.file_path = self.save_path + os.sep + self.folder_name + os.sep + second_folder_name
        BaseFrame().right("本次采集参数:file_path=" + self.file_path + "")
        # First/PPT/88个动态PPT模板/动态PPT模板
        self.save_path = self.save_path + os.sep + self.folder_name + os.sep + second_folder_name + os.sep + title_name
        BaseFrame().right("本次采集参数:save_path=" + self.save_path + "")
        #根据栏目构建URL
        spider_url = self.base_url + "/{0}/{1}".format(self.first_column_name,self.second_column_name)
        if os.path.exists(self.down_path) is True:
            shutil.rmtree(self.down_path)
        if os.path.exists(self.down_path) is False:
            os.makedirs(self.down_path)
        if os.path.exists(self.save_path) is True:
            shutil.rmtree(self.save_path)
        if os.path.exists(self.save_path) is False:
            os.makedirs(self.save_path)
        edge_options = Options()
        diy_prefs = {'profile.default_content_settings.popups': 0,
                     'download.default_directory': '{0}'.format(self.down_path)}
        # 添加路径到selenium配置中
        edge_options.add_experimental_option('prefs', diy_prefs)
        edge_options.add_argument('--headless')  # 隐藏浏览器
        # 实例化chrome浏览器时,关联忽略证书错误
        browser = webdriver.Edge(options=edge_options)
        # 窗口最大化
        #  browser.maximize_window()
        browser.set_window_size(1300, 1000)  # 分辨率 1280*800
        browser.get(spider_url)
        # content = driver.page_source
        #masonry-brick
        element_list = browser.find_elements(By.CLASS_NAME, "mb-mblist")
        if SeleniumTools.judeg_element_isexist(browser, "LINK_TEXT", "下一页") == 1:
            element = browser.find_element(By.LINK_TEXT, "下一页")
            next_url = element.get_attribute("href")
            page_url = next_url.split("_")[1] # 47.html
            self.page_end_number=int(page_url.split(".")[0])
            #class ="page-link" href="http://www.mobanwang.com/mb/ind/List_47.html" > 下一页 < / a >
        real_page_number=int(self.page_end_number)+1
        self.page_count = self.merchant
        while True:
            try:
                if self.page_count == real_page_number-int(self.page_end_number):
                    self.spider_detail(browser, element_list, self.page_count, self.page_end_number, self.down_path)
                    pass
                else:
                    if self.haved_spider_count == self.spider_count:
                        BaseFrame().debug("spider采集到达数量采集停止...")
                        BaseFrame().debug("开始写文章...")
                        self.builder_word(self.folder_name, self.word_content_list)
                        BaseFrame().debug("文件编写完毕,请到对应的磁盘查看word文件和下载文件!")
                        break
                    next_url = self.base_url + "/{0}/{1}/List_{2}.html".format(self.first_column_name,
                                                                       self.second_column_name,
                                                                       real_page_number -self.page_count)
                    BaseFrame().debug("开始采集:" + next_url)
                    browser.get(next_url)
                    element_list = browser.find_elements(By.CLASS_NAME, "mb-mblist")
                    self.spider_detail(browser, element_list, self.page_count, self.page_end_number, self.down_path)
                if int(self.page_end_number)==self.page_count:
                    break
                self.page_count = self.page_count + 1  # 页码增加1
            except Exception as e:
                print("spider()执行过程出现错误:" + str(e))
                break
    def spider_detail(self, driver, element_list, page_count, max_page, down_path):
        """
        采集明细页面
        :param driver:
        :param element_list:
        :param page_count:
        :param max_page:
        :param down_path:
        :return:
        """
        index = 0
        element_array = []
        element_length = len(element_list)
        print("当前页" + str(page_count) + "每页共" + str(element_length))
        for element in element_list:
            element_a = element.find_element(By.TAG_NAME, "a")
            # print(html_content)
            next_url = element_a.get_attribute("href")
            coder_title = element_a.get_attribute("title")
            e = coder_title + "$" + next_url
            element_array.append(e)
            pass
        #再次开始采集不从第一页开始采集 提升效率
        if int(self.page_count) == int(self.merchant):
            self.sprider_start_index = int(self.spider_start_count) % int(self.max_pager)
            index = self.sprider_start_index
        while index < element_length:
            if os.path.exists(down_path) is False:
                os.makedirs(down_path)
            if self.haved_spider_count == self.spider_count:
                BaseFrame().debug("spider_detail采集到达数量采集停止...")
                break
            # element = element_list[index]
            element = element_array[index]
            time.sleep(1)
            index = index + 1
            spider_info = "正在采集第" + str(page_count) + "页的第" + str(index) + "个资源,共" + str(max_page) + "页资源"
            BaseFrame().debug(spider_info)
            next_url = element.split("$")[1]
            coder_title = element.split("$")[0]
            try:
                codeEntity = SpriderEntity()  # 下载过的资源不再下载
                codeEntity.sprider_base_url = self.base_url
                codeEntity.create_datetime = SpiderTools.get_current_datetime()
                codeEntity.sprider_url = next_url
                codeEntity.sprider_pic_title = coder_title
                codeEntity.sprider_pic_index = str(index)
                codeEntity.sprider_pager_index = page_count
                codeEntity.sprider_type = self.sprider_type
                if SpriderAccess().query_sprider_entity_by_urlandindex(coder_title) is None:
                    SpriderAccess().save_sprider(codeEntity)
                else:
                    BaseFrame().debug(coder_title + next_url + "数据采集过因此跳过")
                    continue
                driver.get(next_url)  # 请求明细页面1
                BaseFrame().debug("采集明细内容网址:" + next_url)
                #mb-color-666
                span_element = driver.find_element(By.XPATH, "/html/body/div[3]/div/div[2]/div/div[2]/div[1]/span[2]")
                if "psd" in span_element.text : #html│psd│flash
                    BaseFrame().right("PSD格式的文件因此去跳过")
                    continue
                if SeleniumTools.judeg_element_isexist(driver, "LINK_TEXT", "免费下载") == 1:
                    print("准备点击【免费下载】按钮...")
                    div_element = driver.find_element(By.LINK_TEXT, "免费下载")  # 下载源码.click()
                    div_element.click()
                else:
                    if SeleniumTools.judeg_element_isexist(driver, "LINK_TEXT", "点击下载") == 1:
                        print("准备【点击下载】按钮...")
                        a_element = driver.find_element(By.LINK_TEXT, "点击下载")  # 下载源码.click()
                        a_element.click()
                    else:
                        BaseFrame().debug(coder_title + "下载按钮不存在,因此跳过哦....")
                        continue
                result, message = SpiderTools.judge_file_exist(True, 600, 1, down_path, "zip|rar|pptx|ppt", self.tempFileList)  # 判断源码
                if result is True:
                    title_content = ""
                    title_image = ""
                    spider_content = [coder_title, title_image, title_content]  # 图片和描述采集成功的记录
                    self.word_content_list.append(spider_content)  # 增加到最终的数组
                    self.haved_spider_count = self.haved_spider_count + 1
                    BaseFrame().right(
                        "已经采集完成第" + str(self.haved_spider_count) + "个,共需要采集" + str(self.spider_count) + "个")
                    time.sleep(1)
                    driver.back()
                    #移动文件
                    coder_title = str(coder_title).replace("::", "").replace("/", "").strip()  # 去掉windows不识别的字符
                    files = os.listdir(down_path)
                    file_name = files[0]  # 获取默认值
                    srcFile = down_path + os.sep + file_name
                    file_ext = os.path.splitext(srcFile)[-1]
                    dstFile = down_path + os.sep + coder_title + file_ext
                    os.rename(srcFile, dstFile)
                    srcFile = dstFile
                    dstFile = self.save_path + os.sep + coder_title + file_ext
                    shutil.move(srcFile, dstFile)  # 移动文件
                    self.sprider_detail_index = self.sprider_detail_index + 1
                else:
                    print("result=" + str(result) + "" + message)
                    files = os.listdir(down_path)  # 读取目录下所有文件
                    coder_title = str(coder_title).replace("/", "")  # 去掉windows不识别的字符
                    try:
                        if str(message) == "0个文件认定是False":
                            BaseFrame().error(coder_title + "文件不存在...")
                            pass
                        else:
                            BaseFrame().error("检测下载文件出错可能原因是等待时间不够已经超时,再等待60秒...")
                            time.sleep(60)
                            shutil.rmtree(down_path)  # 如果没下载完是无法删除的
                            # 清空数组
                            self.filter_down_file.clear()
                    except Exception as e:
                        BaseFrame().error(e)
                        # 使用数组append记录文件名字 移动的时候过滤
                        shutil.rmtree(down_path)  # 如果没下载完是无法删除的
                    pass
            except Exception as e:
                BaseFrame().error("sprider_detail()执行过程出现错误:" + str(e))
                #shutil.rmtree(down_path)  # 如果没下载完是无法删除的
        if int(page_count) == int(max_page):
            self.builder_word(self.folder_name, self.word_content_list)
            BaseFrame().debug("文件编写完毕,请到对应的磁盘查看word文件和下载文件!")
            return

image.gif

信息订阅登记响应式网页模板

教育机构项目展示响应式网站模板

产品定价单网页模板

医生查询预约表单响应式网页模板

不动产交易查询服务响应式网站模板

客户调查表单响应式网页模板

经典商务注册表单响应式网页模板

紫色流星404页面模板

艺术色彩登录框网页模板

天空计时器组件模板

成功之路教育响应式网站模板

时尚商务登记表单响应式网页模板

社交登录表单响应式网页模板

骑行社交名片响应式模板

皇家餐馆响应式网页模板

滑板上线倒计时反馈响应式网页模板

image.gif 编辑

摄影师拍照预约表单响应式网页模板

详细资料登记表单响应式网页模板

资料登录框响应式网页模板

冰淇淋甜品店响应式网页模板

青草注册登录框响应式网页模板

礼品登记表单响应式网页模板

商务订阅表单响应式网页模板

守护者婚礼展示响应式网站模板

预约表单信息响应式网页模板

企业联系名片响应式网页模板

归路倒计时响应式网页模板

梦想家园规划展示响应式网页模板

卡布奇诺咖啡产品响应式网页模板

休闲日历控件模板

网站托管定价表网页模板

路径错误404页面模板

快速简洁登录框响应式模板

快门摄影公司响应式网页模板

绿叶粒子登录框响应式网页模板

城市日历组件模板

深海倒计时响应式网页模板

太阳镜展示商城响应式网页模板

社交资料信息组件响应式网页模板

暗景注册登录表单响应式网页模板

在线教育培训服务响应式网页模板

信息验证登记表单响应式网页模板

网站工程即将上线响应式网页模板

网站底部说明响应式网页模板

在线计算器组件响应式网页模板

美容产品日志响应式网页模板

蓝色登录窗口响应式网页模板

视讯登录框响应式网页模板

蓝绿渐变学生登录表单网页模板

订单信息提交响应式网页模板

酒店预订表单响应式网页模板

比萨饼餐馆介绍响应式网页模板

流行动态订阅框响应式网页模板

数据统计分析后台响应式网页模板

婚姻信息登录框响应式网页模板

假面商务登录表单响应式网页模板

知识学习中心响应式网页模板

绿色健康订阅表单响应式网页模板

摄影俱乐部介绍响应式网页模板

高级餐厅展示倒计时网页模板

时尚设计师登录框网页模板

超市登录表单响应式网页模板

大学服务动态展示响应式网页模板

追寻的路倒计时响应式网页模板

交互登录框响应式网页模板

学习动态登录框响应式网页模板

推荐计划表单响应式网页模板

辛辣美味披萨餐厅响应式网页模板

设计师专业展示响应式网页模板

流浪宠物登记表单响应式网页模板

儿童兴趣服务中心响应式网页模板

蓝雨登录框响应式网页模板

你有时间常去我家看看我在这里谢谢你啦...

我家地址:亚丁号

最后送大家一首诗:

山高路远坑深,

大军纵横驰奔,

谁敢横刀立马?

惟有点赞加关注大军。

目录
相关文章
|
存储 消息中间件 缓存
相比游戏客户端,游戏服务端开发无关紧要吗
感觉游戏服务端,除了更新,保存数据啊、生成随机物品啊、都没什么了,好像游戏开发场景中,服务端已经无关紧要了。看着客户端忙成狗,正在摸鱼的你是否也有过这样的疑问?
1454 0
相比游戏客户端,游戏服务端开发无关紧要吗
|
5月前
|
Linux API 开发工具
新手零踩坑:OpenClaw(Clawdbot)部署全指南(阿里云轻量+Mac/Linux/Windows)+免费百炼API+Skills集成教程
OpenClaw(前身为Clawdbot、Moltbot)作为开源AI智能体接入框架,凭借零代码自动化、模块化技能扩展、多平台适配的核心特性,成为2026年新手入门AI自动化工具的首选。其核心价值在于无需复杂编程,仅通过自然语言指令,即可调用Clawhub技能市场的数千款技能,实现文档处理、网页抓取、任务自动化、团队协作等各类重复性工作,适配个人办公、轻量开发、调研分析等多种场景。
702 3
|
编解码 数据挖掘 Windows
Office 2021 for Windows 简体中文 官网下载地址
Microsoft Office 2021 Pro Plus专业增强版包括对Word、Excel、PowerPoint、Outlook、OneNote、Publisher、Access、Teams的更新。
2396 0
|
2月前
|
机器学习/深度学习 存储 新能源
K-3016L 高性能双组份环氧灌封胶技术解析:从导热机制到工程应用的全方位指南
K-3016L是高性能双组份环氧灌封胶,导热系数1.85 W/m·K、体积电阻率≥10¹⁶ Ω·cm、固化收缩率≤0.8%,兼具高导热、高绝缘与低应力特性,适用于新能源汽车电控、IGBT模块、光伏逆变器等功率电子器件灌封保护。(239字)
406 0
|
2月前
|
数据采集 JSON 监控
小红书评论 API 接口详解与实战开发
小红书作为生活方式、美妆穿搭、母婴家居等领域的核心内容平台,其笔记评论区沉淀了大量真实用户反馈、种草痛点、消费决策、品牌口碑信息。 对品牌方、运营团队、数据服务商而言,评论数据可用于:
|
4月前
|
编解码 自然语言处理 安全
无接口也能通:实在Agent如何用ISSUT屏幕语义技术打通企业异构系统孤岛
实在Agent首创ISSUT屏幕语义理解技术,不依赖API,像人一样“看懂”并操作各类系统界面(SAP/钉钉/网银/老旧OA等),自动完成跨系统数据搬运与流程闭环,破解企业“系统孤岛”难题,开箱即用,安全合规。(239字)
|
C# 图形学
【Unity3D实例-功能-拔枪】角色拔枪(一)动态创建武器
本文详细讲解了Unity射击游戏中角色拔枪功能的实现方法,包括动态创建武器、设置拔枪动画、角色手部挂载点配置及动画器逻辑搭建,完整呈现拔枪动作的制作流程。
463 0
|
9月前
|
人工智能 自然语言处理 安全
技术人办活动不用慌,这个AI指令帮你搞定完整策划案
技术人办活动头疼?用AI指令轻松生成完整策划案!覆盖目标分析、流程设计、预算风控等八大模块,适配沙龙、发布会等多种场景。结合国产AI工具,30分钟搞定专业方案,助力开发者高效落地活动。
1222 2
|
10月前
|
存储 自然语言处理 Java
全球语言无障碍:Unicode标准解读与技术演进史
Unicode是全球字符统一编码标准,旨在为世界上所有文字、符号及emoji分配唯一码点,解决多语言乱码问题。它兼容ASCII,支持超14万字符,覆盖现代与古文字,通过UTF-8、UTF-16等编码方案实现跨平台信息交换,是互联网、操作系统和多语言通信的基础。
1831 2
|
存储 Java 数据库连接
Mybatis-plus@DS实现动态切换数据源应用
Mybatis-plus@DS实现动态切换数据源应用
2422 0

热门文章

最新文章