HTMLParser的filter访问方式详解

uni踩坑笔记 - 离线打包调起微信分享后从微信返回APP时黑屏 apk能成功调起微信并进行分享操作,但分享完成后点击回到应用后应用出现黑屏的情况,并在约3-5秒后自动重启。 阅读详情

参考地址:http://hi.baidu.com/neverend06/blog/item/86ab838aa60dfc6c9f2fb4fe.html

HTMLParser遍历了网页的内容以后,以树(森林)结构保存了结果。HTMLParser访问结果内容的方法有两种。使用Filter和使用Visitor。
(一)Filter类
顾名思义,Filter就是对于结果进行过滤,取得需要的内容。HTMLParser在org.htmlparser.filters包之内一共定义了16个不同的Filter,也可以分为几类。
判断类Filter:
TagNameFilter
HasAttributeFilter
HasChildFilter
HasParentFilter
HasSiblingFilter
IsEqualFilter
逻辑运算Filter:
AndFilter
NotFilter
OrFilter
XorFilter
其他Filter:
NodeClassFilter
StringFilter
LinkStringFilter
LinkRegexFilter
RegexFilter
CssSelectorNodeFilter
所有的Filter类都实现了org.htmlparser.NodeFilter接口。这个接口只有一个主要函数:
boolean accept (Node node);
各个子类分别实现这个函数,用于判断输入的Node是否符合这个Filter的过滤条件,如果符合,返回true,否则返回false。
(二)判断类FilterHTMLParser使用入门(2)- Node内容
1:filter应用,TagNameFilter :
package html;

import java.net.HttpURLConnection;
import java.net.URL;
 
import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.HasChildFilter;
import org.htmlparser.filters.LinkStringFilter;
import org.htmlparser.filters.NodeClassFilter;
import org.htmlparser.filters.StringFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.nodes.RemarkNode;
import org.htmlparser.util.NodeList;

public class TestHtmlparser {
 //利用 Htmlparser 解析页面内容 用于过滤 页面敏感词  ,应用的时候先把客户端的url取到
 public static void testTextExtractingVisitor(String url, String str) {
  try {
   URL l_url = new java.net.URL(url);
   //建立连接
   HttpURLConnection l_connection =(HttpURLConnection) l_url.openConnection();
   //通过指定URLConnection对象创建Parser对象
   Parser parser = new Parser(l_connection);
   //StringFilter:查找字符串
//   NodeFilter filter = new StringFilter(str);  //把敏感词放入filter
   //TagNameFilter  用于查看 标签
//   NodeFilter filter = new TagNameFilter ("DIV");
   //查找看有 该标签的 父标签
//   NodeFilter innerFilter = new TagNameFilter ("DIV");
//   NodeFilter filter = new HasChildFilter(innerFilter, true);
   //NodeClassFilter用法
//   NodeFilter filter = new NodeClassFilter(RemarkNode.class);
   //LinkStringFilter用法
    NodeFilter filter = new LinkStringFilter("www.hao123.com/");
   //筛选出所有包含 敏感词  字符串的所有文本节点
   NodeList nodes = parser.extractAllNodesThatMatch(filter);
   if (nodes.size()>0) {
    for (int i = 0; i < nodes.size(); i++) {
     Node textnode = (Node) nodes.elementAt(i);
     System.out.println("搜索结果="+ textnode.getText());
    }
   }
   else System.out.println("没有找到结果");
  } catch (Exception ex) {
   ex.printStackTrace();
  }
 }
 public static void main(String[] args) {
  testTextExtractingVisitor("http://www.hao123.com/", "123");
 }
}

2.2 HasChildFilter,例子见上面中的:
注意HasChildFilter还有一个构造函数:
public HasChildFilter (NodeFilter filter, boolean recursive)
如果recursive是false,则只对第一级子节点进行过滤。默认不写的时候是false
搜索结果=body
搜索结果=div id="diva"
搜索结果=div id="diva1"
如果recursive是true
搜索结果=html
搜索结果=body
搜索结果=div id="diva"
搜索结果=div id="diva1"
输出结果中多了一个html,这个是整个HTML页面的节点(根节点),虽然这个节点下直接没有DIV节点,但是它的子节点body下面有DIV节点,所以它也被匹配上了

