自动采集网站数据与反自动采集网站数据方法的研究

2015-04-20 21:25陈国耀
科技创新与应用 2015年11期
关键词:研究

陈国耀

摘 要:网站安全问题一直都是网络安全领域的技术人员研究的重点问题之一,其不仅包含网站受非法攻击、入侵、服务器端代码被篡改、被注入木马等问题,而且包含被特定自动采集数据软件自动采集网站数据等问题。若自动采集网站数据软件长时间运行,必然对网站服务器造成巨大压力,甚至直接导致网站服务器的崩溃。文章基于windows平台下的JAVA编程语言如何实现自动采集网站数据以及如何反自动采集网站数据进行深入研究。

关键词:自动采集;网站数据;反自动采集;研究

1 研究背景及意义

现代社会是一个信息社会,工作、生活越来越离不开信息的支撑,信息技术和信息产业在经济、社会发展中的作用日益增强,并逐渐发挥着主导作用,成为比物质、能源更为重要的资源。数据已经成为一种商品进行交易,对数据进行再加工、提取、去噪、排序、整合后得出的数据往往具有非常高的商业价值,因为这些经过处理的数据能够更有效地指导商业决策,以使得公司、企业能够在竞争激烈的商业环境中处于不败之地。比如要获取某市年温度、降雨量等信息,则从该市气象局网站上获取的数据较为权威、可信;要获取某市的高新技术企业信息,则从该市负责注册高新技术企业的政府网站获取的数据较为准确;即准确的数据往往来自官方网站、权威性网站,而官方数据、权威数据的获取往往具有一定的困难或限制,比如只能按条进行顺序查询,不能进行批量查询,如果采用人工复制、采集的方式获取完整的、大批量的数据,时间、开销等各个方面均不允许,于是采用具有自动采集数据功能的软件采集网站数据往往成为人们获取官方、具有权威性、完整、大批量数据常用的手段。

目前比较流行的编程语言c++、c#、java、python等实现自动采集网站数据的原理类似,只是语法或所使用的组件不同,文章对基于windows平台下的java编程语言实现自动采集网站数据以及反自动采集网站数据的方法进行探讨。

2 自动采集网站数据的方法

通常由編程语言实现的自动采集网站数据均要通过模拟客户端向服务器发送请求的方式,获取服务器返回的数据,从中提取所需数据。

具体又分为两类:

(1)模拟客户端向网站服务器发送请求,直接获取服务器返回的html格式的数据,并对该数据进行解析从中提取所需数据。采用java语言实现的核心代码如下:

URL url = new URL(websiteAddress);

// websiteAddress为请求网址,为待查询数据的查询结果页面

URLConnection connection = url.openConnection();

//创建与网站服务器的连接

connection.setDoOutput(true);

connection.setDoInput(true);

OutputStreamWriter out = new

OutputStreamWriter(connection.getOutputStream(), "GBK");

//根据网站服务器端操作系统编码设置相应的请求参数编码

out.write(otherRequestParams);

//otherRequestParams为请求附带的参数

out.flush();

out.close();

//以下代码用于接收、读取服务器端返回的数据

InputStream l_urlStream=null;

l_urlStream = connection.getInputStream();

BufferedReader l_reader = new BufferedReader(new InputStreamReader(l_urlStream));

while ((sCurrentLine = l_reader.readLine()) != null) {

sTotalString += sCurrentLine;

}

然后采用Java提供的subString()函数或正则表达式对从服务器端获取的字符串组合进行解析,从中提取所需数据。

(2)当网站服务器端对返回值进行一定的加密设置,或者通过其它手段使得客户端获取的响应内容无效等,即通过正常的请求、响应机制获取不到服务器端后台返回的数据。而通过在客户端的浏览器中输入请求网址,能够正常获取服务器端响应的html文件;即网站服务器返回数据并将其装配成html文件返回到客户端,在客户端的浏览器中能够读取到该html文件,但是我们的后台应用程序却获取不到服务器端返回的数据。此时可采用JAVA提供的Robot类进行相应的操作以获取数据。

关于Robot类:此类用于为测试自动化、自运行演示程序和其他需要控制鼠标和键盘的应用程序生成本机系统输入事件。Robot的主要目的是便于JAVA平台实现自动测试。该类提供的模拟键盘、鼠标功能使得我们不仅能够利用其开发自动测试应用程序,而且能够开发其它无需手动控制、自动执行的“机器人”应用程序。采用java语言的Robot类实现的自动采集网站数据的核心代码如下:

//通过模拟键盘按键在地址栏中输入请求网址

Robot robot = new Robot();

robot.keyPress(KeyEvent.键值);

robot.keyRelease(KeyEvent.键值);

//通过复制、粘贴的方式获取从网站服务器端返回的html页面

robot.keyPress(KeyEvent.VK_CONTROL);

robot.keyPress(KeyEvent.VK_C);

robot.keyRelease(KeyEvent.VK_C);

robot.keyRelease(KeyEvent.VK_CONTROL);

//得到剪贴板中的内容

Transferable contents=sysc.getContents(this);

stringEachPageGet = (String) contents.getTransferData(DataFlavor.stringFlavor);

}

然后利用java语言的subString()函数或正则表达式对获取的字符串进行解析,从中提取所需信息。

3 反自动采集网站数据的方法

针对上述基于windows平台下的JAVA编程语言实现的自动采集网站数据的方法,我们可以采取以下方法进行应对,以防止网站数据被数据采集软件自动采集:

(1)定期或随机更改返回客户端浏览器html文件的格式。目前网站服务器与客户端间的通信基本上都是基于http协议,该协议是一个请求-响应式的协议,服务端返回的内容多为html文件。数据采集软件依据html文件内容的格式对从服务端返回的内容进行解析,随机改变返回html文件的格式就可以阻断解析的过程,从而阻断数据采集的过程。

(2)针对不同的浏览器,通过在服务器端返回的html页面中加入防复制、禁止保存网页等功能的JS代码,可以阻断自动采集网站数据软件的采集过程。

猜你喜欢
研究
FMS与YBT相关性的实证研究
2020年国内翻译研究述评
辽代千人邑研究述论
视错觉在平面设计中的应用与研究
关于辽朝“一国两制”研究的回顾与思考
EMA伺服控制系统研究
基于声、光、磁、触摸多功能控制的研究
新版C-NCAP侧面碰撞假人损伤研究
关于反倾销会计研究的思考
焊接膜层脱落的攻关研究