导航:首页 > 编程语言 > javapage遍历

javapage遍历

发布时间:2023-03-30 02:44:06

❶ 谁教我用java遍历网页里面的所有超链接,把这些超链接链接到得网页下载下来。

有一个开源的裤:htmlparser足够你用的了!
1、 简介
htmlparser是一个纯的java写的html解析的库,它不依赖于其它的java库文件,主要用于改造或提取html。它提供了接口,支持线性和嵌套HTML文本。在实际的项目中只需要将htmlparser.jar 导入classpath中,就可以使用HTMLParser提供的API了。
2、 主要应用

HTML Parser项目主要可以用在以下两个方面:
1. 信息提取
· 文本信息抽取,例如对HTML进行有效信息搜索
· 链接提取,用于自动给页面的链接文本加上链接的标签
· 资源提取,例如对一些图片、声音的资源的处理
· 链接检查,用于检查HTML中的链接是否有效
· 页面内容的监控
2. 信息转换
· 链接重写,用于修改页面中的所有超链接
· 网页内容拷贝,用于将网页内容保存到本地
· 内容检验,可以用来过滤网页上一些令人不愉快的字词
· HTML信息清洗,把本来乱七八糟的HTML信息格式化
· 转成XML格式数据
3、 数据组织分析

HTML有3种类型的节点:RemarkNode:html中的注释,TagNode:标签节点,TextNode:文本节点。HTMLParser将读雹郑取的二进制数据流,进行编码转换、词法分析等操作,生成树形层次结构的Node节点集合。
HtmlParser主要靠Node和Tag来表达Html。

Node是形成树结构表示HTML的基础,所有的数据表示都是接口Node的实现,Node定义了与页面树结构所表达的页面Page对象,定义了获取父、子、兄弟节点的方法,定义了节点到对应html文本的方法,定义了该节点对应的起止位置,定义了过滤方法 ,定义了Visitor访问机制。AbstractNode是Node的一种具体的类实现,起到构成树形结构的作用,除了同具体Node相关的accetp方法,toString,toHtml,toPlainTextString方法以外,AbstractNode实现了大多基本的方 法,使得它的子类,不用理会具体的树操作。
Node分成三类:
§ RemarkNode:代表Html中的注释
§ TagNode:标签节点,是种类最多的节点类型,上述Tag的具体节点类都是TagNode的实现。
§ TextNode:文本节点
Tag是具体分析的主要内容。Tag分成composite的Tag和不能包含其他Tag的简单Tag两类,其中前者的基类是CompositeTag,其子类包含BodyTag,Div,FrameSetTag,OptionTag,等27个子类 ;而简单Tag有BaseHrefTag、DoctypeTag,FrameTag,ImageTag,InputTag,jspTag,MetaTag,ProcessingInstructionTag这八类。

