网络爬虫设计学位学士论文.doc

上传人:西安人 文档编号:3966961 上传时间:2019-10-11 格式:DOC 页数:69 大小:1.21MB
返回 下载 相关 举报
网络爬虫设计学位学士论文.doc_第1页
第1页 / 共69页
网络爬虫设计学位学士论文.doc_第2页
第2页 / 共69页
网络爬虫设计学位学士论文.doc_第3页
第3页 / 共69页
网络爬虫设计学位学士论文.doc_第4页
第4页 / 共69页
网络爬虫设计学位学士论文.doc_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《网络爬虫设计学位学士论文.doc》由会员分享,可在线阅读,更多相关《网络爬虫设计学位学士论文.doc(69页珍藏版)》请在三一文库上搜索。

1、学士学位论文 I 摘要 目前即使通讯软件在平时的生活中有着十分广泛的应用,但是对绝大部分的软 件来说,都必须应用在互联网上,必须在一个 INTERNET 环境下才能使用。有时候单 位内部的员工,同学,在没有互联网环境下或因其他原因希望不用 INTERNET 就可以 进行信息交互,这样开发局域网通信就有了必要性。本文提出了局域网信息交互的需 求,并详细对网络协议 TCP/IP 协议族进行了介绍和研究,如 TCP,UDP,广播等相 关技术。并对网络信息交互原理惊醒了说明,在此基础上利用 SOCKET 网络编程实现 了一种基于 WINDOWS 平台的局域网信息交互功能。 网络爬虫是一种自动搜集互联网

2、信息的程序。通过网络爬虫不仅能够为搜索引擎采集 网络信息,而且可以作为定向信息采集器,定向采集某些网站下的特定信息,如招聘 信息,租房信息等。 本文通过 JAVA 实现了一个基于广度优先算法的多线程爬虫程序。为何要使用多 线程,以及如何实现多线程;系统实现过程中的数据存储;网页信息解析等。 通过实现这一爬虫程序,可以搜集某一站点的 URLs,并将搜集到的 URLs 存入数 据库。将解析的网页存入 XML 文档。 【关键词】 网络爬虫; SOCKET 编程;TCP/IP;网络编程 ;JAVA 学士学位论文 II Abstract Instant message software in our d

3、aily lives has a very wide range of application , However ,most of the software must be used in the Internet , and it must be used in a Internet environment .Sometimes Internal staff, students ,may not have the Internet environment or other reasons do not wish to be able to communicate on the Intern

4、et .This development will have a need for LAN communication program .Therefore ,this paper presents the needs of local area network exchange information Software ,And details of the network protocol TCP/IP protocol suite are introduced and research such as TCP, UDP, broadcast ,and other technologies

5、 . and network information exchange theory is discussed . Base on this condition I use of Socket Network programming based on Windows platform to develop a LAN chat application . SPIDER is a program which can auto collect informations from internet. SPIDER can collect data for search engines, also c

6、an be a Directional information collector, collects specifically informations from some web sites, such as HR informations, house rent informations. In this paper, use JAVA implements a breadth-first algorithm multi-thread SPDIER. This paper expatiates some major problems of SPIDER: why to use multi

7、-threading, and how to implement multi-thread; data structure; HTML code parse. etc. This SPIDER can collect URLs from one web site, and store URLs into database. 【KEY WORD】SPIDER; JAVA;;Socket programming; TCP/IP ; Network programming 沈阳理工大学学士学位论文 III 目录 1 绪论1 1.1 网络爬虫的发展1 1.2 国内外技术发展现状2 1.3 系统设计的意

8、义3 2 总体设计方案4 2.1 系统设计方案.4 2.2 系统设计框图4 2.3 网络爬虫的相关技术5 2.3.1 URL.5 2.3.2 HTTP 协议6 2.3.3 JAVA 多线程9 2.3.4 JAVA 网络编程16 3 系统软件设计21 3.1 系统软件概述21 3.2 ECLIPSE软件介绍 21 3.3 服务器端设计22 3.3.1 网本页解析部分.22 3.3.2 获取新的网络代理部分.36 3.4.1 登录部分.37 3.4.2 Table 模块37 3.4.2 上传档及查询部分.39 3.5 SOCKET通信部分.39 3.5.1 什么是 Socket.39 3.5.2

