爬虫如何过滤网页内容? 这里需要用到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。
分享到:
相关推荐
它允许用户高效地抓取和处理互联网上的网页内容,这对于数据分析、网站维护、市场研究等多种用途都非常有价值。在这个主题下,我们将深入探讨网页爬虫的基本概念、工作原理以及`pclawer`工具的特点和使用方法。 ...
本项目是一个基于Java的网页爬虫1.5版本,主要关注聚焦爬虫的设计和实现,旨在高效地抽取特定主题的网页内容。 聚焦爬虫与通用爬虫不同,它的目标不是无差别地抓取整个互联网,而是针对某一特定领域或主题,如科技...
不同于一般的聚焦爬虫,过滤型爬虫更加注重内容的质量和相关性,通过链接过滤和内容过滤两种方式,确保抓取到的信息符合用户的特定需求。 #### 二、网络爬虫概述 网络爬虫是一种自动化的网页抓取程序,主要用于...
2. **下载网页**: 将网页内容下载到本地,同时解析HTML代码。 3. **链接提取**: 在HTML代码中找到所有链接,并将它们添加到待爬取队列。 4. **URL去重**: 避免重复爬取同一网页,确保效率。 5. **内容分析**: 根据...
网络爬虫,也被称为网页蜘蛛或自动索引器,是一种自动化程序,用于浏览互联网并抓取网页内容。在本程序中,重点在于实现爬虫抓取网页链接的功能,这是一个核心的网络爬虫任务,通常用于数据挖掘、搜索引擎索引、网站...
网页内容自动抓取工具,通常被称为网络爬虫或网页蜘蛛,是用于自动化地从互联网上收集信息的一种程序。网络爬虫对于数据挖掘、市场研究、搜索引擎优化等许多领域都有着广泛的应用。在这里,我们讨论的是一个名为"我...
这通常涉及到对网页内容的深入分析,识别与主题相关的部分,过滤掉不相关的信息。 2. **网页抽取**: 这一步骤是爬虫的核心功能。Java提供了许多库,如Jsoup,用于解析HTML文档并提取所需元素。爬虫首先会发送HTTP...
python爬虫抓取网页图片在Python中,你可以使用requests库来发送HTTP请求,以及BeautifulSoup或Scrapy库来解析网页内容。你也可以使用selenium库,它是一个自动化测试工具,用于模拟用户在浏览器中的操作。下面是一...
网页爬虫,也被称为网络爬虫或数据抓取器,是一种自动遍历互联网并抓取网页内容的程序。聚焦爬虫则是更为特定的一种爬虫,它不是无目的地爬取整个互联网,而是根据预设的规则或策略,有针对性地抓取与特定主题相关的...
请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则...
10. **自动化更新检测**:如描述中所提,好的爬虫工具能自动检测网页更新,这可能通过比较网页内容的哈希值、检查更新日期或监听RSS/Atom feed实现。 综上所述,"网页爬虫工具 最新 可用" 提供了一个高效自动化的...
这可能通过分析网页内容中的关键词、短语或者使用更复杂的自然语言处理技术,如词嵌入和深度学习模型,如BERT或GPT,来理解文本的语义含义。 URL去重是爬虫的基本功能,防止对同一个网页的多次访问,通常通过哈希表...
- 页面获取:从互联网上下载网页内容。 - 页面解析:从下载的页面中提取所需数据。 - 数据存储:将提取的数据存储在数据库或文件系统中。 - 反馈机制:对爬虫行为进行调整,以适应网站结构变化。 3. 爬虫设计的关键...
本软件是一款专为抓取网页内容设计的工具,其2.0.1版本,即netmap2.0.1,提供了高效且便捷的网页数据采集功能。 【描述】:“一个很好的爬虫软件,专门抓取网页,祝你好运!” 这表明该软件在设计上可能具有以下...
URL管理器负责跟踪要访问的网页列表,下载器获取网页内容,解析器则从下载的HTML或XML文档中提取有价值的数据,最后存储到数据库中。 2. **Python和Scrapy框架**:Python是爬虫开发的常用语言,其丰富的库支持使得...
在现代Web开发中,很多网站为了提供更丰富的用户体验,会采用异步加载(AJAX)技术来动态更新网页内容。这种做法虽然提高了用户体验,但也给传统的爬虫技术带来了挑战,因为传统的爬虫工具(如Requests和...
本案例分享将带你深入理解Python爬虫的基本原理,并通过实践操作,掌握如何利用requests模块抓取网页内容,同时探讨聚焦爬虫和反扒技术,如UA伪装的应用。 首先,Python中的requests模块是进行HTTP请求的常用工具,...
3. **链接提取**:爬虫解析网页内容,找到其中的超链接,并将它们添加到待爬取的链接队列中。 4. **内容处理**:抓取的网页内容会被分析、处理,提取出关键词、元数据等关键信息。 5. **索引建立**:处理后的信息被...
在这个例子中,用户输入网页地址和期望过滤的文件大小,爬虫将遍历网页上的所有图片链接,对符合条件的图片进行下载。 “比如下载贴吧某贴的所有图片”,这表明该爬虫脚本具有一定的目标定位能力,可能通过解析HTML...
对于已经下载到本地的网页内容,一方面将其存储到“下载页面库” 中,等 待建立索引等后续处理,另一方面将其URL放入“已抓取URL队列”,后者显 然是为了避免网页被重复抓取; 对于刚刚下载到本地的网页内容,...