4、Visitor方式访问Html:
(1)、整体解析过程
§ 用一个URL或页面String做一个Parser
§ 用这个Parser做一个Visitor
§ 使用Parser.visitAllNodeWith(Visitor)来遍历节点
§ 获取Visitor遍历后得到的数据
(2)、系统Visitor功能简介:
§ ObjectFindingVisitor:用来找出所有指定类型的节点,采用getTags()来获取结果。
§ StringBean:用来从一个指定的URL获取移除了<SCRIPT></SCRIPT>和<PRE></PRE>之间代码的Html代码,也可以用做Visitor,用来移除这两种标签内部的代码,采用StringBean.getStrings()来获取结果。
§ HtmlPage:提粗肆蠢取Title,body中的节点和页面中的TableTag节点。
§ LinkFindingVisitor:找出节点中包含某个链接的总个数。
§ StringFindingVisitor:找出遍历的TextNode中含有指定字符串的个数。
§ TagFindingVisitor:找出指定Tag的所有节点,可以指定多种类型。
§ TextExtractingVisitor:从网页中把所有标签去掉来岩陪提取文本,这个提取文本的Visitor有时是很实用的 ,只是注意在提取文本时将标签的属性也去掉了,也就是说只剩下标签之间的文本,例如<a>中的链接也去掉了。
§ UrlModifyingVisitor:用来修改网页中的链接。
(3)、Filter
如果说visitor是遍历提取信息,当然这个信息可以包括某些节点或者从节点分析出来的更有效的信息,这都取决于我们的Visitor做成什么样子,那么Filter则目标很明确,就是用来提取节点的。
系统定义了17种具体的Filter,包括依据节点父子关系的Filter,连接Filter组合的Filter,依据网页内容匹配情况的filter,等等。我们也可以implement Filter来做自己的Filter来提取节点。
Filter的调用是同Visitor独立的,因为也无需先filter出一些NodeList,再用Visitor来访问。调用Filter的方法是:
NodeList nodeList = myParser.parse(someFilter);
解析之后,我们可以采用:
Node[] nodes = nodeList.toNodeArray();
来获取节点数组,也可以直接访问:
Node node = nodeList.elementAt(i)来获取Node。
另外,在Filter后得到NodeList以后,我们仍然可以使用NodeList的extractAllNodesThatMatch (someFilter)来进一步过滤,同时又可以用NodeList的isitAllNodesWith(someVisitor)来做进一步的访问。

这样,我们可以看到HtmlParser为我们提供了非常方便的Html解析方式,针对不同的应用可以采用visitor来遍历Html节点提取数据,也可以用Filter来过滤节点,提取出我们所关注的节点,再对节点进行处理。通过这样的组合,一定能够找出我们所需要的信息。

5、乱码问题
对于HTMLParser 工具包我们需要修改其中的htmlparser.java文件使其适用中文的html文件分析。htmlparser.java文件中具体实现细节就不再介绍。这里主要是把protected static final String DEFAULT_CHARSET = "ISO-8859-1";修改成protected static final String DEFAULT_CHARSET = "gb2312";因为采用默认的字符集"ISO-8859-1"对含有中文的html文件进行分析的时候就会出现乱码。必须进行new String(str.getBytes("ISO-8859-1"),"GB2312")的转换工作。对于修改好的htmlparser工具包,需要重新压缩成.jar文件,放到jdk的工作环境中。

6、自定义标签:
注意这个类PrototyicalNodeFactory,首先创建一个它的实例,然后注册你说自定义的Tag,再将这个工厂放置到你的parser中:
factory.registerTag(new IFrameTag());
parser.setNodeFactory(factory);
然后你再试试看,保证能够解析到你想要得那些标准htmlparser不支持的tag。

❷ Java 如何遍历数组里面的数据

二维数组好升定义:数据类明袜纯型[][] 数组名 = new 数据类型[二维数组行数][二维数组列数]

如:int[] array = new int[5][4];

二维数组的遍历:需要使用两个变量来分别遍历行和列,具体遍历方法就很多啦,可以使用while语句激咐、do-while语句、for语句,也可以相互结合使用。

如:

inti=0,j=0;
for(inti=0;i<array.length;i++){
for(intj=0;j<array[i].length;j++){
System.out.println(array[i][j]+"、");
}
System.out.println("");
}

❸ Java如何给LinkedList赋值并遍历

publicclasstest{
publicstaticvoidmain(String[]args){
LinkedList<Integer[][]>page=newLinkedList<Integer[][]>();
Integer[][]matrix1={{5,6,7},{8,9,10}};
Integer[][]matrix2={{1,2,3,5},{4,5,6,20},{9,2,1,19}};
page.add(matrix1);
page.add(matrix2);
for(Integer[][]x:page){//遍历page中的数组
//遍历page中的多维数组
for(inti=0;i<x.length;i++){//多维数组中x.length是行数
System.out.print("{");
for(intj=0;j<x[i].length;j++){//x[0]~x[n]的length是列数
System.out.print(x[i][j]);//输出i行j列
System.out.print(",");
}
System.out.println("}");
}
}

}
}