2.3 HasAttributeFilter
HasAttributeFilter有3个构造函数:
public HasAttributeFilter ();
public HasAttributeFilter (String attribute);
public HasAttributeFilter (String attribute, String value);
调用方法1:
NodeFilter filter = new HasAttributeFilter();
NodeList nodes = parser.extractAllNodesThatMatch(filter);
输出结果:
什么也没有输出。

调用方法2:
NodeFilter filter = new HasAttributeFilter( "id" );
NodeList nodes = parser.extractAllNodesThatMatch(filter);
输出结果:
getText:div id="top_main"
=================================================
getText:div id="logoindex"
=================================================

调用方法3:
NodeFilter filter = new HasAttributeFilter( "id", "logoindex" );
NodeList nodes = parser.extractAllNodesThatMatch(filter);
输出结果:
getText:div id="logoindex"

(三)其他Filter:
 3.1 NodeFilter filter = new NodeClassFilter(RemarkNode.class);
   NodeList nodes = parser.extractAllNodesThatMatch(filter);
输出:搜索结果=
 <link rel="stylesheet" type="text/css" href="styles.css">
3.2 StringFilter
这个Filter用于过滤显示字符串中包含制定内容的Tag。注意是可显示的字符串,不可显示的字符串中的内容(例如注释,链接等等)不会被显示。
3.3 LinkStringFilter
这个Filter用于判断链接中是否包含某个特定的字符串,可以用来过滤出指向某个特定网站的链接。
测试代码:
  NodeFilter filter = new LinkStringFilter("www.hao123.com/");
  //筛选出所有包含 敏感词  字符串的所有文本节点
  NodeList nodes = parser.extractAllNodesThatMatch(filter);
输出结果:
搜索结果=a href="http://www.hao123.com/redian/tongzhi.htm"
搜索结果=a href=http://www.hao123.com/haoserver/wn.htm

(四)逻辑运算Filter:
HTMLParser支持对于简单类型的Filter进行组合,从而实现复杂的条件。原理和一般编程语言的逻辑运算是一样的
4.1 AndFilter可以把两种Filter进行组合,只有同时满足条件的Node才会被过滤。
测试代码:
NodeFilter filterID = new HasAttributeFilter( "id" );
NodeFilter filterChild = new HasChildFilter(filterA);
NodeFilter filter = new AndFilter(filterID, filterChild);
输出结果:
getText:div id="logoindex"
=================================================

4.2 OrFilter
把前面的AndFilter换成OrFilter
测试代码:
NodeFilter filterID = new HasAttributeFilter( "id" );
NodeFilter filterChild = new HasChildFilter(filterA);
NodeFilter filter = new OrFilter(filterID, filterChild);
输出结果:
getText:div id="top_main"
=================================================
getText:div id="logoindex"
=================================================

4.3 NotFilter
把前面的AndFilter换成NotFilter
测试代码:
NodeFilter filterID = new HasAttributeFilter( "id" );
NodeFilter filterChild = new HasChildFilter(filterA);
NodeFilter filter = new NotFilter(new OrFilter(filterID, filterChild));
4.4 XorFilter
把前面的AndFilter换成XorFilter
测试代码:
NodeFilter filterID = new HasAttributeFilter( "id" );
NodeFilter filterChild = new HasChildFilter(filterA);
NodeFilter filter = new XorFilter(filterID, filterChild);
输出结果:
getText:div id="top_main"