9、服务端部分.44 3.5.3 客户端部分.46 4 系统运行48 4.1 服务器端界面48 4.2 客户端界面 50 结论51 致 谢52 参考文献53 外文资料原文55 附录 B 汉语翻译62 附录 C 程序代码66 沈阳理工大学学士学位论文 1 1 绪论 1.1 网络爬虫的发展 在互联网发展的早期,网站数量相对较少,信息数据量不大,查找也比较容易。 然而伴随互联网井喷性的发展,普通网络用户想找到自己所需的数据简直如同在数据 的海洋里捞针,为满足大众信息检索需求的专业搜索网站便应运而生了。 所有搜索引擎的鼻祖,是 1990 年由 Montreal 的 McGill University 三名

10、学生(Alan Emtage、Peter Deutsch、Bill Wheelan)发明的 Archie(Archie FAQ) 。Alan Emtage 等 想到了开发一个可以用文件名查找文件的系统,于是便有了 Archie。Archie 是第一个 自动索引互联网上匿名 FTP 网站文件的程序,但它还不是真正的搜索引擎。Archie 是 一个可搜索的 FTP 文件名列表,用户必须输入精确的文件名搜索,然后 Archie 会告诉 用户哪一个 FTP 地址可以下载该文件。由于 Archie 深受欢迎,受其启发,Nevada System Computing Services 大学于 1993 年

11、开发了一个 Gopher(Gopher FAQ)搜索工具 Veronica(Veronica FAQ) 。Jug head 是后来另一个 Gopher 搜索工具。虽然当时万维网 还未出现,但网络中档传输还是相当频繁的,而且由于大量的档散布在各个分散的 FTP 主机中,查询起来非常不便,因此 Alan Archie 工作原理与现在的搜索引擎已经很 接近,它依靠脚本程序自动搜索网上的文件,然后对有关信息进行索引,供使用者以 一定的表达式查询。 当时, “机器人”一词在编程者中十分流行。计算机“机器人” (Computer Robot) 是指某个能以人类无法达到的速度不间断地执行某项任务的软件程序。

12、由于专门用于 检索信息的“机器人”程序象蜘蛛一样在网络间爬来爬去,因此, 搜索引擎的“机器 人”程序就被称为“蜘蛛”程序。 世界上第一个用于监测互联网发展规模的“机器人”程序是 Matthew Gray 开发的 World wide Web Wanderer。刚开始它只用来统计互联网上的服务器数量,后来则发展 为能够检索网站域名。与 Wanderer 相对应,Martin Kosher 于 1993 年 10 月创建了 ALIWEB,它是 Archie 的 HTTP 版本。ALIWEB 不使用“机器人”程序,而是靠网站 主动提交信息来建立 自己的链接索引,类似于现在我们熟知的 Yahoo。 随

13、着互联网的迅速发展,使得检索所有新出现的网页变得越来越困难,因此,在 Matthew Gray 的 Wanderer 基础上,一些编程者将传统的“蜘蛛”程序工作原理作了些 沈阳理工大学学士学位论文 2 改进。直到一些编程者提出了这样的设想,既然所有网页都可能有连向其它网站的链 接,那么从跟踪一个网站的链接开始,就有可能检索整个互联网。到 1993 年底,一些 基于此原理的搜索引擎开始纷纷涌现,但是早期的搜索引擎只是以搜索工具在数据库 中找到匹配信息的先后次序排列搜索结果,因此毫无信息关联度可言。而 RBSE 是第 一个在搜索结果排列中引入关键词串匹配程度概念的引擎。最早现代意义上的搜索引 擎出

14、现于 1994 年 7 月。当时 Michael Mauldin 将 John Leavitt 的蜘蛛程序接入到其索引 程序中,创建了大家现在熟知的 Lycos(2000 年被西班牙网络集团 Terra Lycos Network 收购) 。同年 4 月,斯坦福(Stanford)大学最为著名的两名博士生,美籍华人 杨致远(Gerry Yang)和 David Filo 共同创办了 Yahoo 公司,并成功地使搜索引擎的概 念深入人心。从此搜索引擎进入了高速发展时期。目前,互联网上有名有姓的搜索引 擎已达数百家,其检索的信息量也与从前不可同日而语。像国外的 Google,国内的百 度,这样的搜