赋值用add,遍历用多重循环,遍历输出结果如下

❹ 如何用Java遍历一个网络目录下的所有文件

java中可以通过递归的方式获取指定路径下的所有文件并将其放入List集合中。 假设指定路径为path,目标集合为fileList,遍历指定路径下的所有文件,如果是目录文件则递归调用

❺ java中map的常用遍历方法有哪些

ava中map的常用遍历的具体方法有:

一 、在for-each循环中使用entries来遍历。这是最御蔽常见的并且在大多数情况下也是最镇睁州可取的遍历方式。在键值都需要时使用。

二、 在for-each循环中遍历keys或values。如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。

三、使用Iterator遍历。

四、通过键找值遍历(效率低)。

总结:如果仅需要键(keys)或值(values)使用方法二。如果你使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三。否则使用方法一(键值都要早伍)。

❻ 在java中,遍历是干嘛用的有什么意义

你说的比较笼统,遍历的话,可以遍历数组,遍历list,遍历链表,遍历图,树等等,遍历的意义就在于检查集镇斗锋合中的元素并做处理。至于什么顺序,那要根据需求喽。
例子,比较简单的是,遍历一个整型销纤数组,找出里面最大的数御晌。

❼ java Map 怎么遍历

关于java中遍历map具体有四种方式,请看下文详解。

1、这是最常见的并且在大多数情况下也是最可取的遍历方式,在键值都需要时使用。

Map<Integer, Integer> map = newHashMap<Integer, Integer>();

for(Map.Entry<Integer, Integer> entry : map.entrySet()) {

System.out.println("Key = "+ entry.getKey() + ", Value = "+ entry.getValue());

}

2、在for-each循环中遍历keys或values。

如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。

Map<Integer, Integer> map = newHashMap<Integer, Integer>();

for(Integer key : map.keySet()) {

System.out.println("Key = "+ key);

}

for(Integer value : map.values()) {

System.out.println("Value = "+ value);

}

该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净。

3、使用Iterator遍历

使用泛型:

Map<Integer, Integer> map = newHashMap<Integer, Integer>();

Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();

while(entries.hasNext()) {

Map.Entry<Integer, Integer> entry = entries.next();

System.out.println("Key = "+ entry.getKey() + ", Value = "+ entry.getValue());

}

不使用泛型:

Map map = newHashMap();

Iterator entries = map.entrySet().iterator();

while(entries.hasNext()) {

Map.Entry entry = (Map.Entry) entries.next();

Integer key = (Integer)entry.getKey();

Integer value = (Integer)entry.getValue();

System.out.println("Key = "+ key + ", Value = "+ value);

}

4、通过键找值遍历(效率低)

Map<Integer, Integer> map = newHashMap<Integer, Integer>();

for(Integer key : map.keySet()) {

Integer value = map.get(key);

System.out.println("Key = "+ key + ", Value = "+ value);

}

假设Map中的键值对为1=>11,2=>22,3=>33,现用方法1来遍历Map代码和调试结果如下:

(7)javapage遍历扩展阅读:

1、HashMap的重要参数

HashMap 的实例有两个参数影响其性能:初始容量 和加载因子。容量是哈希表中桶的数量,初始容量只是哈希表在创建时的容量。

加载因子 是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表进行 rehash 操作(即重建内部数据结构),从而哈希表将具有大约两倍的桶数。

在Java编程语言中,加载因子默认值为0.75,默认哈希表元为101。

2、HashMap的同步机制

注意,此实现不是同步的。 如果多个线程同时访问一个哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须保持外部同步。

