实时抓取网页数据(【干货】网页静态化的几种常见问题及解决方法)

优采云 发布时间: 2021-12-21 05:05

  实时抓取网页数据(【干货】网页静态化的几种常见问题及解决方法)

  一、 静态页面

  1、 动态和静态页面

  静态页面

  即静态网页是指加载了内容的HTML页面,直接加载到客户端浏览器上显示,不经过请求服务器数据和编译的过程。通俗的说就是生成一个独立的HTML页面,不需要与服务器进行数据交互。

  优缺点说明:

  动态页面

  指一种网页编程技术,而不是静态网页。页面内容需要由服务器获取。在不考虑缓存的情况下,服务接口的数据发生变化,页面加载的内容也会实时发生变化,但显示的内容是数据库操作动态变化的结果。

  优缺点说明:

  动态页面和静态页面有很强的相关性,比较起来更容易理解。

  2、应用场景

  动态页面的静态处理有很多应用场景,例如:

  静态技术基础:提示服务的响应速度,或者提前做好响应节点,比如一般流程、页面(客户端)请求服务、服务处理、响应数据、页面加载等一系列流程不仅复杂,而且耗时,如果基于静态技术处理后直接加载静态页面,则请求结束。

  二、过程分析

  静态页面转换是一个比较复杂的过程,核心过程如下:

  

  主要流程大致如上。如果数据接口的响应参数发生变化,需要重新生成静态页面,因此数据加载的实时性会低很多。

  三、代码实现案例

  1、基本依赖

  FreeMarker 是一个模板引擎:一个基于模板和要更改的数据的通用工具,用于生成输出文本(HTML 网页、电子邮件、配置文件、源代码等)。

  

org.springframework.boot

spring-boot-starter-freemarker

  2、页面模板

  这里都使用了 FreeMarker 开发的模板样式。

  

PageStatic

主题:${myTitle}

作者:${data.auth} 日期:${data.date}

规格描述

产品详情

${info.desc}

${info.imgUrl}

${imgIF}

  FreeMarker 的语法与原来的 HTML 语法基本一致,但有自己的一套数据处理标签,使用起来并不复杂。

  3、分析过程

  通过分析,可以将页面模板和数据接口数据合并在一起。

  

@Service

public class PageServiceImpl implements PageService {

private static final Logger LOGGER = LoggerFactory.getLogger(PageServiceImpl.class) ;

private static final String PATH = "/templates/" ;

@Override

public void ftlToHtml() throws Exception {

// 创建配置类

Configuration configuration = new Configuration(Configuration.getVersion());

// 设置模板路径

String classpath = this.getClass().getResource("/").getPath();

configuration.setDirectoryForTemplateLoading(new File(classpath + PATH));

// 加载模板

Template template = configuration.getTemplate("my-page.ftl");

// 数据模型

Map map = new HashMap();

map.put("myTitle", "页面静态化(PageStatic)");

map.put("tableList",getList()) ;

map.put("imgList",getImgList()) ;

// 静态化页面内容

String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, map);

LOGGER.info("content:{}",content);

InputStream inputStream = IOUtils.toInputStream(content,"UTF-8");

// 输出文件

FileOutputStream fileOutputStream = new FileOutputStream(new File("F:/page/newPage.html"));

IOUtils.copy(inputStream, fileOutputStream);

// 关闭流

inputStream.close();

fileOutputStream.close();

}

private List getList (){

List tableInfoList = new ArrayList() ;

tableInfoList.add(new TableInfo(Constant.desc1, Constant.img01));

tableInfoList.add(new TableInfo(Constant.desc2,Constant.img02));

return tableInfoList ;

}

private List getImgList (){

List imgList = new ArrayList() ;

imgList.add(Constant.img02) ;

imgList.add(Constant.img02) ;

return imgList ;

}

}

  生成的HTML页面可以直接用浏览器打开,不再需要依赖任何数据接口服务。

  四、源码地址

  GitHub·地址

  GitEE·地址

  以上就是文章关于SpringBoot2集成FreeMarker实现页面静态化示例的介绍。更多SpringBoot2集成FreeMarker实现页面静态内容相关相关内容,请搜索之前的文章面圈教程或继续浏览下方相关文章,希望大家多多支持面条教程未来!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线