15、索引擎巨擘由于掌握的大多数的入口流量,成为互联网世界的霸主,并 带来了巨大的商业价值。 1.2 国内外技术发展现状 因为搜索引擎的商业化应用带来了巨大的商业价值,所以作为搜索引擎的核心部 分的网络爬虫技术,也理所应当的成为了国内外研究的热点。对于网络爬虫的研究从 上世纪九十年代就开始了目前爬虫技术已经相当成熟。并催生了像 Baidu 和 Google 这 样的网络巨擘,而其它公司也纷纷推出了自己的搜索引擎。网络爬虫是搜索引擎的重 要组成部分。 现今,网络爬虫主要分为通用爬虫和聚焦爬虫两类。通用搜索引擎的目标是尽可 能大的网络覆盖率,通用搜索引擎大多提供基于关键词的检索。聚焦爬虫是一个自动 下载

16、网页的程序,它根据既定的抓取目标,有选择的访问万维网上的网页与相关的链 接,获取所需要的信息。与通用爬虫(general purpose web crawler)不同,聚焦爬虫并不 追求大的覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用 户查询准备数据资源。同时,支持根据语义信息提出的查询。 网络爬虫的发展趋势随着 AJAX/Web2.0 等技术的流行,如何抓取 AJAX 等动态页 面成了搜索引擎急需解决的问题,如果搜索引擎依旧采用“爬”的机制,是无法抓取 到 AJAX 页面的有效数据的。 沈阳理工大学学士学位论文 3 除此之外,网络爬虫还主要面对着一下的这些问题(摘自百度

17、百科5): 1、强制用 Cookies。部分站长为了让用户记住登陆信息,强迫用户使用 Cookies。 如果未开启,则无法进行访问,访问页面显示的也不会正常,这种方式会让蜘蛛无法 进行访问。 2、登陆要求。有些企业站和个人站的设置一定要注册登陆后才能看到相关的文章 内容,这种对蜘蛛不是很友好,蜘蛛不会注册、也不会登陆。 3、动态 URL。动态 URL 简单的说就是带有问号、等号及参数的网址就是动态 URL,动态 URL 不利于搜索引擎蜘蛛的爬行和抓取。 4、Flash。有的网站页面使用 Flash 视觉效果是很正常的,比如用 Flash 做的 Logo、广告、图表等,这些对搜索引擎抓取和收录是

18、没有问题的,很多网站的首页是 一个大的 Flash 档,这种就叫蜘蛛陷阱,在蜘蛛抓取时 HTML 代码中只是一个链接, 并没有文字。虽然大的 Flash 效果看上去很好,外观看着也很漂亮,但可惜搜索引擎看 不到,无法读取任何内容。 5、无休止的跳转。对搜索引擎来说只对 301 跳转相对来说比较友好,对其他形式 的跳转都是比较敏感,例如:JavaScript 跳转、Meta Refresh 跳转、Flash 跳转、302 跳 转。 1.3 系统设计的意义 本文通过 JAVA 语言实现一个基于广度优先偏历算法的多线程爬虫程序。通过实 现此爬虫程序可以定点搜集某一站点的 URLs,如果需要搜集其它信

19、息,可以在解析 URLs 的同时,解析获取相应信息 沈阳理工大学学士学位论文 4 2 总体设计方案 2.1系统设计方案 本设计主要是通过在 eclipse 软件环境中进行,设计过程中首先服务器端获得网页 URL,URL 的获得途径有从客户端获得的已经形成的 URL,和解析网站获得的更新的 URL 两种途径,然后根据 URL 连接该网页,获取网页源代码,获取网页源代码中需要 的网页内容,去除多余的标签,空格,最后形成 XML 文档,服务器端的还包含获得 IP 代理,因为反复解析同一个网站,网站的防火墙会让本地 IP 无法访问该网站,所以 我们需要用到 IP 代理循环访问网站解决这个问题,服务器端

20、还可以阅本地文件的模块, 方便文件阅读的客户端主要是过滤本地的文档与服务器端进行信息交互,传送需要解 析的 URL,获得已经解析的网页源代码所形成的 XML 文档。 2.2 系统设计框图 否 是 否 是 沈阳理工大学学士学位论文 5 从文档中读取一个 URL 用代理访问 URL 链 接所指的地址,打开 网络连接 获取网页源代码 去处网页标签,空 格等多余代码 根据提取的信息, 形成 XML 文档保 存在固定文件夹中 是否读到 URL 是否获完 整源代码 从文档中读取一个 URL 结束读取 URL 图 2.1.1 网页解析部分流程图 选定文件夹, 遍历该文件夹 将获得的文件 显示在第一个 Tab