(结构上的修改是指添加或删除一个或多个映射关系的任何操作;以防止对映射进行意外的非同步访问,如下:

Map m = Collections.synchronizedMap(new HashMap(...));

❽ java pager 怎么遍历

首先,自然是下载组件,并将pager-taglib.jar放入/web-inf/lib目录下。游竖颤
其次,引入标签库。
[java] view plain
<%@taglib uri="http://jsptags.com/tags/navigation/pager" prefix="pg" %>
再者,书写标签体。
[html] view plain
<table cellpadding="0" cellspacing="0">
<tr>
<th>ID</th>
<th>用户名</th>
<th>角色</th>
<th>姓名</th>
<th>性别</th>纤李
<th>年龄</th>
<th>电子邮箱</th>
<th>联系电话</th>
<th>状态</th>
</tr>
<c:forEach items="${requestScope.users}" var="item">
<tr>
<td>${item.userID}</td>
<td>${item.userName }</td>
<td>${item.roleName }</td>
<td>${item.name }</td>
<td>${item.gender }</td>
<td>${item.age }</td>
<td>${item.email }</td>
<td>${item.telephone }</td>
<td>${(item.state=="0")?"不在线":"在线" }</td>
</tr>
</c:forEach>
</table>
<!--
url:指点击页数后,程序将执行的方法。
items:指记录总数,该组件根本这个数计算出要分多少页。
maxPageItems:每页最多显示多少条数据。
maxIndexPages:最多显示多少页。例如:10,则首页12345678910下一页尾页
export:需要暴露的变量。一般默认即可。
<pg:param name="xxx">这神败个标签可以增加需要传入后台的参数
<pg:first>像first prev这些标签,和字面意思相同,即表示第一页前一页。
另,下面有一些常用的pager属性:
pageUrl:分页的链接,后面自动带有参数。
pageNumber:页号。
pager.offset:pageUrl后面带的参数,表示该页的第一个元素的索引。对数据库分页有用。
-->
<pg:pager url="/clinic/usermanage" items="${requestScope.total}" maxPageItems="10" maxIndexPages="10">
<pg:index>
<pg:first><a href="${pageUrl}">首页</a></pg:first>
<pg:prev><a href="${pageUrl}">上一页</a></pg:prev>
<pg:pages><a href="${pageUrl}">${pageNumber}</a></pg:pages>
<pg:next><a href="${pageUrl}">下一页</a></pg:next>
<pg:last><a href="${pageUrl}">尾页</a></pg:last>
</pg:index>
</pg:pager>

❾ java中怎么解决数据遍历

遍历就是将一个集合里面的元素一个一个的访问。
遍历是为链前了对棚敏清集合里面的元素进行操作,访问一个元素你就可拿掘以对这个元素进行一定的操作,比如说修改,打印等等
这个集合可以是数组、队列、表、树等

❿ java自动化测试怎么遍历页面中的表格

要看你用的是什么自动化工具了,我常用的是jsoup,htmlunit,selenium,这些工具都能遍历表格,通过jsoup元素选择器可以得到Elements对象,遍历它就可以。后面两个通过xpath选择器可以返回一个集合,遍历这个集合也可以

阅读全文

与javapage遍历相关的资料

热点内容
不要网看电影' 浏览:103
安卓文件夹播放 浏览:402
一部韩国电影讲的四对恋人有一对在电影院 浏览:812
微信语音消息怎么保存在哪里 浏览:462
分身qq的文件在哪里 浏览:65
禁止事件加载js 浏览:681
床边目击者台湾巴巴鱼 浏览:221
主角是个纯辅助的小说 浏览:808
韩国叔嫂大尺度电影 浏览:761
有暗电影是一个日本武士砍一个女的手脚 浏览:730
100部好看的泰国电影 浏览:168
大数据舆情分析架构 浏览:45
意大利丁巴度的电影在线观看 浏览:708
泰国版都市僵尸 浏览:437
现代豪门训诫文 浏览:191
国产匹配仪58版本 浏览:215
苹果笔记本换内存教程 浏览:658
炻维科技app密码忘了怎么办 浏览:760
韩国古代爱情动作电影 浏览:753

友情链接