(Guangzhou Xinhua University,Guangzhou 510520,China)
web information extraction; information filtering; automatic storage
备注
引言
数据显示,从因特网在我国快速发展开始,我国网民平均以每年1.1个百分点在不断增长。据统计,目前约2.4亿人使用搜索功能查询所需信息,约4300万人使用搜索功能学习知识。但现在搜索引擎搜索出的相关信息在整个互联网网页总量中所占比例越来越小,而且大部分人不知如何才能有效地利用这些搜索引擎去查询自己想要的信息。如何从互联网海量信息中找到自己想要的信息已成为当代社会的一个研究热点。
1 网页信息抽取技术概述
1.1 网页信息抽取技术介绍信息抽取技术包含于网络信息内容挖掘,最开始是文本理解,使用自然语言进行网页信息的提取,后期过渡到使用包装器的方式完成相关操作。该技术的研究内容有多个方面,在此主要介绍结构化数据和信息集成两个方面的内容。
结构化数据的抽取遵循可视化交互定制网页的抽取规则,并且基于规则对网页内容进行自动解析抽取,具有可提供大量数据的调度、数据的更新等优势,使得用户可以更方便地获取数据,并且可以将获取到的数据存储进数据库,然后根据用户的需求情况将其呈现给用户。日常生活中常见的网页首页、淘宝页面信息、房产信息等都是结构化数据。
信息集成需要在网络畅通的情况下实现。它是以现代的信息集成理论和技术为基础,使用户在最少的时间内以最少的成本获取所需要的资源和服务。
但是信息集成存在一个缺陷。如果不同的网站具有相同的内容,如何将不同网站的相同信息进行存放呢?当下比较热门的观点是搜索引擎根据网页的文本内容将该作者的观点和当前文章的主题、主观和客观、情感态度等进行挖掘。最终目标是从网页中提取具有主观倾向的信息。
网络信息抽取中的文献大多是指结构化数据抽取。传统的网络数据抽取技术通常是为人工操作而编写的数据抽取程序。这个程序被人们称为包装器(wrapper)。从最近的发展方向来看,网页信息抽取相关工具越来越多,主关键字替代传统手工技术进行网页信息筛选成为趋势。
传统的常用网络信息抽取工具即开发包装器的特殊语言。用户可以使用这些特殊语言方便地编辑包装器。常用工具如Web OQL、米勒娃、FLORID、绝地武士等等。这些工具是基于HTML的HTML感知工具。依赖于HTML文档提取数据时的内在结构特征,这些工具会提供标注、词汇、词义、过滤等技术建立短语与句子之间的联系。这样可以掌握文本的提取规则。这些工具会首先把文档进行转换,转换后的标签树会自动或半自动进行数据提取。这些工具更适合于提取包含语法的页面。代表性的工具是RAPIER,SRV,WHISK。
本研究通过用户所输入的关键字,在众多互联网网页中查找包含该关键字的网站,提取出网站的链接信息,并将与关键字相关的网页题目、关键字、超链接自动放入到数据库中,帮助用户提取有效的数据和过滤垃圾信息。
1.2网页信息抽取技术现状分析与其他西方语言相比,汉语的语法、语句的书写形式、书写习惯具有独特的特点。这些汉语特点造就了中文信息复杂的语义、困难的句法分析。这就使得中文信息的提取相对艰难。综合来看,网络信息抽取技术大部分都是使用结构化的数据抽取。网络结构化数据抽取技术的实现步骤如下:
(1)确立文本目标,也就是用户所感兴趣的网站地址。
(2)根据HTML的文本结构,获取该文本内容特征,进行TAP内容采集的数据连接。
(3)利用该方法将从页面抽取到的内容放在本地数据库服务器中。
目前,在市场上存在许多网页信息提取的工具。它们主要是将非结构化的数据存储在结构化的数据库之中。这些工具的开发者会在这些工具系统中写好一些固定的标准。这样,当这些系统在执行任务的时候会按照固定的标准去查找对用户有用的信息,避免出现一些意外。
网页信息抽取技术最终是以开发适合各位用户使用的信息提取工具为目的,无论是静态页面还是动态页面,该工具都可进行工作,获取到符合用户心意、用户感兴趣的数据。就当前科学的发展情况而言,网页采集技术将会在各种科学研究领域占有一席之地,例如:军事、医学、经济等。需要注意的是:信息抽取技术与信息检索存在着不同之处。表1为二者不同之处的详细对比。
虽然在处理技术与实现功能上存在差异性,但信息抽取与信息检索是互补的。在海量文本的处理过程中,前者通常以后者的输出为输入;反之,前者又可以用来提高后者的性能。
-
2 网页信息抽取算法的关键技术
2.1数据库设计数据库存放着用户需要使用的所有的数据。这些数据包含电脑存储器的文件集合、电脑软硬件的内存数据的集合等。用户工作时可以使用本地的数据库,也可以远程连接其他用户的数据库。本设计采用开源关系型数据库MYSQL,其功能划分为以下三个层面:
(1)第一层是授权认证、登录连接、安全等。这些都是C2S体系结构的公有部分。
(2)第二层是MySQL的核心存储功能。存储过程、触发器、视图、表等这些都是数据库的存储引擎功能。另外还有查询解析、缓存等一些其他的核心功能。
(3)第三层是存储引擎。这一层是数据库的核心部分,十分重要。它主要负责MySQL中数据的存储和提取。这也是MySQL数据库与其他数据库不同的一个地方。
在本研究中,我们根据需求设计了一个数据表:信息采集表(information),用来存放采集站点的相关信息,涉及编号 (id)、采集标题(title)、采集来源URL 地址(url)、采集时间(time)。其中编号 (id)为该表的主键。
2.2项目开发技术本研究算法主要使用了Springboot技术、SpringMVC技术、Mybatis技术和Maven技术。
(1)Springboot技术
Spring Boot,其作用主要是用来简化Spring开发框架的开发、配置、调试、部署工作,同时也在项目内集成了大量易于使用且实用的基础框架。Springboot是在原来的spring基础上进行了优化,其框架整体比之spring更为方便,操作简单,以前那些复杂的代码也简化很多,而且版本号的问题,Springboot也可以解决。
(2)SpringMVC技术
Spring MVC框架作为Spring Frame Work 的后续产品,是一个较为典型的MVC框架,通过实现视图—模型—控制器的模式来更好地将业务、展现与数据进行分离。在这方面, SpringMVC 与Struts、Struts2非常类似。Spring MVC 的设计围绕Dispatcher Servlet 展开。MVC的Web项目的核心部分为三层架构:C(控制器)V(视图、客户端)和M(包除了MVC数据JavaBean:封装数据)分开构成了MVC。
(3)Mybatis技术
MyBatis框架集合多种操作型关系数据的概念和方法,是一个强大的数据访问工具和解决方法,主要包含DAO组件与SQL Map组件两大类。前者主要用来抽象化应用程序的数据访问层和持久层的表示方式和位置,使它远离应用程序的业务逻辑,以此来帮助开发人员进行基于DAO设计模式设计和开发J2EE应用程序;后者是MyBatisDatabase Layer框架的重要组成部分,能够利用相关工具将多类信息映射成SQL语句,通过语句的执行获得对象。MyBatisSQLMap能够大批量减少访问数据库的代码,同时提供了一个简洁的框架。
(4)Maven技术
Maven技术对整个项目来说,担任着管理员的工作。DependencyManagement元素是Maven 技术提供给用户的一种方便统一依赖版本号的一种方式。该元素通常是放在pom.xml文件的顶层父类中。在该文件中,如果使用dependencyManagement元素,在引用的依赖之中无须再添加版本号,因为其会为用户自动引入父类的版本号。也就是说,如果子项目没有列入版本号,maven会很聪明地去寻找父层,沿着父层走,去寻找dependencyManagement元素,然后他就会使用父类的版本号。这样就会把依赖版本号的问题解决掉,再修改时也十分方便,修改父类即可。
-
3 网页信息抽取算法的研究与实现
3.1系统平台及算法开发工具系统采用Springboot+SpringMVC+mybatis构架的web应用平台。该框架基于windows系统,使用IDEA进行JAVA代码编辑;采用开发工具是 IntelliJ IDEA7.0。
3.2算法的实现思路该网页信息抽取算法的用户角色均为普通用户,对于其感兴趣的内容均可通过该算法实现。在该算法的实现过程中,在页面上通过用户输入的关键字,后台算法会自动调用其拼接网址通过HttpUtil申请网络搜查;根据网页的大体结构,搜索出的关键字结果将会按照页、行进行排列;在算法中用户本人已设置让算法在每一页对每一个搜索结果的URL以及网页信息的获取进行了循环强调,然后再次使用循环强调将其放置数据库中,并将对应的网页内容下载下来,将数据返回给用户。
3.3 网页内容采集关于采集,用户可以理解为是有明确方向和确定目标的一次事物记录的活动。网络采集是实现将CTRL+C、CTRL+V程序化、系统化、自动化、智能化,然后用算法按照指定的规则定向从其他网站获取数据的一种方式。通用爬虫(general purpose web crawler)从一个或若干初始网页的URL开始, 获得初始网页上的URL;然后在抓取网页的过程中不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
本研究在网页内容的采集部分,借用了与网络爬虫相关的一个httputils包,通过这个包来进行请求网络。思路如下:
(1)自行设置一个可进行网站爬虫的网址,类似于百度、sougou、360。本文中设置的是360搜索引擎。
(2)将关键字Keyword与该网址进行拼接,通过httputils对这个新的网址进行网络请求。
(3)解析页面内容。
其具体过程如下:
首先使用HttpUtils.getInstance().get(URL)方法来对关键字进行搜索,获取该搜索结果页面;然后通过Jsoup.parse(result)解析页面内容。parse也是爬虫中常用的页面解析方法。将解析出来的内容放在document文件中,因为只有在document中才可以对整个页面的html的元素进行访问。根据整个网页的一个页面布局,因为搜索出的结果较多,所以网页需要进行分页,依次将每一页的搜索结果,也就是各个a标签进行整合,提取他们的url。将网页中搜索出的含有关键字的内容依次放入element节点中,利用Foreach将element节点中的内容依次放到pageinfo中,再调用crawlerMapper中的save方法将pageinfo存到数据库中。部分代码如下:
String result = HttpUtils.getInstance().get(url);
// log.info("返回的结果: {}", result);
Document document = Jsoup.parse(result);
Element element = document.selectFirst("ul. result");
PageInfo pageInfo = new PageInfo();
element.select("li.res-list").forEach(e->{
try{
Element ahref = e.selectFirst("h3.res-title").selectFirst("a");
String dbUrl = ahref.attr("href");
String title = ahref.text();
pageInfo.setTitle(title);
pageInfo.setKeyWord(keyWord);
pageInfo.setUrl(dbUrl);
pageInfo.setCreateTime(new Date());crawlerMapper.save(pageInfo);
}catch (Exception ex){}
采集流程图如图3所示:
3.4编码的转换对于不同的站点,其网页编码形式不一。比如有的采用GBK 编码,有的采用gb2312编码,还有的使用utf-8国际编码。这给采集造成了一定的难度。字符的编码不一样时,必须实现数据编码的转换。如果不转换,则在采集的时候会是乱码,即使采集存储了,也仍然是无用的乱码信息。
常见的java编码格式是ASCII ISO-8859-1、GB2312,GBK、UTF-8和UTF-16。相对而言, UTF-16编码的效率是最高的,字符的字节转换为字符串的操作也更简单、更好。它适用于使用本地磁盘和内存之间使字符和字节之间快速切换,但它不适合在网络上传输。网络传输容易损坏字节和字节流,一旦破坏将难以恢复。相对而言,UTF-8更适合网络传输。使用单字节的存储ASCII字符,一个字符不会影响它背后的损伤特征。UTF-8编码效率在GBK和UTF-16之间, UTF-8可以平衡编码效率和编码安全,是汉字编码的理想方式。
本研究使用format(CRAWLERURL, keyWord)方法将该关键字以CRAWLERURL格式保存在url中,类似于C语言中的print ("%s" ,"sss"),然后将其放入result结果集中。因为本文是基于JAVA的网页抽取技术研究,所以在一些格式转换或者网页内容获取中使用了一些爬虫的编码格式。本程序中一些格式的转换如下:
private final static String CRAWLERURL =
"https://www.so.com/s?ie=utf-
8fr=nonesrc=360sounewhomeq=%s";
3.5对采集内容的存储完成前述内容采集之后,需要将采集好的内容进行保存。在此介绍两种保存方式:保存在数据库或以html形式将搜索出来的结果网页的所有内容保存下来。
(1)数据库形式保存
利用数据库形式保存主要是在SpringMVC框架的mapper配置文件进行sql的插入语句编写。页面解析后的内容存放在document中,所以用户需要用节点element的形式将需要放入数据库的东西提取出来。因为网页很多,所以需要采用foreach来进行此环节。
(2)html形式保存
将搜索出的各个标题的网页以html形式保存下来,与数据库中的txtid进行对应,查找比较方便。首先,需要使用jdk的自动生成主键的功能,生成一系列16进制的128位的字符。这就是用户的txtid。因为使用这种方法生成的txtid标识符是唯一的,以防系统重复。创建一个父类的目录,在该目录下创建一个新的文件,使用writeStringToFile的方法将页面的内容依次写入指定文件。
-
4 算法结果与分析
4.1系统环境本研究主要采用的系统环境如下:
windows10为开发平台,采用tomcat为服务器来启动应用;在配置方面,需要用户自行配置jdk。如果没有jdk,需要去官方网站下载jdk,在电脑属性中进行变量配置。
4.2算法运行许多管理系统在测试时都使用了黑盒测试和白盒测试,但是本采集过程只是在IDEA中编写了一个单元测试Junit。因为代码较简便,所以也没有进行繁琐的测试程序,可以不同于传统的单元测试,直接建一个空的test类,在类中调用写的函数即可。在单元测试当中写了crawlerService. exec("搜索内容")的关键字为例,调用exec方法启动爬虫进行网络搜索。
单元测试的代码如下:
RunWith(SpringRunner.class)
SpringBootTest(classes = App.class)
public class AppTest {
Resource
private CrawlerService crawlerService;
Test
public void crawlerTest(){
crawlerService.exec("所有内容");
}}
4.3算法结果分析为确保该算法的无误性,将搜索框进行了改进,不再是利用单元测试进行搜寻,而是通过前端页面调用该算法。该算法的测试如下:在页面输入框中输入不同的关键字进行搜索,无论关键字字数多少,或者随便输入,算法均可实现找到其相关的网页内容,并将其保存在数据库当中,用户可以根据数据库中文件名去找相应网页内容的txt,因为txtid进行了加密,所以产生了乱码,但是唯一。
对于许多关于网页内容抽取的技术而言,每一个网页都有自己的结构,比如说:HTML的文档有<head></head>、<Bode></body>等组成部分,但是每个网页的页脚是类似的,都是备案信息等等之类的。如果提及页面的不同之处,那就是正文部分。每个网页显示的网页信息不一样,所以页脚的这些信息在这些算法中就会理解为是非正文内容。在本算法中,并不是单一去抽取某个静态页面的内容,它会在收集与该关键字相关的所有网页之后,再对所收集的网页进行信息抽取。
-
5 结束语
本研究采用了当前IT行业的基本JAVA编写,综合使用了SpringBoot、Maven、SpringMvc等技术,在整体架构方面写的比较简洁,完成了基本的功能实现,对各种静态或者动态的网页内容进行过滤并且采集。与其他当前现有的成型的网页抽取工具相比,本算法仍然存在一些功能上的欠缺。因为Java类似于操作系统,支持多线程,后续将会对多线程展开深入研究。在使用多线程后,算法的整体运行速度和性能将会让人更加满意。由于LINUX系统也是一个支持多线程的操作系统,后续也会尝试让fork子进程来实现多线程任务。
- [1] 葛萌,黄素萍,欧阳宏基. 基于Spring MVC框架的Java Web应用[J].计算机与现代化,2018,(08):97-101.
- [2] 聚慕课教育研发中心. .Java Web从入门到项目 ..实践. [M]. 北京:清华大学出版社,2019.
- [3]黄文毅. .Web轻量级框架Spring+Spring MVC+MyBatis ..整合开发实战[M]. 北京:清华大学出版社, ..2020.05.
- [4]王梓,夏凯. 基于SSM框架的水质监测数据管理系统研究[J].计算机时代, 2018,(07):25-27+31.
- [5]方美玉,郑小林,陈德人,华艺,施艳. 商品评论聚焦爬虫算法设计与实现[J].吉林大学学报(工学版),2012,42(S1):377-381.