基于eNSP的小型企业网络设计 在本次计算机网络课程设计中,围绕“小型企业网络搭建”这一主题,成功构建了一个高效、安全且易于管理的企业内部网络。通过本次课程设计,我们不仅掌握了小型企业网络搭建的关键技术和最佳实践,还培养了团队协作和问题解决的能力。本项目所构建的网络系统不仅满足了当前的业务需求,还具备良好的可扩展性和灵活性,为企业未来的数字化转型奠定了坚实的基础。 阅读详情

相关推荐

Windows环境下DataEase一站式安装指南(含WSL2+Docker配置)

本文详细介绍了在Windows环境下通过WSL2和Docker快速部署DataEase的完整教程。从WSL2配置、Docker环境搭建到DataEase离线安装,逐步指导用户完成一站式部署,特别适合需要快速搭建数据分析平台的开发者。教程包含常见问题解决方案和性能优化技巧,帮助用户高效使用这款国产开源数据可视化工具。

weixin_42526166的博客 392

TP5框架 《防sql注入、防xss攻击》

如题:tp5怎么防sql注入 xss跨站脚本攻击呢? 其实很简单,TP框架中有自带的,在 application/config.php 中有个配置选项: 框架默认没有设置任何过滤规则,你可以是配置文件中设置全局的过滤规则: // 默认全局过滤方法 用逗号分隔多个 'default_filter' =&gt; 'htmlspecialchars,addslashes,strip_tags'...

涛々的技术博客 1万+

IEEE Transactions on Industrial Informatics(TII) 投稿须知- Initial Submission

请注意,您可以在作者中心查看稿件的当前状态,如:在EIC办公室、分配给AE、AE邀请审稿人、AE指定审稿人、正在审稿、等待AE决定、等待EIC决定。为了确保公正的评审过程,我们要求在稿件中没有任何作者的身份(不包括作者的姓名、传记、隶属关系、求职信、签署的版权表格、识别脚注、致谢等)。如果你的手稿有很大一部分已经在会议上发表过,论文必须隐藏所有作者的身份,这样会议论文就可以被引用,就好像它是由不同的作者写的一样。请注意,通常你的技术成就是根据被引用的次数来评估的,而不是根据发表的论文数量。

loinleeai的博客 4424

HtmlParser初探--使用Nodefilter和Visitor进行网页分析

