通过网页查看服务器算法,java分析html算法(java网页蜘蛛算法示例)

遇到复杂而繁琐的html页面大家都望而却步。因为很难获取到相应的数据。

最古老的办法的是尝试用正则表达式,估计那么繁琐的东西得不偿失,浪费我们宝贵的时间。

第二个办法用开源组织htmlparser的包,这个是一个比较老的项目,但是效果估计不是很好,好像不可以深入分析html,只能分析5级的结构;

我这里有个htmlparser的源代码,可以获取所有的超链接的

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package test;

import java.util.HashMap;

import java.util.Map;

import org.htmlparser.Node;

import org.htmlparser.NodeFilter;

import org.htmlparser.Parser;

import org.htmlparser.tags.LinkTag;

import org.htmlparser.util.NodeList;

public class GetLinkTest {

public static void main(String[] args) {

try {

// 通过过滤器过滤出标签

Parser parser = new Parser("//www.zzvips.com");

NodeList nodeList = parser.extractAllNodesThatMatch(new NodeFilter() {

// 实现该方法,用以过滤标签

public boolean accept(Node node) {

if (node instanceof LinkTag)// 标记

{

return true;

}

return false;

}

});

// 打印

for (int i = 0; i < nodeList.size(); i++) {

LinkTag n = (LinkTag) nodeList.elementAt(i);

//System.out.print(n.getStringText() + " ==>> ");

//System.out.println(n.extractLink());

try {

if (n.extractLink().equals("//www.zzvips.com")) {

System.out.println(n.extractLink());

}

} catch (Exception e) {

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

第三个办法,也是我现在一直在用的办法,首先把html清理为xml,然后用java解析xml获取数据,现在上传一个java clean html的源代码:

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package exec;

import java.io.File;

import java.io.IOException;

import org.htmlcleaner.CleanerProperties;

import org.htmlcleaner.HtmlCleaner;

import org.htmlcleaner.PrettyXmlSerializer;

import org.htmlcleaner.TagNode;

/**

*

*/

public class HtmlClean {

public void cleanHtml(String htmlurl, String xmlurl) {

try {

long start = System.currentTimeMillis();

HtmlCleaner cleaner = new HtmlCleaner();

CleanerProperties props = cleaner.getProperties();

props.setUseCdataForScriptAndStyle(true);

props.setRecognizeUnicodeChars(true);

props.setUseEmptyElementTags(true);

props.setAdvancedXmlEscape(true);

props.setTranslateSpecialEntities(true);

props.setBooleanAttributeValues("empty");

TagNode node = cleaner.clean(new File(htmlurl));

System.out.println("vreme:" + (System.currentTimeMillis() - start));

new PrettyXmlSerializer(props).writeXmlToFile(node, xmlurl);

System.out.println("vreme:" + (System.currentTimeMillis() - start));

} catch (IOException e) {

e.printStackTrace();

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328133.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM 调优系列之监控工具

转载自 JVM 调优系列之监控工具 摘要: 项目部署线上之后&#xff0c;我们该如何基于监控工具来快速定位问题.... 通过上一篇的jvm垃圾回收知识&#xff0c;我们了解了jvm对内存分配以及垃圾回收是怎么来处理的。理论是指导实践的工具&#xff0c;有了理论指导&#xff0c;定位…

写给开发者:记录日志的10个建议

尽管在写这篇博文的时候&#xff0c;我是在负责运维工作&#xff0c;不过本文主要是写给开发者的。 对我来说&#xff0c;明白如何记录日志和记录什么&#xff0c;是软件工程师必须明了的最艰巨的任务之一。之所以这么说&#xff0c;是因为这项任务与预测&#xff08;divinatio…

解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)错误

解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)错误 2018年07月23日 16:55:42 犹抱琵琶半遮面 阅读数 29677 &#xff01;&#xff01;&#xff01;此类问题出现的原因是——不细心 一般的原因 Mapper interface和xml文件的定义对应…

Java 9 中的 GC 调优基础

转载自 Java 9 中的 GC 调优基础在经过了几次跳票之后&#xff0c;Java 9终于在原计划日期的整整一年之后发布了正式版。Java 9引入了很多新的特性&#xff0c;除了闪瞎眼的Module System和REPL&#xff0c;最重要的变化我认为是默认GC&#xff08;Garbage Collector&#xf…

mysql删除索引 增加索引

使用ALTER TABLE语句创建索引alter table table_name add index index_name (column_list) ; alter table table_name add unique (column_list) ; alter table table_name add primary key (column_list) ;删除索引drop index index_name on table_name ; alter table table_n…

Hibernate基本概念 (3)

一、hibernate配置&#xff1a;1.导jar包2.配置主文件a。数据库连接 url 驱动 用户名&#xff0c;密码&#xff0c;方言b。相关 显示sql&#xff0c;sql格式化c。映射文件3.映射文件表到实体 字段到属性查询&#xff1a;select dname from Dept d;参数&#xff1a;1.按位置&…

全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)

在开发涉及到数据库的程序时&#xff0c;常会遇到一开始设计的结构不能满足需求需要再添加新字段或新表的情况&#xff0c;这时就需要进行数据库迁移。实现数据库迁移有很多种办法&#xff0c;从手动管理各个版本的ddl脚本&#xff0c;到实现自己的migrator&#xff0c;或是使用…

ThreadLocal 内存泄露的实例分析

转载自 ThreadLocal 内存泄露的实例分析前言 昨天分享了一篇深入分析 ThreadLocal 内存泄漏问题是从理论上分析ThreadLocal的内存泄漏问题&#xff0c;这一篇文章我们来分析一下实际的内存泄漏案例。分析问题的过程比结果更重要&#xff0c;理论结合实际才能彻底分析出内存泄…

ZKWeb网站框架的动态编译的实现原理

ZKWeb网站框架是一个自主开发的网页框架&#xff0c;实现了动态插件和自动编译功能。ZKWeb把一个文件夹当成是一个插件&#xff0c;无需使用csproj或xproj等形式的项目文件管理&#xff0c;并且支持修改插件代码后自动重新编译加载。 下面将说明ZKWeb如何实现这个功能&#xff…

Hibernate基本概念 (4)

一、缓存&#xff1a;提高性能1.一级缓存&#xff1a;session级别 一个session共享2.二级缓存&#xff1a;进程或群集级别 不同session可以共享步骤&#xff1a;1.导jar包 2.添加xml放到src3.配置hibernate.cfg.xmla.开启二级缓存b。缓存管理类4.配置持久化类使用二级缓存 3…

Java中的内存泄露的几种可能

转载自 Java中的内存泄露的几种可能Java内存泄漏引起的原因&#xff1a;内存泄漏是指无用对象&#xff08;不再使用的对象&#xff09;持续占有内存或无用对象的内存得不到及时释放&#xff0c;从而造成内存空间的浪费称为内存泄漏。长生命周期的对象持有短生命周期对象的引用…

Visual Studio“15”启动速度提升

在Visual Studio“15”开发工作的技术预览阶段&#xff0c;微软称自己的主要目标之一是改善性能。他们已经对这些改进进行过一定程度的介绍&#xff0c;最近又通过更全面的信息进一步介绍了这些变化。本文将介绍这些让VS“15”启动速度更快的改进。 更快速地启动VS“15” 微软项…

介绍Java中的内存泄漏

转载自 介绍Java中的内存泄漏Java语言的一个关键的优势就是它的内存管理机制。你只管创建对象&#xff0c;Java的垃圾回收器帮你分配以及回收内存。然而&#xff0c;实际的情况并没有那么简单&#xff0c;因为内存泄漏在Java应用程序中还是时有发生的。 下面就解释下什么是内存…

2-6 基于SpringBoot的SpringSecurity环境快速搭建与验证

springboot是基于spring的一套全新的框架&#xff0c;其目的是为了简化spring的初始搭建和开发过程&#xff0c;不需要再做样板话的配置了 https://start.spring.io/ 上面这些都不想做权限拦截

DotLiquid模板引擎简介

DotLiquid是一个在.Net Framework上运行的模板引擎&#xff0c;采用Ruby的Liquid语法&#xff0c;这个语法广泛的用在Ruby on rails和Django等网页框架中。DotLiquid相比于Mvc默认模板引擎Razor的好处有&#xff1a; 因为不需要编译到程序集再载入首次渲染速度很快不会导致内存…

Hibernate基本概念 (5)

-----模板1.一对多(set)<set name"属性"><key column"关系外键"/><one-to-many class"实体类全名称"/></set>2.多对一<many-to-one name"" class"" column"关系外键"/>3.多对多(s…

Vue 阻止事件冒泡

转载自 Vue2学习笔记:事件对象、事件冒泡、默认行为1.事情对象<!DOCTYPE html> <html> <head><title></title><meta charset"utf-8"><script src"http://unpkg.com/vue/dist/vue.js"></script><scrip…

Windows Server 2016及System Center 2016正式商用

Windows Server 2016 及 System Center 2016 现已正式商用。作为微软全新一代的服务器操作系统和数据中心管理平台&#xff0c;它们将为企业 IT 带来全面的性能与安全性提升&#xff1b;为数据中心、私有云及公有云环境提供一致的混合云管理平台&#xff1b;并为在本地和云端开…

2-7 SpringBoot常用注解讲解

首先&#xff0c;讲解一下RestController RestController RestController是Controller和ResponseBody的结合。 RnableAutoConfiguration EnableAutoConfiguration springboot建议只能有一个有该注解的类 这个注解的作用是 根据你配置的依赖自动配置 根据jar包的配置…

vue-beauty UI库

vue-beauty UI库文档地址 一、全局配置全局CSS样式Polyfill二、组件&#xff08;1&#xff09;普通Button 按钮Icon 图标&#xff08;2&#xff09;布局Grid 栅格Layout 布局MorePanel 更多条件&#xff08;3&#xff09;导航Affix 固钉Breadcrumb …