21、le 中 选择对文件 的操作打开, 删除,添加 到上传列表 如果添加到上传 列表,单机右键, 选择操作,如开 始上传 图 2.1.2 客户端文件遍历流程图 图 2.1.3 服务器端与客户端通信流程图 2.3 网络爬虫的相关技术 2.3.1 URL 统一资源定位符(URL,英语 UniformResourceLocator 的缩写)也被称为网页地址,是 因特网上标准的资源的地址。它最初是由蒂姆伯纳斯李发明用来作为万维网的地 址的。现在它已经被万维网联盟编制为因特网标准 RFC1738 了。 在因特网的历史上,统一资源定位符的发明是一个非常基础的步骤。统一资源定位符 的语法是一般的,可扩展的,它使

22、用 ASCII 代码的一部分来表示因特网的地址。一般 客户端发出连接 请求 服务端开启服务 服务端接收客户 端请求,链接构 成 客户端发出请求, 上传或者下载文 档 文件开始传送 文件传送结束, 服务器处于监 听状态 客户端断开 Socket 链接 沈阳理工大学学士学位论文 6 统一资源定位符的开始标志着一个计算机网络所使用的网络协议。 统一资源定位符是统一资源标志符的一个下种。统一资源标志符确定一个资源, 而统一资源定位符不但确定一个资源,而且还表示出它在哪里。 URL 结构一般分为两个部分,一个是物理结构,一个是逻辑结构。在物理结构包括 扁平结构和树型结构。扁平结构就是网站中所有的页面都是

23、在根目录这一级别,形成 一个扁平的物理结构。这比较适合于小型的网站,因为如果太多文件都放在根目录下 的话,制作和维护起来比较麻烦。而树型结构的意义是在一级目录下分为多个频道或 者称之为目录,然后目录下面再放上属于这个频道的页面,首页、频道首页、频道下 的内容就好比树干、树枝、树叶的关系。逻辑结构就是由网页内部链接所形成的逻辑 的或链接的网络图。比较好的情况是逻辑结构与前面的树型物理结构相吻合。 统一资源定位符 URL 是对可以从因特网上得到的资源的位置和访问方法的一种 简洁的表示。URL 给资源的位置提供一种抽象的识别方法,并用这种方法给资源定位。 只要能够对资源定位,系统就可以对资源进行各种

24、操作,如存取、更新、替换和查找 其属性。URL 相当于一个文件名在网络范围的扩展。因此 URL 是与因特网相连的机 器上的任何可访问对象的一个指针。 URL 的一般形式是::/:/ 网络爬虫就是通过提取和分析出网页中的 URL 地址,对相应网络进行爬取。 2.3.2 HTTP 协议 超文本传输协议 (HTTP-Hypertext transfer protocol) 是一种详细规定了浏览器和万维网 服务器之间互相通信的规则,通过因特网传送万维网文文件的数据传送协议。 2.3.2.1 HTTP 协议简介 超文本传输协议 (HTTP-Hypertext transfer protocol) 是分布

25、式,协作式,超媒体系统应 用之间的通信协议。是万维网(world wide web)交换信息的基础。 HTTP 是 IETF(Internet Engineering Task Force)制定的国际化标准。在 HTTP 标准制 定和实现的过程中,W3C 积极参与了其中的工作,并发挥了重要作用。 它允许将超文本标记语言(HTML) 文档从 Web 服务器传送到 Web 浏览器。HTML 沈阳理工大学学士学位论文 7 是一种用于创建文文件的标记语言,这些文文件包含到相关信息的链接。您可以单击 一个链接来访问其它文文件、图像或多媒体对象,并获得关于链接项的附加信息。 HTTP 协议的主要特点可概括

26、如下: 1、 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用 的有 GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快。 2、灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由 Content-Type 加以 标记。 3、无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求, 并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 4、无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。 缺少状态意味着如果后续处

27、理需要前面的信息,则它必须重传,这样可能导致每次连 接传送的数据量增大。 另一方面,在服务器不需要先前信息时它的应答就较快。 2.3.2.2 HTTP 消息结构 Request 消息结构:消息结构: Response 消息结构: 2.3.2.3 请求方法 根据 HTTP 标准,HTTP 请求可以使用多种请求方法。 例如:HTTP1.1 目前支持 7 种请求方法: GET、POST、HEAD、OPTIONS、PUT、DELETE 和 TARCE。 GET 请求获取由 Request-URI 所标识的资源。 沈阳理工大学学士学位论文 8 POST 在 Request-URI 所标识的资源后附加新的