最近在做html页面转化成jsf页面的工作,尝试过使用正则表达式、dom4j等方法,都没有取得很好的结果。(html--&gt;jsf会另写一篇文章进行讨论)现在在使用htmlparser对html进行解析,对于html页面的解析htmlparser是一个功能比较强大的工具(相关下载:http://sourceforge.net/projects/htmlparser/)。以下是经常使用的对页面解...

248

【已解决】如何在服务器中下载huggingface模型,解决huggingface无法连接

在服务器上使用huggingface模型时,如果直接指定模型名称,用AutoTokenizer.from_pretrained(“model_name”),可能会由于网络原因会报错 Failed to connect to huggingface.co port 443 after 75018 ms: Operation time out因此我们需要下载模型到服务器上,得到模型本地的路径model_dir,再通过AutoTokenizer.from_pretrained(model_dir)方式来使用。

a61022706的博客 4万+

Mmdetection用自己的数据集训练Mask_RCNN

将自己数据的标签写入配置文件,在data前一行添加自己的标签列表,同时在train,val,test中添加classes = classes,如果不添加,模型就会默认读取coco原始数据集的80个标签,与自己的数据集对应不上就会报错。2.打开第二个文件coco_instance.py,将data_root路径改为你自己coco数据集的位置(注意一定要以/结尾),修改输出图片尺寸(根据自己的数据集决定)3.将标注完的数据转为Mask_rcnn训练所需的数据集格式。4.将数据集放到训练代码文件夹中。

m0_64298393的博客 3472

php 过滤变量,thinkphp6 输入变量过滤

thinkphp6 输入变量过滤官方文档地址:变量过滤框架默认没有设置任何全局过滤规则,你可以在app\Request对象中设置filter全局过滤属性:namespace app;class Request extends \think\Request{protected $filter = ['htmlspecialchars'];}也支持使用Request对象进行全局变量的获取过滤,过滤方式...

weixin_36372623的博客 2295

Windows 11“此应用已被管理员阻止运行”解决方案

通过本文介绍的两种方法,你应该能够解决Windows 11中“此应用已被管理员阻止运行”的问题。无论你选择创建新管理员账户还是禁用管理员批准模式,都请确保了解相关操作的风险,并根据你的实际需求做出选择。通过禁用“用户账户控制:以管理员批准模式运行所有管理员”设置,可以解决因系统安全设置导致的应用程序被阻止运行的问题。这种方法适用于那些希望简化管理员账户操作流程的用户,但需要注意可能带来的安全风险。通过创建并登录具有管理员权限的新账户,可以解决因系统安全设置导致的应用程序被阻止运行的问题。

mmoo_python的博客 1万+

HTMLParser使用详解(3)- 通过Filter访问内容

HTMLParser遍历了网页的内容以后,以树(森林)结构保存了结果。HTMLParser访问结果内容的方法有两种。使用Filter和使用Visitor。(一)Filter类顾名思义,Filter就是对于结果进行过滤,取得需要的内容。HTMLParser在org.htmlparser.filters包之内一共定义了16个不同的Filter,也可以分为几类。判断类Filter:TagNameFilt...

Allen.CD.China 269

IEEE S&P 2026 大模型安全论文整理

本文梳理了 IEEE S&P 2026(第47届 IEEE 安全与隐私研讨会)中与 LLM Safety 相关的论文,涵盖大模型越狱攻击、防御与对齐、隐私保护、RAG 安全、多模态大模型安全、智能体安全、图-LLM 安全、工具链安全及生成式 AI 安全与隐私等方向。

CSPhD-winston的博客 1330

R语言Dunnett’s检验实战:寻找差异组之间的效果

总结起来,本文以R语言为工具,演示了如何使用Dunnett’s检验来找出单因素方差分析中不同组之间的效果差异。在本篇文章中,我们将通过R语言实战演示如何使用Dunnett’s检验来寻找不同组之间的效果差异。在分析结果时,通常我们会关注具有显著差异的组别,并基于Dunnett’s检验结果进行进一步的解释和讨论。首先,我们需要准备一组数据,假设我们有一个实验,涉及到四个不同的处理组和一个对照组。当我们发现方差分析结果显示存在显著差异时,我们可以进一步进行Dunnett’s检验来确定具体哪些组之间存在差异。

CoderExtra的博客 1104

HtmlParser filter

import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.filters.NodeClassFilter; import org.htmlparser.tags.LinkTag; import org.htmlparser.util.NodeList; public class

longyuan20102011的专栏 512

ESP32-C3入门教程 蓝牙篇①——基于Blufi 的 WiFi 智能配网

文章目录一、前言二、WiFi配网方式三、快速运行四、运行效果五、ESP32-C3程序流程5.1 主程序5.2 回调函数5.3 SmartConfig线程5.4 流程图六、关键函数6.1 设置SmartConfig的协议类型6.2 启动SmartConfig6.3 停止SmartConfig七、其他八、参考 一、前言 本文基于VS Code IDE进行编程、编译、下载、运行等操作 基础知识点请查阅:ESP32-C3入门教程 基础篇①——基于VS Code构建Hello World 二、WiFi配网方式 W

7763

Java解析HTML之HTMLParser使用与详解

1、相关资料 官方文档:http://htmlparser.sourceforge.NET/samples.html API:http://htmlparser.sourceforge.net/javadoc/index.html 其它HTML 解释器:jsoup等。由于HtmlParser自2006年以后就再没更新,目前很多人推荐使用jsoup代替它。 2、使

jediael_lu的专栏 9900

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

HTMLParser使用详解(3)- 通过Filter访问内容【转】

项目用到 转来存着 谢谢 HTMLParser遍历了网页的内容以后,以树(森林)结构保存了结果。HTMLParser访问结果内容的方法有两种。使用Filter和使用Visitor。 (一)Filter类 顾名思义,Filter就是对于结果进行过滤,取得需要的内容。HTMLParser在org.htmlparser.filters包之内一共定义了16个不同的Filter,也可以分为几类。 ...

hujunpengatsingapore的博客 111

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

java htmlparser 使用教程_htmlparser使用指南

1.*采用Visitor方式访问Html2.3.try{4.Parserparser=newParser();5.parser.setURL(”http://www.google.com”);6.parser.setEncoding(parser.getEncoding());7.NodeVisitorvisitor=newNodeVisitor(){...

weixin_32090653的博客 377

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

HTMLParser 过滤Filter

HTMLParser遍历了网页的内容以后,以树(森林)结构保存了结果。HTMLParser访问结果内容的方法有两种。使用Filter和使用Visitor。(一)Filter类顾名思义,Filter就是对于结果进行过滤,取 得需要的内容。HTMLParser在o

nikerlover的专栏 550

HTMLParser的两种使用

因为论文的关系,要用到HTMLParser这个项目(使用的HTMLParser版本是1.6)一,数据组织分析:HtmlParser主要靠Node、AbstractNode和Tag来表达Html,因为Remark和Text相对简单,此处就将其忽略了。 Node是形成树结构表示HTML的基础,所有的数据表示都是接口Node的实现,Node定义了与页面树结构所表达的页面Page对象

Eric的JAVA之路 6929

HtmlParser用法

htmlparser中有两种访问节点的方式 1、filter。通过filter,能够过滤出我们关心的节点。从而对节点进行进一步的访问。 2、vistor。vistor和filter不同。vistor是遍历内容树的每一个节点,对于符合条件的节点做相应的处理。 先看一下下面的html代码:                     id="treeDemo_1_switch">

imzoer的专栏 4098

java htmlparser 使用教程_HtmlParser基础教程

1、相关资料官方文档:http://htmlparser.sourceforge.net/samples.htmlAPI:http://htmlparser.sourceforge.net/javadoc/index.html其它HTML 解释器:jsoup等。由于HtmlParser自2006年以后就再没更新,目前很多人推荐使用jsoup代替它。2、使用HtmlPaser的关键步骤(1)通过Pa...

weixin_31969181的博客 566

HTMLParser - 通过Filter访问内容

HTMLParser遍历了网页的内容以后,以树(森林)结构保存了结果。HTMLParser访问结果内容的方法有两种。使用Filter和使用Visitor。 (一)Filter类 顾名思义,Filter就是对于结果进行过滤,取得需要的内容。HTMLParser在org.htmlparser.filters包之内一共定义了16个不同的Filter,也可以分为几类。 判断类Filter: T

u014490157的专栏 542

HTMLParser的两种使用方法

因为论文的关系,要用到HTMLParser这个项目(使用的HTMLParser版本是1.6)一,数据组织分析:HtmlParser主要靠Node、AbstractNode和Tag来表达Html,因为Remark和Text相对简单,此处就将其忽略了。Node是形成树结构表示HTML的基础,所有的数据表示都是接口Node的实现,Node定义了与页面树结构所表达的页面Page对象,定义了获取父、子、兄弟

Three Lovers 2284

HTMLParser使用详解(3)

HTMLParser遍历了网页的内容以后,以树(森林)结构保存了结果。HTMLParser访问结果内容的方法有两种。使用Filter和使用Visitor。(一)Filter类顾名思义,Filter就是对于结果进行过滤,取得需要的内容。HTMLParser在org.htmlparser.filters包之内一共定义了16个不同的Filter,也可以分为几类。判断类Filter:TagNameFilt

fengbolaisearch的专栏 1215
上一篇: htmlparser详解
下一篇: HTMLParser的visitor访问方式详解
技术宝哥
博客等级 码龄16年 331粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值