书签 分享 收藏 举报 版权申诉 / 13

类型JAVA技术的网页内容智能抓取.docx

  • 文档编号:24369292
  • 上传时间:2023-05-26
  • 格式:DOCX
  • 页数:13
  • 大小:21.71KB

]]>

[CDATA[

.*?

:

(.*?

]]>

[CDATA[

]]>

[CDATA[

]]>

XML规则:

1.必须定义processer元素,至少包含一个process元素。

2.processer元素包含了所有的process元素,process元素则定义了页面代码的全部处理流程。

3.process元素包括3个属性,flow,table,field。

flow表示流程。

即经过这个process元素解析完的内容是作为下一个步骤的内容或者回退到未解析前的内容。

取值为true的时候本步骤处理结果作为下步骤处理的材料,本步骤结果不存入数据库。

取值为false的时候,本步骤结果只在本步骤使用。

下一个解析回退到本步骤解析之前的内容。

table属性定义了本步骤处理结果所要存放的数据库表,而fidld属性定义了所对应表中的字段。

4.每个process下必须包含一个处理流程。

目前处理流程有3种,tag-filter,regex-filter,flag-filter。

5.tag-filter指标签过滤,获得指定标签的内容。

tag-filter包括4个属性,pos,key,value,textonly。

pos指html标签的位置。

不指定的状况下默认为第一个。

key指所要获取的标签的属性,包括name,id,class等,当然其他的如width,href,target等属性也支持,支持所有标准html属性。

value指这个属性的值。

textonly指是否只获得这个标签内部的文本内容。

而不包含该标签。

6.regex-filter指正则过滤,获得符合正则表达式的内容。

注意,必须将正则表达式放在CDATA块内。

另外,必须将要获得的内容用()括起来,只有()内的内容才会被获取。

7.flag-filter指标志位过滤,获取2个标志位之间的内容。

用户必须自己保证开头跟结尾的标志位是唯一的。

这样才能保证精确获得想要的内容。

获取标志位需要用户查看源代码,并取得唯一的标志。

标志位过滤是目前主流的抓取工具提供的最常用的方法。

解析过程:

1.首先获得所有处理流程

2.按顺序执行流程。

判断流程process的类型flow属性,根据flow属性调用不同的处理方法。

为true的时候进行裁减,为false的时候进行解析保存。

3.根据flow属性进入正式的解析,判断解析元素filter的类型,是target-filter,或者是regex-filter或者是flag-filter,根据不同的解析类型调用不同的解析过程。

解析过程参考XML规则。

4.所有流程执行完后,系统将收集到的所有字段保存到数据库中。

案例

抓取javaeye博客内容

这个例子演示了如何抓取javaeye上博客的文章。

博客地址。

抓取之前,我们需要建立一个数据库跟表,只要将范例用的数据库表导入即可。

第一步:

目标定义

首先分析页面上的文章的链接的写法

HashMap和Hashtable及HashSet的区别

IE下ZOOM属性导致的渲染问题

Web2.0网站性能调优实践

通过这些链接的共同点我们可以很容易发现它的文章链接的规律,得出这样的正则表达式:

href\=\'(/blog/\d*)\'

注意,我们要获得的只是类似于/blog/179642这样的一个链接,而不包括href=的这样的东西,所以,我们将正则里面匹配/blog/179642的部分加上(),系统会自动获取这个()内的内容。

注意,()是必须有的。

完整的XML文件写法参考WEB-INF/example.xml。

第二步:

裁减

先去掉网页中多余的部分,我们裁减掉头部。

具体写法参考xml文件。

第三步:

处理

对一个网页进行处理之前我们需要详细的分析网页的结构,以这篇文章为例。

分析处理过程如下:

●我们想要的内容都在一个id为main的div里面。

我们先做一下裁减,将无关的内容裁减掉。

我们定义flow为true的处理过程,它将返回裁减后的内容。

●然后我们抓取页面头部的标题作为我们保存到数据库的标题,由于比较复杂,我们使用正则表达式来获得

[CDATA[

.*

<.*?

>(.*?

).*?

]]>

我们要获得的部分在只有文字,html标签是不要的。

所以,将匹配文字内容的部分我们放在()里面。

注意,()是必须的。

●接下来,获得它的关键字作为文章的tag,我们同样使用正则来完成。

[CDATA[

.*?

:

(.*?

]]>

●最后,我们获得文章的内容。

这里我们用一种更简单的方式,标志位方法。

我们发现文章的所有正文内容都在这2个字符串之间。

而这2个字符串又是唯一的,不会重复。

对于这样情况使用标志位方法是最好的也是最简单的。

记住:

如果想要抓取的内容在2个唯一性的字符串中间,那么使用标志位方法是最好最简单的方法。

[CDATA[

]]>

[CDATA[

]]>

第四步:

抓取

只要执行SystemCore并带上要执行的xml文件名作为参数,任务就会开始。

可以同时观察数据库跟控制台来观察抓取的进度。

配套讲稿:

如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

特殊限制:

部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

关 键  词:
JAVA 技术 网页 内容 智能 抓取
提示  冰豆网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:JAVA技术的网页内容智能抓取.docx
链接地址:https://www.bdocx.com/doc/24369292.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2008-2022 冰点文档网站版权所有

经营许可证编号:鄂ICP备2022015515号-1

收起
展开