28、数据。 HEAD 请求获取由 Request-URI 所标识的资源的响应消息报头。 OPTIONS 请求查询服务器的性能,或查询与资源相关的选项和需求。 PUT 请求服务器存储一个资源,并用 Request-URI 作为其标识。 DELETE 请求服务器删除由 Request-URI 所标识的资源。 TRACE 请求服务器回送收到的请求信息,主要用语测试或诊断。 URI 完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目 录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使用 HTTP 的版本。 一个 URL 地址用于描述一个网络上的资源,而 HTTP 中的 GE

29、T, POST, PUT, DELETE 就对应着对这个资源的查,改,增,删 4 个操作。 其中最常见的就是 GET 和 POST 了。 GET 一般用于获取/查询资源信息;而 POST 一般用于更新资源信息。以下是二者的区 别: 1. GET 提交的数据会放在 URL 之后,以?分割 URL 和传输数据,参数之间以 i “; String HtmlEndSign = “; 得到标志后调用函数: strHtml = HtmlAnalyze.getTagText(strHtml, HtmlStarSign,HtmlEndSign); 从字符串的头开始检索与 HtmlStarSign 完全相符的字

30、符串: int iSPos = strHtml.indexOf(strStart, pos); 函数 public int indexOf(int ch, int fromIndex)从指定的索引开始搜索,返回在此字符串中 第一次出现指定字符处的索引。在此对象表示的字符序列中第一次出现的大于或等于 fromIndex 的字符的索引,如果未出现该字符,则返回 -1。返回的整形数标志了起始 沈阳理工大学学士学位论文 26 标志字符串的起始位置,在查找戒指标志时要从起始字符串的结束位置开始查找 iEPos = strHtml.indexOf(strEnd, iSPos + strStart.leng

31、th(); 得到字符串结尾标志的位置。 调用函数 public String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,一直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex- beginIndex。 调用函数: String strTemp = strHtml.substring(iSPos + strStart.length(), iEPos); 得到想要的包括页面主要信息的部分。此时得到的网页源代码包含很多网页标签空格,

32、 为了使提取信息详情更加简单,用自编的函数去除多余的网页卷标,网页卷标的格式 为尖括号内的值,如下网页源代码 : 360 导航_新一代安全上网导航 取出后的结果应为:360 导航_新一代安全上网导航。 调用函数:strHtml = HtmlAnalyze.deleteTag(strHtml); 去除多余卷标,函数有一个标记符 flag flag 最开始赋值为 0,当遇到“”时 flag 从新被赋值为 0 。读取字符被录入到字符串中。 建立一个新的类 BeanSon 用于存储过滤后的页面信息 Beason 包含: String StandardNo = “; String StandardTiC

33、h = “; 沈阳理工大学学士学位论文 27 String StandardTiEn = “; String IssuDate = “; String ExcuDate = “; String FirstIssDate = “; String StandardState = “; String ReviewAffiDate = “; String PlanNo = “; String ReplaceStandard = “; String ReplacedStandard = “; String RevocatoryDate = “; String AdopInteStandNo = “; S

34、tring AdopInteStandName = “; String AppliDegree = “; String AdopInteStand = “; String ICS = “; String CCS = “; String StandSort = “; String NumberofPages = “; String Price = “; String Governor = “; String TecCommittees =“ ; String DrafCommittee = “; 这些变量用于存储解析后要保存的具体内容,逐一将内容存入到这个对象中。 每解析一个网页就建立一个 be

35、an 便于程序下一步将获取的信息存入独立的 XML 文档。 XML 文档的生成写入 首先建立一个 document 类型的对象并且初始化: Document doc = DocumentHelper.createDocument(); Document 可以看做是 XML 在内存中的镜像,那么一旦对 document 操作就相当于对 XML 操作。 沈阳理工大学学士学位论文 28 建立一个 Element 类型的节点 变量名为 RootElement 显示出来的卷标为“doc”。 Element rootElement = DocumentHelper.createElement(“doc“)

36、; Element 界面表示 HTML 或 XML 文文件中的一个元素。元素可能有与它们相关的 属性;由于 Element 接口继承自 Node,所以可以使用一般 Node 接口属性 attributes 来获得元素所有属性的集合。Element 接口上有通过名称获得 Attr 对象或通过名称获 得属性值的方法。在 XML 中(其中的属性值可能包含实体引用),应该获得 Attr 对象来检查表示属性值的可能相当复杂的子树。另一方面,在 HTML 中(其中的所 有属性都有简单的字符串值),可以使用直接访问属性值的方法,这既安全又便捷。 doc.setRootElement(rootElement)

37、; 将 建立好的节点放在 doc 上,作为根节点 调用 public static void addElement(Element rootElement, String strLab,String strVal) 添加子节点到根节点下,第一个参数为 要添加节点的父节点,第二个为新节点的标签, 第三个为新节点的值。反复调用此函数,将对象 bean 内的值逐一添加到在节点中,其 中变量名称为卷标,变量值为节点值;如: addElement(rootElement, “Governor“, bean.getGovernor(); 这个函数是 java 自带函数的从定义,在这个函数内部,需要调用自带

38、函数 Element titleElement = rootElement.addElement(strLab); if (null = strVal) strVal = “; titleElement.addText(strVal); 当所有节点添加进来后,一个完整的 XML 文档已经在缓存中形成,但是并不是真正存 在,在这之后,要将缓存中的内容写入到硬盘中,设定文件保存路径,将文件的 StandNo 作为档的名称,建立一个空白的 XML 文文件,调用函数 public static boolean write(Document doc, String strFileName, String

39、 strUrl); doc 为刚才建立的在缓存中的 XML 文档,strFileName 为将要建立的文件名称,strUrl 为该网页的链接地址,防止在建立文档时出错,以便记录再次下载。 在建立 XML 文档时需要先新建一个 XMLWriter 类型的对象,XMLWriter 类型是一个 专用接口,用来方便地扩展 SyncProvider 抽象类以用于面向 XML 的同步提供程序。 提供 XML 数据 writer 功能(如输出 XML 流功能)的 SyncProvider 实现可以实现 沈阳理工大学学士学位论文 29 此接口,以向 WebRowSet 实现提供标准 XmlWriter 对象。

40、 编写 WebRowSet 对象包括打印 rowset 的数据、元数据和属性,都使用适当的 XML 标记。调用系统函数 writer = new XMLWriter(new FileOutputStream(strFileName), format); 后面的参数为 XML 文档的字符集采用 GB2312(码是中华人民共和国国家汉字信息交换用编码) 。 以上过程是一页网址的链接,获取数据,解析,生成 XML 文档的全部过程,但是,在 下载时会出现一些错误,为了提高解析成功的比例,我对代码作了如下调整。 因为最开始对网页的解析式成千上万的,而且如果网速可以,访问网页的频率会非常 高,出于信息安全

41、角度,本机的 IP 会访问不了所解析的网站,所以我们在访问网页时, 通过 IP 代理来进行访问,代理服务器英文全称是 Proxy Server,其功能就是代理网络 用户去取得网络信息。形象的说:它是网络信息的中转站。代理服务器就好象一个大 的 Cache,这样就能显著提高浏览速度和效率。更重要的是:Proxy Server(代理服务 器)是 Internet 链路级网关所提供的一种重要的安全功能,它的工作主要在开放系统互 联(OSI)模型的会话层。主要的功能有: 突破自身 IP 访问限制,访问国外站点。教育网、过去的 169 网等网络用户可以通过代 理访问国外网站。 访问一些单位或团体内部资源

42、,如某大学 FTP(前提是该代理位址在该资源 的允许访 问范围之内),使用教育网内位址段免费代理服务器,就可以用于对教育网开放的各 类 FTP 下载上传,以及各类数据查询共享等服务。 突破中国电信的 IP 封锁:中国电信用户有很多网站是被限制访问的,这种限制是人为 的,不同 Serve 对地址的封锁是不同的。所以不能访问时可以换一个国外的代理服务器 试试。 提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过 时,同时也将其保存到缓冲区中,当其它用户再访问相同的信息时, 则直接由缓冲区 中取出信息,传给用户,以提高访问速度。 隐藏真实 IP:上网者也可以通过这种方法隐藏自

43、己的 IP,免受攻击。 添加如下代码:Proxy proxy = DealProxy.getInstance().getPoxxy(); 将 strHtml = DownloadUtil.getHtmlText(strUrl, 60 * 1000, “utf-8“, null, null); 变为 strHtml = DownloadUtil.getHtmlText(strUrl, 60 * 1000, “utf-8“, null, proxy); 使访问网页时通过代理作为中转站去访问网页。 沈阳理工大学学士学位论文 30 在新建对象时,需要初始化代理类型变量从配置文件中读取代理列。 首先 s

44、etdate()函数,读取配置文件。 Path = Global.getInstance().getConfigValue(“ProxyPath“); getInstance()函数初始化对象,读取获得配置文件路径,为读取配置文件做准备, getConfigValue()括号内的参数为配置文件的卷标名称,调用这个函数后,返回的结 果为卷标的内容,即代理的存放位置。 之后,建立一个 map 类对象,存放读取的代理。Map 提供了一个比 list 更通用的元素 存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个 值。 map = readFileByLines(Fi

45、lePath, “ “); 一行行读取档内容,档存储内容为,代理 IP 和端口号 用 空格分隔,将 IP 作为键值, 埠号作为值存入 Map。之后再调用代理从列表中直接读取。 由于网络不稳定的原因,有时会产生,网页正确连接,但是网页内容没有完全下载的 情况,这时需要检查如果包含某段源代码的网页为可以解析的网页,如果不包含重新 连接,并规定十次为上线,否则放弃该页面,把 URL 存入错误解析的 TXT 文档 在使用时,会发现如果连续按下载,页面会无响应,这时候需要应用单例模式。 单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的 特殊类。通过单例模式可以保证系统中一个类只

46、有一个实例而且该实例易于外界访问, 从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存 在一个,单例模式是最好的解决方案。 单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为 系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用 一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用 工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),因为让类的实例 去生成另一个唯一实例毫无意义。1Static uniqueInstance 是 singleton 的唯一实例, static sharedInst

47、ance 将把它返回客户端。通常,sharedInstance 会检查 uniqueInstance 是否已 经被实例化。如果没有,它会生成一个实例然后返回 uniqueInstance。1 对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打 印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系 统;一个系统只能有一个计时工具或 ID(序号)生成器。如在 Windows 中就只能打开一 沈阳理工大学学士学位论文 31 个任务管理器。如果不使用机制对窗口对象进行唯一化,将弹出多个窗口,如果这些 窗口显示的内容完全一致,则是重复对象,浪费内存资源;如果

48、这些窗口显示的内容 不一致,则意味着在某一瞬间系统有多个状态,与实际不符,也会给用户带来误解, 不知道哪一个才是真实的状态。因此有时确保系统中某个对象的唯一性即一个类只能 有一个实例非常重要。3如何保证一个类只有一个实例并且这个实例易于被访问呢? 定义一个全局变量可以确保对象随时都可以被访问,但不能防止我们实例化多个对象。 一个更好的解决办法是让类自身负责保存它的唯一实例。这个类可以保证没有其它实 例被创建,并且它可以提供一个访问该实例的方法。这就是单例模式的模式动机。 2 根据页面信息实时检查是否有新的 URL 首先检查网站,是否更新了标准,链接国家标准化管理委员会标准公告页面。提取部 分网

49、页源代码: 若查询 2010 年第 1 号(总第 156 号)之前的国 家标准公告历史数据请点击 这里 2013 年第 6 号中国国家标准公告 由分析可知 中尖括号的内容加上国家 标准化管理委员会国家标准公告的网页链接,组成新的网页链接,进入某 个公告的页面,图 3.3.1.1 为进入网页的界面 沈阳理工大学学士学位论文 32 图 3.3.1.1 图 3.4.1.2 图 3.3.1.2 中蓝色部分,带有网络链接,从网页源文件中提取出链接部分,并形成 TXT 文文件,保存在固定路径下,再按更新按键就可以解析了。解析方法与从本地档中读 取 URL 的解析方法一样,不在赘述。下面详细介绍下从网站上获得更新的 URL 的方 法。 由图,可知,这个页面包含很多国家标准公告,每个公告带有一个网页链接,如: http:/ 获取当前页面的前五条网页链接,并且存入一个 StringBuffer 中,从固定的文本文档中 沈阳理工大学学士学位论文 33 读取上次更新的网页链接,检查这五条中是否含有,这条网页链接。由于网页更新产 生的新的网页链接在页面的最上面,而相对旧的网页链接出现在网页的下面,所以之 前解

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1