文档库 最新最全的文档下载
当前位置:文档库 › 网络爬虫毕业设计

网络爬虫毕业设计

网络爬虫毕业设计
网络爬虫毕业设计

摘要

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

网络爬虫是一种自动搜集互联网信息的程序。通过网络爬虫不仅能够为搜索引擎采集网络信息,而且可以作为定向信息采集器,定向采集某些网站下的特定信息,如招聘信息,租房信息等。

本文通过JAVA实现了一个基于广度优先算法的多线程爬虫程序。为何要使用多线程,以及如何实现多线程;系统实现过程中的数据存储;网页信息解析等。

通过实现这一爬虫程序,可以搜集某一站点的URLs,并将搜集到的URLs存入数据库。将解析的网页存入XML文档。

【关键词】网络爬虫;SOCKET编程;TCP/IP;网络编程;JA V A

Abstract

Instant message software in our daily 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 Internet .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 . 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 can 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-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

目录

1 绪论 (1)

1.1网络爬虫的发展 (1)

1.2国内外技术发展现状 (2)

1.3系统设计的意义 (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 JA V A多线程 (9)

2.3.4 JA V A网络编程 (16)

3 系统软件设计 (21)

3.1系统软件概述 (21)

3.2E CLIPSE软件介绍 (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.5S OCKET通信部分 (39)

3.5.1 什么是Socket (39)

3.5.2 服务端部分 (44)

3.5.3 客户端部分 (46)

4 系统运行 (49)

4.1服务器端界面 (49)

4.2客户端界面 (50)

结论 (52)

致谢 (53)

参考文献 (54)

外文资料原文 (55)

附录B 汉语翻译 (62)

附录C 程序代码 (66)

1 绪论

1.1 网络爬虫的发展

在互联网发展的早期,网站数量相对较少,信息数据量不大,查找也比较容易。然而伴随互联网井喷性的发展,普通网络用户想找到自己所需的数据简直如同在数据的海洋里捞针,为满足大众信息检索需求的专业搜索网站便应运而生了。

所有搜索引擎的鼻祖,是1990年由Montreal的McGill University三名学生(Alan Emtage、Peter Deutsch、Bill Wheelan)发明的Archie(Archie FAQ)。Alan Emtage等想到了开发一个可以用文件名查找文件的系统,于是便有了Archie。Archie是第一个自动索引互联网上匿名FTP网站文件的程序,但它还不是真正的搜索引擎。Archie是一个可搜索的FTP文件名列表,用户必须输入精确的文件名搜索,然后Archie会告诉用户哪一个FTP地址可以下载该文件。由于Archie深受欢迎,受其启发,Nevada System Computing Services大学于1993年开发了一个Gopher(Gopher FAQ)搜索工具Veronica (Veronica FAQ)。Jug head是后来另一个Gopher搜索工具。虽然当时万维网还未出现,但网络中档传输还是相当频繁的,而且由于大量的档散布在各个分散的FTP主机中,查询起来非常不便,因此Alan Archie工作原理与现在的搜索引擎已经很接近,它依靠脚本程序自动搜索网上的文件,然后对有关信息进行索引,供使用者以一定的表达式查询。

当时,“机器人”一词在编程者中十分流行。计算机“机器人”(Computer Robot)是指某个能以人类无法达到的速度不间断地执行某项任务的软件程序。由于专门用于检索信息的“机器人”程序象蜘蛛一样在网络间爬来爬去,因此,搜索引擎的“机器人”程序就被称为“蜘蛛”程序。

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

随着互联网的迅速发展,使得检索所有新出现的网页变得越来越困难,因此,在Matthew Gray的Wanderer基础上,一些编程者将传统的“蜘蛛”程序工作原理作了些改进。直到一些编程者提出了这样的设想,既然所有网页都可能有连向其它网站的链接,

那么从跟踪一个网站的链接开始,就有可能检索整个互联网。到1993年底,一些基于此原理的搜索引擎开始纷纷涌现,但是早期的搜索引擎只是以搜索工具在数据库中找到匹配信息的先后次序排列搜索结果,因此毫无信息关联度可言。而RBSE是第一个在搜索结果排列中引入关键词串匹配程度概念的引擎。最早现代意义上的搜索引擎出现于1994年7月。当时Michael Mauldin将John Leavitt的蜘蛛程序接入到其索引程序中,创建了大家现在熟知的Lycos(2000年被西班牙网络集团Terra Lycos Network收购)。同年4月,斯坦福(Stanford)大学最为著名的两名博士生,美籍华人杨致远(Gerry Yang)和David Filo共同创办了Yahoo公司,并成功地使搜索引擎的概念深入人心。从此搜索引擎进入了高速发展时期。目前,互联网上有名有姓的搜索引擎已达数百家,其检索的信息量也与从前不可同日而语。像国外的Google,国内的百度,这样的搜索引擎巨擘由于掌握的大多数的入口流量,成为互联网世界的霸主,并带来了巨大的商业价值。

1.2 国内外技术发展现状

因为搜索引擎的商业化应用带来了巨大的商业价值,所以作为搜索引擎的核心部分的网络爬虫技术,也理所应当的成为了国内外研究的热点。对于网络爬虫的研究从上世纪九十年代就开始了目前爬虫技术已经相当成熟。并催生了像Baidu和Google这样的网络巨擘,而其它公司也纷纷推出了自己的搜索引擎。网络爬虫是搜索引擎的重要组成部分。

现今,网络爬虫主要分为通用爬虫和聚焦爬虫两类。通用搜索引擎的目标是尽可能大的网络覆盖率,通用搜索引擎大多提供基于关键词的检索。聚焦爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择的访问万维网上的网页与相关的链接,获取所需要的信息。与通用爬虫(general purpose web crawler)不同,聚焦爬虫并不追求大的覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。同时,支持根据语义信息提出的查询。

网络爬虫的发展趋势随着AJAX/Web2.0等技术的流行,如何抓取AJAX等动态页面成了搜索引擎急需解决的问题,如果搜索引擎依旧采用“爬”的机制,是无法抓取到AJAX页面的有效数据的。

除此之外,网络爬虫还主要面对着一下的这些问题(摘自百度百科[5]):

1、强制用Cookies。部分站长为了让用户记住登陆信息,强迫用户使用Cookies。

如果未开启,则无法进行访问,访问页面显示的也不会正常,这种方式会让蜘蛛无法进行访问。

2、登陆要求。有些企业站和个人站的设置一定要注册登陆后才能看到相关的文章内容,这种对蜘蛛不是很友好,蜘蛛不会注册、也不会登陆。

3、动态URL。动态URL简单的说就是带有问号、等号及参数的网址就是动态URL,动态URL不利于搜索引擎蜘蛛的爬行和抓取。

4、Flash。有的网站页面使用Flash视觉效果是很正常的,比如用Flash做的Logo、广告、图表等,这些对搜索引擎抓取和收录是没有问题的,很多网站的首页是一个大的Flash档,这种就叫蜘蛛陷阱,在蜘蛛抓取时HTML代码中只是一个链接,并没有文字。虽然大的Flash效果看上去很好,外观看着也很漂亮,但可惜搜索引擎看不到,无法读取任何内容。

5、无休止的跳转。对搜索引擎来说只对301跳转相对来说比较友好,对其他形式的跳转都是比较敏感,例如:JavaScript跳转、Meta Refresh跳转、Flash跳转、302跳转。

1.3 系统设计的意义

本文通过JA V A语言实现一个基于广度优先偏历算法的多线程爬虫程序。通过实现此爬虫程序可以定点搜集某一站点的URLs,如果需要搜集其它信息,可以在解析URLs 的同时,解析获取相应信息

2 总体设计方案

2.1系统设计方案

本设计主要是通过在eclipse软件环境中进行,设计过程中首先服务器端获得网页URL,URL的获得途径有从客户端获得的已经形成的URL,和解析网站获得的更新的URL两种途径,然后根据URL连接该网页,获取网页源代码,获取网页源代码中需要的网页内容,去除多余的标签,空格,最后形成XML文档,服务器端的还包含获得IP 代理,因为反复解析同一个网站,网站的防火墙会让本地IP无法访问该网站,所以我们需要用到IP代理循环访问网站解决这个问题,服务器端还可以阅本地文件的模块,方便文件阅读的客户端主要是过滤本地的文档与服务器端进行信息交互,传送需要解析的URL,获得已经解析的网页源代码所形成的XML文档。

图 2.1.1网页解析部分流程图

图 2.1.2 客户端文件遍历流程图 图2.1.3 服务器端与客户端通信流程图

2.3 网络爬虫的相关技术

2.3.1 URL

统一资源定位符(URL ,英语UniformResourceLocator 的缩写)也被称为网页地址,是因特网上标准的资源的地址。它最初是由蒂姆·伯纳斯-李发明用来作为万维网的地址的。现在它已经被万维网联盟编制为因特网标准RFC1738了。

在因特网的历史上,统一资源定位符的发明是一个非常基础的步骤。统一资源定位符的语法是一般的,可扩展的,它使用ASCII 代码的一部分来表示因特网的地址。一般统一资源定位符的开始标志着一个计算机网络所使用的网络协议。

统一资源定位符是统一资源标志符的一个下种。统一资源标志符确定一个资源,而统一资源定位符不但确定一个资源,而且还表示出它在哪里。

URL结构一般分为两个部分,一个是物理结构,一个是逻辑结构。在物理结构包括扁平结构和树型结构。扁平结构就是网站中所有的页面都是在根目录这一级别,形成一个扁平的物理结构。这比较适合于小型的网站,因为如果太多文件都放在根目录下的话,制作和维护起来比较麻烦。而树型结构的意义是在一级目录下分为多个频道或者称之为目录,然后目录下面再放上属于这个频道的页面,首页、频道首页、频道下的内容就好比树干、树枝、树叶的关系。逻辑结构就是由网页内部链接所形成的逻辑的或链接的网络图。比较好的情况是逻辑结构与前面的树型物理结构相吻合。

统一资源定位符URL 是对可以从因特网上得到的资源的位置和访问方法的一种

简洁的表示。URL 给资源的位置提供一种抽象的识别方法,并用这种方法给资源定位。只要能够对资源定位,系统就可以对资源进行各种操作,如存取、更新、替换和查找其属性。URL 相当于一个文件名在网络范围的扩展。因此URL 是与因特网相连的机器上的任何可访问对象的一个指针。

URL 的一般形式是:://<主机>:<端口>/<路径>

网络爬虫就是通过提取和分析出网页中的URL地址,对相应网络进行爬取。

2.3.2 HTTP协议

超文本传输协议(HTTP-Hypertext transfer protocol) 是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文文件的数据传送协议。

2.3.2.1 HTTP协议简介

超文本传输协议(HTTP-Hypertext transfer protocol) 是分布式,协作式,超媒体系统应用之间的通信协议。是万维网(world wide web)交换信息的基础。

HTTP是IETF(Internet Engineering Task Force)制定的国际化标准。在HTTP标准制定和实现的过程中,W3C积极参与了其中的工作,并发挥了重要作用。

它允许将超文本标记语言(HTML) 文档从Web 服务器传送到Web浏览器。HTML 是一种用于创建文文件的标记语言,这些文文件包含到相关信息的链接。您可以单击一个链接来访问其它文文件、图像或多媒体对象,并获得关于链接项的附加信息。

HTTP协议的主要特点可概括如下:

1、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP 协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

2、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

3、无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

4、无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。

另一方面,在服务器不需要先前信息时它的应答就较快。

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所标识的资源。

POST 在Request-URI所标识的资源后附加新的数据。

HEAD 请求获取由Request-URI所标识的资源的响应消息报头。

OPTIONS 请求查询服务器的性能,或查询与资源相关的选项和需求。

PUT 请求服务器存储一个资源,并用Request-URI作为其标识。

DELETE 请求服务器删除由Request-URI所标识的资源。

TRACE 请求服务器回送收到的请求信息,主要用语测试或诊断。

URI完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使用HTTP的版本。

一个URL地址用于描述一个网络上的资源,而HTTP中的GET, POST, PUT, DELETE 就对应着对这个资源的查,改,增,删4个操作。其中最常见的就是GET和POST了。GET一般用于获取/查询资源信息;而POST一般用于更新资源信息。以下是二者的区别:

1.GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相

连,如EditPosts.aspx?name=test1&id=123456;POST方法是把提交的数据放

在HTTP包的Body中;

2.GET提交的数据大小有限制(因为浏览器对URL的长度有限制??也有人说依

服务器的处理能力而定);而POST方法提交的数据没有限制;

3.GET方式需要使用Request.QueryString来取得变量的值;而POST方式通过

Request.Form来获取变数的值;

4.GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交

数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其它人可

以访问这台机器,就可以从历史记录获得该用户的账号和密码;

2.3.2.4HTTP状态代码

状态代码由3位数字组成,表示请求是否被理解或被满足。

状态描述:

状态描述给出了关于状态代码的简短的文字描述。

状态代码的第一个数字定义了响应的类别,后面两位没有具体的分类。

第一个数字有五种可能的取值:

- 1xx: 指示信息—表示请求已接收,继续处理。

- 2xx: 成功—表示请求已经被成功接收、理解、接受。

- 3xx: 复位向—要完成请求必须进行更进一步的操作。

- 4xx: 客户端错误—请求有语法错误或请求无法实现。

- 5xx: 服务器端错误—服务器未能实现合法的请求。

状态代码状态描述说明

200 OK 客户端请求成功

400 Bad Request 由于客户端请求有语法错误,不能被服务器所理解。

401 Unauthonzed 请求未经授权。这个状态代码必须和WWW-Authenticate报头域一起使用

403 Forbidden 服务器收到请求,但是拒绝提供服务。服务器通常会在回应正文中给出不提供服务的原因

404 Not Found 请求的资源不存在,例如,输入了错误的URL。

500 Internal Server Error 服务器发生不可预期的错误,导致无法完成客户端的请求。

503 Service Unavailable 服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常。

2.3.3 JAVA多线程

在一个程序中,一些独立运行的程序片断叫做“线程”(Thread),利用它编程的概念就叫作“多线程处理”。(摘自百度百科[5])

2.3.3.1 定义

线程的概念来源于计算机的操作系统的进程的概念。进程是一个程序关于某个数据集的一次运行。也就是说,进程是运行中的程序,是程序的一次运行活动。

线程和进程的相似之处在于,线程和运行的程序都是单个顺序控制流。有些教材将线程称为轻量级进程(light weight process)。线程被看作是轻量级进程是因为它运行在一个程序的上下文内,并利用分配给程序的资源和环境。

作为单个顺序控制流,线程必须在运行的程序中得到自己运行的资源,如必须有自己的执行栈和程序计数器。线程内运行的代码只能在该上下文内。因此还有些教程将执行上下文(execution context)作为线程的同义词。

所有的程序员都熟悉顺序程序的编写,如我们编写的名称排序和求素数的程序就是顺序程序。顺序程序都有开始、执行序列和结束,在程序执行的任何时刻,只有一个执行点。线程(thread )则是进程中的一个单个的顺序控制流。单线程的概念很简单,如图所示。

多线程(multi-thread )是指在单个的程序内可以同时运行多个不同的线程完成不同的任务,图2.3.3.1.2说明了一个程序中同时有两个线程运行。

图2.3.3.1.1 单线程程序示意图 图2.3.3.1.2 多线程程序示意图

有些程序中需要多个控制流并行执行。例如,

for(int i = 0; i < 100; i++)

System.out.println("Runner A = " + i);

for(int j = 0; j < 100; j++ )

System.out.println("Runner B = "+j);

上面的代码段中,在只支持单线程的语言中,前一个循环不执行完不可能执行第二个循环。要使两个循环同时执行,需要编写多线程的程序。

很多应用程序是用多线程实现的,如Hot Java Web 浏览器就是多线程应用的例子。在Hot Java 浏览器中,你可以一边滚动屏幕,一边下载Applet 或图像,可以同时播放动画和声音等。

2.3.3.2 优点

两个线程

使用线程可以把占据时间长的程序中的任务放到后台去处理。用户接口可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度。程序的运行速度可能加快。在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下可以释放一些珍贵的资源如内存占用等等。还有其它很多使用多线程的好处,这里就不在累述。

2.3.3.3 不足

1.如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换。

2.更多的线程需要更多的内存空间。

3.线程可能会给程序带来更多“Bug”,因此要小心使用。

4.线程的中止需要考虑其对程序运行的影响。

5.通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生。

2.3.3.4 JAVA多线程编程

计算机程序得以执行的三个要素是:CPU,程序代码,可存取的数据。在JA V A语言中,多线程的机制是通过虚拟CPU来实现的。可以形象的理解为,在一个JA V A程序内部虚拟了多台计算机,每台计算机对应一个线程,有自己的CPU,可以获取所需的代码和数据,因此能独立执行任务,相互间还可以共享代码和数据。JA V A的线程是通过https://www.wendangku.net/doc/2f14175218.html,ng.Thread类来实现的,它内部实现了虚拟CPU的功能,能够接收和处理传递给它的代码和资料,并提供了独立的运行控制功能。每个JA V A应用程序都至少有一个线程,这就是所谓的主线程。它由JVM创建并调用JA V A应用程序的main方法。

Java语言实现多线程编程的类和接口。在https://www.wendangku.net/doc/2f14175218.html,ng包中定义了Runnable接口和Thread类。

Runnable界面中只定义了一个方法,它的格式为:

public abstract void run()

这个方法要由实现了Runnable接口的类实现。Runnable对象称为可运行对象,一个线程的运行就是执行该对象的run()方法。

Thread类实现了Runnable接口,因此Thread对象也是可运行对象。同时Thread类也是线程类,该类的构造方法如下:

public Thread()

public Thread(Runnable target)

public Thread(String name)

public Thread(Runnable target, String name)

public Thread(ThreadGroup group, Runnable target)

public Thread(ThreadGroup group, String name)

public Thread(ThreadGroup group, Runnable target, String name)

target为线程运行的目标对象,即线程调用start()方法启动后运行那个对象的run()方法,该对象的类型为Runnable,若没有指定目标对象,则以当前类对象为目标对象;name为线程名,group指定线程属于哪个线程组。

Thread类的常用方法有:

public static Thread currentThread() 返回当前正在执行的线程对象的引用。

public void setName(String name) 设置线程名。

public String getName() 返回线程名。

public static void sleep(long millis) throws InterruptedException

public static void sleep(long millis, int nanos) throws InterruptedException

使当前正在执行的线程暂时停止执行指定的毫秒时间。指定时间过后,线程继续执行。该方法抛出InterruptedException异常,必须捕获。

public void run() 线程的线程体。

public void start() 由JVM调用线程的run()方法,启动线程开始执行。

public void setDaemon(boolean on) 设置线程为Daemon线程。

public boolean isDaemon() 返回线程是否为Daemon线程。

public static void yield() 使当前执行的线程暂停执行,允许其它线程执行。

public ThreadGroup getThreadGroup() 返回该线程所属的线程组对象。

public void interrupt() 中断当前线程。

public boolean isAlive() 返回指定线程是否处于活动状态。

通常,我们可以将一个类继承Thread,然后,覆盖Thread中的run()方法,这样让这个类本身也就成了线程。

每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。

使用start()方法,线程进入Runnable状态,它将线程调度器注册这个线程。调用start()方法并不一定马上会执行这个线程,正如上面所说,它只是进入Runnble而不是Running。我们也可以通过实现Runnable接口并实现接口中定义的唯一方法run(),可以创建一个线程。在使用Runnable接口时,不能直接创建所需类的对象并运行它,而是必须从Thread 类的一个实例内部运行它。

从上面两种创建线程的方法可以看出,如果继承Thread类,则这个类本身可以调用start方法,也就是说将这个继承了Thread的类当作目标对象;而如果实现Runnable接口,则这个类必须被当作其它线程的目标对象。

JA V A的线程从产生到消失,可分为5种状态:新建(New),可运行(Runnable),运行(Running),阻塞(Blocked)以及死亡(Dead)。其中,Running状态并非属于JA V A 规范中定义的线程状态,也就是说,在JA V A规范中,并没有将运行(Running)状态真正的设置为一个状态,它属于可运行状态的一种。线程的状态如图2.3.3.1.4所示:

图2.3.3.1.4 线程的五种状态

下面以前面的Java小程序为例说明线程的状态:

1. 新建状态(New Thread)

当Applet启动时调用Applet的start()方法,此时小应用程序就创建一个Thread对象clockThread。

public void start() {

if (clockThread == null) {

clockThread = new Thread(cp, "Clock");

clockThread.start();

}

}

当该语句执行后clockThread就处于新建状态。处于该状态的线程仅仅是空的线程对

象,并没有为其分配系统资源。当线程处于该状态,你仅能启动线程,调用任何其它方法是无意义的且会引发IllegalThreadStateException异常(实际上,当调用线程的状态所不允许的任何方法时,运行时系统都会引发

IllegalThreadStateException异常)。

注意cp作为线程构造方法的第一个参数,该参数必须是实现了Runnable接口的对象并提供线程运行的run()方法,第二个参数是线程名。

2. 就绪状态(Runnable)

一个新创建的线程并不自动开始运行,要执行线程,必须调用线程的start()方法。当线程对象调用start()方法即启动了线程,如clockThread.start(); 语句就是启动clockThread 线程。start()方法创建线程运行的系统资源,并调度线程运行run()方法。当start()方法返回后,线程就处于就绪状态。

处于就绪状态的线程并不一定立即运行run()方法,线程还必须同其它线程竞争CPU 时间,只有获得CPU时间才可以运行线程。因为在单CPU的计算机系统中,不可能同时运行多个线程,一个时刻仅有一个线程处于运行状态。因此此时可能有多个线程处于就绪状态。对多个处于就绪状态的线程是由Java运行时系统的线程调度程序(thread scheduler)来调度的。

3. 运行状态(Running)

当线程获得CPU时间后,它才进入运行状态,真正开始执行run()方法,这里run()方法中是一个循环,循环条件是true。

public void run() {

while (true) {

repaint();

try {

Thread.sleep(1000);

} catch (InterruptedException e){}

}

4. 阻塞状态(Blocked)

线程运行过程中,可能由于各种原因进入阻塞状态。所谓阻塞状态是正在运行的线程没有运行结束,暂时让出CPU,这时其它处于就绪状态的线程就可以获得CPU时间,进入运行状态。有关阻塞状态在后面详细讨论。

5. 死亡状态(Dead)

线程的正常结束,即run()方法返回,线程运行就结束了,此时线程就处于死亡状态。本例子中,线程运行结束的条件是clockThread为null,而在小应用程序的stop()方法中,将clockThread赋值为null。即当用户离开含有该小应用程序的页面时,浏览器调用stop()方法,将clockThread赋值为null,这样在run()的while循环时条件就为false,这样线程运行就结束了。如果再重新访问该页面,小应用程序的start()方法又会重新被调用,重新创建并启动一个新的线程。

public void stop() {

clockThread = null;

}

程序不能像终止小应用程序那样通过调用一个方法来结束线程(小应用程序通过调用stop()方法结束小应用程序的运行)。线程必须通过run()方法的自然结束而结束。通常在run()方法中是一个循环,要么是循环结束,要么是循环的条件不满足,这两种情况都可以使线程正常结束,进入死亡状态。

例如,下面一段代码是一个循环:

public void run(){

int i = 0;

while(i<100){

i++;

System.out.println("i = " + i );

}

}

当该段代码循环结束后,线程就自然结束了。注意一个处于死亡状态的线程不能再调用该线程的任何方法。线程调度程序根据调度策略来调度不同的线程,调用线程的run方法给已经注册的各个线程以执行的机会,被调度执行的线程进入运行(Running)状态。当线程的run方法运行完毕,线程将被抛弃,进入死亡状态。你不能调用restart方法来重新开始一个处于死亡状态的线程,但是,你可以调用处于死亡状态的线程对象的各个方法。

当同时运行的相互独立的线程需要共享数据并且需要考虑其它线程的状态时,就需要使用一套机制使得这些线程同步,避免在争用资源时发生冲突,甚至发生死锁。JA V A提

供了多种机制以实现线程同步。多数JA V A同步是以对象锁定为中心的。JA V A中从Object 对象继承来的每个对象都有一个单独的锁。由于JA V A中的每个对象都是从Object继承来的。所以JA V A中的每个对象都有自己的锁。这样使它在共享的线程之间可以相互协调。在JA V A中实现线程同步的另一个方法是通过使用synchronized关键词。JA V A使用synchronized关键词来定义程序中要求线程同步的部分。synchronized关键词实现的基本操作是把每个需要线程同步的部分定义为一个临界区,在临界区中同一时刻只有一个线程被执行。

2.3.4 JAVA网络编程

网络编程就是两个或多个设备之间的数据交换,其实更具体的说,网络编程就是两个或多个程序之间的数据交换,和普通的单机程序相比,网络程序最大的不同就是需要交换数据的程序运行在不同的计算机上,这样就造成了数据交换的复杂。虽然通过IP 地址和端口可以找到网络上运行的一个程序,但是如果需要进行网络编程,则还需要了解网络通讯的过程。

2.3.4.1 TCP/IP协议

网罗编程的目的就是指直接或间接地通过网络协议与其它计算机进行通讯。网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。

目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务埠,使后来的客户也能及时得到服务TCP是Tranfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之

间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。

本课题将采用IPv4协议作为开发基础。IPv4网际协议版本4(Internet Protocol version 4)。IPv4(通常称之IP)自20世纪80年代早期以来一直是网际协议族的主力协议。它使用32位地址。IPv4给TCP、UDP、SCTP、ICMP和IGMP提供分组递送服务。其中主要使用的基于TCP和UDP的网络编程。

TCP传输控制协议(Transmission Control Protocol)。TCP是一个面向连接的协议,为用户进程提供可靠的全双工字节流。TCP套接字是一种流套接字(stream socket)。TCP 关心确认、超时和重传之类的细节。大多数因特网应用程序使用TCP。TCP的可靠连接得益于它的三次握手原理。TCP协议真是通过“三次握手”的方式保证了传输的可靠性。本课题将会采用该种协议为基础,进行编程。

2.3.4.2 网络编程的步奏

无论使用TCP方式还是UDP方式进行网络通讯,网络编程都是由客户端和服务器端组成。当然,B/S结构的编程中只需要实现服务器端即可。所以,下面介绍网络编程的步骤时,均以C/S结构为基础进行介绍。说明:这里的步骤实现和语言无关,也就是说,这个步骤适用于各种语言实现,不局限于Java语言。

网络编程的基本步奏:

1、建立网络连接:

客户端网络编程的第一步都是建立网络连接。在建立网络连接时需要指定连接到的服务器IP地址和端口号。建立完成后,会形成一条虚拟的连接,后续的操作就可以通过该连接实现数据的交换了。

2、交换数据

连接建立以后,可以通过这个连接交换资料。交换数据一般会按照“请求-响应”模式进行,即有客户端发送一个请求数据到服务器,服务器回馈一个响应数据给客户端,如果客户端不发送请求则服务器就不主动响应。根据逻辑需要,可以进行无限次的资料交换。

网络爬虫工作原理

网络爬虫工作原理 1 聚焦爬虫工作原理及关键技术概述 网络爬虫是一个自动提取网页的程序,它为搜索引擎从Internet网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止,另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。 相对于通用网络爬虫,聚焦爬虫还需要解决三个主要问题: (1) 对抓取目标的描述或定义; (2) 对网页或数据的分析与过滤; (3) 对URL的搜索策略。 抓取目标的描述和定义是决定网页分析算法与URL搜索策略如何制订的基础。而网页分析算法和候选URL排序算法是决定搜索引擎所提供的服务形式和爬虫网页抓取行为的关键所在。这两个部分的算法又是紧密相关的。 2 抓取目标描述 现有聚焦爬虫对抓取目标的描述可分为基于目标网页特征、基于目标数据模式和基于领域概念3种。

基于目标网页特征的爬虫所抓取、存储并索引的对象一般为网站或网页。根据种子样本获取方式可分为: (1) 预先给定的初始抓取种子样本; (2) 预先给定的网页分类目录和与分类目录对应的种子样本,如Yahoo!分类结构等; (3) 通过用户行为确定的抓取目标样例,分为: a) 用户浏览过程中显示标注的抓取样本; b) 通过用户日志挖掘得到访问模式及相关样本。 其中,网页特征可以是网页的内容特征,也可以是网页的链接结构特征,等等。现有的聚焦爬虫对抓取目标的描述或定义可以分为基于目标网页特征,基于目标数据模式和基于领域概念三种。 基于目标网页特征的爬虫所抓取、存储并索引的对象一般为网站或网页。具体的方法根据种子样本的获取方式可以分为:(1)预先给定的初始抓取种子样本;(2)预先给定的网页分类目录和与分类目录对应的种子样本,如Yahoo!分类结构等;(3)通过用户行为确定的抓取目标样例。其中,网页特征可以是网页的内容特征,也可以是网页的链接结构特征,等等。 基于目标数据模式的爬虫针对的是网页上的数据,所抓取的数据一般要符合一定的模式,或者可以转化或映射为目标数据模式。 另一种描述方式是建立目标领域的本体或词典,用于从语义角度分析不同特征在某一主题中的重要程度。 3 网页搜索策略 网页的抓取策略可以分为深度优先、广度优先和最佳优先三种。深度优先在很多情况下会导致爬虫的陷入(trapped)问题,目前常见的是广度优先和最佳优先方法。

毕设开题报告-及开题报告分析

开题报告如何写 注意点 1.一、对指导教师下达的课题任务的学习与理解 这部分主要是阐述做本课题的重要意义 2.二、阅读文献资料进行调研的综述 这部分就是对课题相关的研究的综述落脚于本课题解决了那些关键问题 3.三、根据任务书的任务及文件调研结果,初步拟定执行实施的方案(含具体进度计划) 这部分重点写具体实现的技术路线方案的具体实施方法和步骤了,具体进度计划只是附在后面的东西不是重点

南京邮电大学通达学院毕业设计(论文)开题报告

文献[5] 基于信息数据分析的微博研究综述[J];研究微博信息数据的分析,在这类研究中,大多数以微博消息传播的三大构件---微博消息、用户、用户关系为研究对象。以微博消息传播和微博成员组织为主要研究内容,目的在于发祥微博中用户、消息传博、热点话题、用户关系网络等的规律。基于微博信息数据分析的研究近年来在国内外都取得了很多成果,掌握了微博中的大量特征。该文献从微博消息传播三大构件的角度,对当前基于信息数据分析的微博研究进行系统梳理,提出微博信息传播三大构件的概念,归纳了此类研究的主要研究内容及方法。 对于大多用户提出的与主题或领域相关的查询需求,传统的通用搜索引擎往往不能提供令人满意的结果网页。为了克服通用搜索引擎的以上不足,提出了面向主题的聚焦爬虫的研究。文献[6]综述了聚焦爬虫技术的研究。其中介绍并分析了聚焦爬虫中的关键技术:抓取目标定义与描述,网页分析算法和网页分析策略,并根据网络拓扑、网页数据内容、用户行为等方面将各种网页分析算法做了分类和比较。聚焦爬虫能够克服通用爬虫的不足之处。 文献[7]首先介绍了网络爬虫工作原理,传统网络爬虫的实现过程,并对网络爬虫中使用的关键技术进行了研究,包括网页搜索策略、URL去重算法、网页分析技术、更新策略等。然后针对微博的特点和Ajax技术的实现方法,指出传统网络爬虫的不足,以及信息抓取的技术难点,深入分析了现有的基于Ajax的网络爬虫的最新技术——通过模拟浏览器行为,触发JavaScript事件(如click, onmouseo ver等),解析JavaScript脚本,动态更新网页DOM树,抽取网页中的有效信息。最后,详细论述了面向SNS网络爬虫系统的设计方案,整体构架,以及各功能模块的具体实现。面向微博的网络爬虫系统的实现是以新浪微博作为抓取的目标网站。结合新浪微博网页的特点,通过模拟用户行为,解析JavaSc ript,建立DOM树来获取网页动态信息,并按照一定的规则提取出网页中的URL和有效信息,并将有效信息存入数据库。本系统成功的实现了基于Ajax技术的网页信息的提取。 文献[8]引入网页页面分析技术和主题相关性分析技术,解决各大网站微博相继提供了抓取微博的API,这些API都有访问次数的限制,无法满足获取大量微博数据的要求,同时抓取的数据往往很杂乱的问题。展开基于主题的微博网页爬虫的研究与设计。本文的主要工作有研究分析网页页面分析技术,根据微博页面特点选择微博页面信息获取方法;重点描述基于“剪枝”的广度优先搜索策略的思考以及设计的详细过程,着重解决URL的去重、URL地址集合动态变化等问题;研究分析短文本主题抽取技术以及多关键匹配技术,确定微博主题相关性分析的设计方案;最后设计实现基于主题的微博网页爬虫的原型系统,实时抓取和存储微博数据。本文研究的核心问题是,根据微博数据的特点设计一种基于“剪枝”的广度优先搜索策略,并将其应用到微博爬虫中;同时使用微博页面分析技术使得爬虫不受微博平台API限制,从而让用户尽可能准确地抓取主题相关的微博数据。通过多次反复实验获取原型系统实验结果,将实验结果同基于API微博爬虫和基于网页微博爬虫的抓取效果进行对比分析得出结论:本文提出的爬行策略能够抓取主题相关的微博数据,虽然在效率上有所降低,但在抓取的微博数据具有较好的主题相关性。这实验结果证明本论文研究的实现方案是可行的。 文献[9]阐述了基于ajax的web应用程序的爬虫和用户界面状态改变的动态分析的过程和思路。文献[10]对于全球社交网络Twitter,设计并实现了,一个爬虫系统,从另一个角度阐明了Python在编写爬虫这个方面的强大和快速。仅仅用少量的代码就能实现爬虫系统,并且再强大的社交网站也可

网络爬虫技术(新)

网络爬虫技术 网络机器人 1.概念: 它们是Web上独自运行的软件程序,它们不断地筛选数据,做出自己的决定,能够使用Web获取文本或者进行搜索查询,按部就班地完成各自的任务。 2.分类: 购物机器人、聊天机器人、搜索机器人(网络爬虫)等。 搜索引擎 1.概念: 从网络上获得网站网页资料,能够建立数据库并提供查询的系统。 2.分类(按工作原理): 全文搜索引擎、分类目录。 1> 全文搜索引擎数据库是依靠网络爬虫通过网络上的各种链接自动获取大量 网页信息内容,并按一定的规则分析整理形成的。(百度、Google) 2> 分类目录:按目录分类的网站链接列表而已,通过人工的方式收集整理网 站资料形成的数据库。(国内的搜狐) 网络爬虫 1.概念: 网络爬虫也叫网络蜘蛛,它是一个按照一定的规则自动提取网页程序,其会自动的通过网络抓取互联网上的网页,这种技术一般可能用来检查你的站点上所有的链接是否是都是有效的。当然,更为高级的技术是把网页中的相关数据保存下来,可以成为搜索引擎。 搜索引擎使用网络爬虫寻找网络内容,网络上的HTML文档使用超链接连接了起来,就像织成了一张网,网络爬虫也叫网络蜘蛛,顺着这张网爬行,每到一个网页就用抓取程序将这个网页抓下来,将内容抽取出来,同时抽取超链接,作为进一步爬行的线索。网络爬虫总是要从某个起点开始爬,这个起点叫做种子,你可以告诉它,也可以到一些网址列表网站上获取。

现有聚焦爬虫对抓取目标的描述可分为基于目标网页特征、基于目标数据模式和基于领域概念3种。 基于目标网页特征的爬虫所抓取、存储并索引的对象一般为网站或网页。根据种子样本获取方式可分为: (1)预先给定的初始抓取种子样本; (2)预先给定的网页分类目录和与分类目录对应的种子样本,如Y ahoo!分类结构等; (3)通过用户行为确定的抓取目标样例,分为: a) 用户浏览过程中显示标注的抓取样本; b) 通过用户日志挖掘得到访问模式及相关样本。 其中,网页特征可以是网页的内容特征,也可以是网页的链接结构特征,等等。 一些算法的介绍 1> 网页分析算法

网络推广毕业设计

目录 1.引言 (1) 2.企业网站推广的目的 (1) 3.网络推广对于企业的意义 (2) 4.网络推广比传统媒体的优势 (2) 4.1传播范围广 (2) 4.2交互性强 (2) 4.3针对性明确 (2) 4.4受众数量可准确统计 (3) 4.5灵活、成本低 (3) 4.6感官性强 (3) 5.网络推广的重要性 (3) 5.1网络推广为网站打造更高的知名度 (4) 5.2网络推广为网站信息以及服务牵线搭桥 (4) 5.3网络推广为网站树立品牌价值 (4) 6.如何进行网络推广 (5) 7.网络推广的前景 (9) 毕业总结 (9) 参考文献: (10)

1.引言 网络推广就是利用互联网进行宣传推广活动。被推广对象可以是企业、产品、政府以及个人等等。根据有关数据显示2009调查中国93%的企业没有尝试过网络推广,而在国外发达国家只有16%的企业。这一调查研究表示中国互联网还处于萌芽阶段。 广义上讲,企业从开始申请域名、租用空间、建立网站开始就算是介入了网络推广活动,而通常我们所指的网络推广是指通过互联网手段进行的宣传推广等活动。 狭义地说,网络推广的载体是互联网,离开了互联网的推广就不能算是网络推广。而且利用互联网必须是进行推广,而不是做其他的事情。 另外一个容易模糊的概念是网站推广。网站推广为网络营销极其重要的一部分,因为网站是网络的主体。因此很多网络推广都包含着网站推广。当然网络推广也还进行非网站的推广,例如线下的产品、公司等等。这两个概念容易混淆是因为网络推广活动贯穿于网站的生命周期,从网站策划、建设、推广、反馈等网站存在的一系列环节中都涉及到了网络推广活动。 网络广告则是网络推广所采用的一种手段。除了网络广告以外,网络推广还可以利用搜索引擎、友情链接、网络新闻炒作等方法来进行推广。 随着互联网的迅速发展,网民将会越来越多,因此网络的影响力也将会越来越大。 如果不希望在互联网上做一个信息孤岛,就需要有效实现网络宣传。对企业而言,做好网络推广,可以带来经济效益;对个人而言,可以让更多人了解自己,认识更多的朋友。 2企业网站推广的目的 网站推广的目的在于让尽可能多的潜在用户了解并访问网站,通过网站获得有关产品和服务等信息,为最终形成购买决策提供支持。网站推广需要借助于一定的网络工具和资源,常用的网站推广工具和资源包括搜索引擎、分类目录、电子邮件、网站链接、在线黄页和分类广告、电子书、免费软件、网络广告媒体、传统推广渠道等。所有的网站推广方法实际上都是对某种网站推广手段和工具的合理利用,因此制定和实施有效的网站推广方法的基础是对各种网站推广工具和

计算机网络安全文献综述

计算机网络安全综述学生姓名:李嘉伟 学号:11209080279 院系:信息工程学院指导教师姓名:夏峰二零一三年十月

[摘要] 随着计算机网络技术的快速发展,网络安全日益成为人们关注的焦点。本文分析了影响网络安全的主要因素及攻击的主要方式,从管理和技术两方面就加强计算机网络安全提出了针对性的建议。 [关键词] 计算机网络;安全;管理;技术;加密;防火墙 一.引言 计算机网络是一个开放和自由的空间,但公开化的网络平台为非法入侵者提供了可乘之机,黑客和反黑客、破坏和反破坏的斗争愈演愈烈,不仅影响了网络稳定运行和用户的正常使用,造成重大经济损失,而且还可能威胁到国家安全。如何更有效地保护重要的信息数据、提高计算机网络的安全性已经成为影响一个国家的政治、经济、军事和人民生活的重大关键问题。本文通过深入分析网络安全面临的挑战及攻击的主要方式,从管理和技术两方面就加强计算机网络安全提出针对性建议。

二.正文 1.影响网络安全的主要因素[1] 计算机网络安全是指“为数据处理系统建立和采取的技术和管理的安全保护,保护计算机硬件、软件数据不因偶然和恶意的原因而遭到破坏、更改和泄漏”。计算机网络所面临的威胁是多方面的,既包括对网络中信息的威胁,也包括对网络中设备的威胁,但归结起来,主要有三点:一是人为的无意失误。如操作员安全配置不当造成系统存在安全漏洞,用户安全意识不强,口令选择不慎,将自己的帐号随意转借他人或与别人共享等都会给网络安全带来威胁。二是人为的恶意攻击。这也是目前计算机网络所面临的最大威胁,比如敌手的攻击和计算机犯罪都属于这种情况,此类攻击又可以分为两种:一种是主动攻击,它以各种方式有选择地破坏信息的有效性和完整性;另一类是被动攻击,它是在不影响网络正常工作的情况下,进行截获、窃取、破译以获得重要机密信息。这两种攻击均可对计算机网络造成极大的危害,并导致机密数据的泄漏。三是网络软件的漏洞和“后门”。任何一款软件都或多或少存在漏洞,这些缺陷和漏洞恰恰就是黑客进行攻击的首选目标。绝大部分网络入侵事件都是因为安全措施不完善,没有及时补上系统漏洞造成的。此外,软件公司的编程人员为便于维护而设置的软件“后门”也是不容忽视的巨大威胁,一旦“后门”洞开,别人就能随意进入系统,后果不堪设想。

网络爬虫的设计与实现(完整版)

网络爬虫的设计与实现

摘要 网络爬虫将下载的网页和收集到的网页信息存储在本地数据库中以供搜索引擎使用,它是一个专门从万维网上下载网页并分析网页的程序。随着网络的快速发展,人们对搜索引擎的要求也越来越高,而网络爬虫的效率直接影响着搜索引擎的质量。 本课题研究的是通用网络爬虫,它是从一个或若干个初始网页的链接开始进而得到一个链接队列。伴随着网页的抓取又不断从抓取到的网页中抽取新链接放入到链接队列中,直到爬虫系统满足了停止条件。该课题主要涉及到了缓冲池技术,多线程技术,套接字技术,HTTP和SSL协议,正则表达式,Linux网络编程技术,PHP+Apache的使用等相关技术。 本说明书叙述的网络爬虫是以Linux C实现的,加以PHP语言编写的界面使用户更加方面的操作,利用Shell脚本和Apache服务器使得爬虫系统和界面很好的结合在一起。 关键词:网络爬虫缓冲池正则表达式 SSL协议多线程

目次 1 引言 (1) 1.1 课题选题背景 (1) 1.2 课题研究的意义 (2) 2 需求分析 (3) 2.1 功能需求分析 (3) 2.2 系统性能分析 (4) 3 系统设计 (5) 3.1 系统工作流程图 (5) 3.2 数据结构设计 (6) 3.3 系统各功能流程图 (7) 4 系统实现 (10) 4.1 相关技术分析 (10) 4.2 系统功能模块的实现 (11) 5 测试与结果 (17) 结论 (23) 致谢............................................................................................ 错误!未定义书签。参考文献. (24)

网络爬虫外文翻译

外文资料 ABSTRACT Crawling the web is deceptively simple: the basic algorithm is (a)Fetch a page (b) Parse it to extract all linked URLs (c) For all the URLs not seen before, repeat (a)–(c). However, the size of the web (estimated at over 4 billion pages) and its rate of change (estimated at 7% per week) move this plan from a trivial programming exercise to a serious algorithmic and system design challenge. Indeed, these two factors alone imply that for a reasonably fresh and complete crawl of the web, step (a) must be executed about a thousand times per second, and thus the membership test (c) must be done well over ten thousand times per second against a set too large to store in main memory. This requires a distributed architecture, which further complicates the membership test. A crucial way to speed up the test is to cache, that is, to store in main memory a (dynamic) subset of the “seen” URLs. The main goal of this paper is to carefully investigate several URL caching techniques for web crawling. We consider both practical algorithms: random replacement, static cache, LRU, and CLOCK, and theoretical limits: clairvoyant caching and infinite cache. We performed about 1,800 simulations using these algorithms with various cache sizes, using actual log data extracted from a massive 33 day web crawl that issued over one billion HTTP requests. Our main conclusion is that caching is very effective – in our setup, a cache of roughly 50,000 entries can achieve a hit rate of almost 80%. Interestingly, this cache size falls at a critical point: a substantially smaller cache is much less effective while a substantially larger cache brings little additional benefit. We conjecture that such critical points are inherent to our problem and venture an explanation for this phenomenon. 1. INTRODUCTION A recent Pew Foundation study [31] states that “Search eng ines have become an indispensable utility for Internet users” and estimates that as of mid-2002, slightly

计算机专业毕业设计题目大全

计算机毕业设计题目大全安卓/Android题目大全: 安卓001个人事务管理系统 安卓002手机订餐系统 安卓003无线点菜 安卓004酒店房间预定系统? 安卓005个人相册管理系统 安卓006计算器 安卓007英语学习 安卓008绘图软件 安卓009医疗健康查询系统 安卓010健身信息管理系统 安卓011课程表 安卓012音乐播放器 安卓013便民自行车管理 安卓014点餐系统SQL版 安卓015二手图书交易系统 安卓016公交查询线路 安卓017订餐管理系统 安卓018校园闲置物品交易平台 安卓019电子书阅读器 安卓020蔬菜水果销售系统 安卓021网上商店系统 安卓022消费导航系统 安卓023GPS移动定位及运行轨迹管理系统 安卓024基于安卓系统的数据传输wifi 安卓025基于蓝牙的手机好友发现系统 安卓026学英语智力游戏 安卓027电子书阅读器(两个版本) 安卓028短信管理 安卓029音乐播放器 安卓030旅游记忆系统

安卓031教师教学信息查询系统 安卓032个人信息管理系统 安卓033基于Android的公路客运售票管理系统安卓034基于Android的英文词典的设计与实现安卓035同学通讯录 安卓036安卓仓库管理系统(单机) 安卓037电子词典的设计与实现 安卓038二维码识别系统的研究与实现 安卓039任务管理器的设计与实现 安卓040手机防火墙 安卓041邮件收发Email 安卓042计算器 安卓043绘图软件设计与实现 安卓044俄罗斯方块系统 安卓045网上商店系统设计与开发 安卓046消费导航系统设计与实现 安卓047记事本 安卓048拼图游戏的设计与实现 安卓049南京旅游 安卓050公交查询线路 安卓051打飞机游戏 安卓052建筑连连看 安卓053扫雷程序 安卓054视频播放器 安卓055多功能日历 安卓056图书借阅系统 安卓057天气预报 安卓058人体健康监测软件 安卓059天气预报 安卓060实习登记系统 安卓061五子棋 安卓062餐厅点餐订餐系统 安卓063心理测试 安卓064手机理财软件 安卓065音频编辑器 安卓066相册图片浏览器 安卓067手机校园信息系统

网络安全外文翻译文献

网络安全外文翻译文献 (文档含英文原文和中文翻译) 翻译: 计算机网络安全与防范 1.1引言 计算机技术的飞速发展提供了一定的技术保障,这意味着计算机应用已经渗透到社会的各个领域。在同一时间,巨大的进步和网络技术的普及,社会带来了巨大的经济利润。然而,在破坏和攻击计算机信息系统的方法已经改变了很多的网络环境下,网络安全问题逐渐成为计算机安全的主流。

1.2网络安全 1.2.1计算机网络安全的概念和特点 计算机网络的安全性被认为是一个综合性的课题,由不同的人,包括计算机科学、网络技术、通讯技术、信息安全技术、应用数学、信息理论组成。作为一个系统性的概念,网络的安全性由物理安全、软件安全、信息安全和流通安全组成。从本质上讲,网络安全是指互联网信息安全。一般来说,安全性、集成性、可用性、可控性是关系到网络信息的相关理论和技术,属于计算机网络安全的研究领域。相反,狭隘“网络信息安全”是指网络安全,这是指保护信息秘密和集成,使用窃听、伪装、欺骗和篡夺系统的安全性漏洞等手段,避免非法活动的相关信息的安全性。总之,我们可以保护用户利益和验证用户的隐私。 计算机网络安全有保密性、完整性、真实性、可靠性、可用性、非抵赖性和可控性的特点。 隐私是指网络信息不会被泄露给非授权用户、实体或程序,但是授权的用户除外,例如,电子邮件仅仅是由收件人打开,其他任何人都不允许私自这样做。隐私通过网络信息传输时,需要得到安全保证。积极的解决方案可能会加密管理信息。虽然可以拦截,但它只是没有任何重要意义的乱码。 完整性是指网络信息可以保持不被修改、破坏,并在存储和传输过程中丢失。诚信保证网络的真实性,这意味着如果信息是由第三方或未经授权的人检查,内容仍然是真实的和没有被改变的。因此保持完整性是信息安全的基本要求。 可靠性信息的真实性主要是确认信息所有者和发件人的身份。 可靠性表明该系统能够在规定的时间和条件下完成相关的功能。这是所有的网络信息系统的建立和运作的基本目标。 可用性表明网络信息可被授权实体访问,并根据自己的需求使用。 不可抵赖性要求所有参加者不能否认或推翻成品的操作和在信息传输过程中的承诺。

定向网络爬虫-开题报告

山东科技大学 本科毕业设计(论文)开题报告 题目网络爬虫 定向爬取?脚本之家?文本信息 学院名称信息科学与工程学院 专业班级计算机科学与技术2012级2班 学生姓名包志英 学号 2 指导教师赵中英 填表时间:二0一六年三月二十八日

下,并不能很稳定的工作,内存消耗随着程序的运行而不断增大,直到达到jvm 分配的上限而崩溃。很多时候,你只能做个权衡,每个webclient使用若干次后就把它回收,然后重新启动一个,这非常影响性能。Rhino对于javascript的支持并不好,实际使用中,会发现各种Exception,很多时候会导致无法渲染出想要的结果,这个htmlunit的又一大缺陷。随着版本的更新,能够渐次解决一些问题,但是好的程序员,还是应该自己读源码来尝试解决问题。 Phantomjs相比于htmlunit,对于js的支持更接近真实的浏览器,但是并发性能差,通过java的exec调用系统命令来启动,更加降低了性能。 此外主流的浏览器都提供了相应的抓取支持,selenium可谓是一个集大成者,包含了上述的所有组件,以WebDriver的形式,适配各种爬虫组件,你可以用它操控浏览器自动抓取,当然,并发和性能的问题依然存在。 爬虫开发的主要问题是性能和反封锁。很多时候,采用高并发高频率抓取数据是可行的,前提是目标站点没有采用任何反爬措施(访问频率限制、防火墙、验证码……);更多时候,有价值的信息,一定伴随着严格的反爬措施,一旦ip 被封,什么组件都没戏了。你不得不维护一个代理IP池来解决这个问题,当然,这也带来了代理ip稳定性和速度的问题,这些问题都是无法回避的问题,我们需要针对具体的情况,采用对应的措施,以最大限度的完成爬虫爬取任务。 目前,爬虫的需求呈爆炸式增长的趋势,这是当前各种互联网创新和大数据时代的新常态。火车和八爪鱼等团队看到了这一点,并率先开发了相对完备的爬虫产品,很多用户都在使用,但是更多的用户希望直接把爬虫抓取任务外包出去,因为他们不懂技术,工具的使用需要逾越技术的鸿沟,大部分用户并没有这个逾越鸿沟的打算。我相信像猪八戒这样的技术外包平台会活的越来越好,我也相信各个技术门类会不断聚集,形成相对独立的社区,P2P的社区平台将提供爬虫开发者和爬虫需求者更加通畅的交流渠道。 目前,淘宝等平台上出现很多爬虫服务商,如,这种定制开发的服务,增加了服务商的成本,服务往往是一次性的,满足了一个用户的需求,然而具有相似需求的用户,却很难有机会找到这个服务商,这就是为什么我们需要爬虫信息交流的平台。 我有意建立这样的平台,不管是微博、微信公众号、文章,还是政府门户的

简析网络语言的文献综述

浅析网络语言的文献综述 摘要 语言是一种文化,一个民族要有文化前途,靠的是创新。从这个意义上说,新词语用过了些并不可怕,如果语言僵化,词汇贫乏,那才是真正的可悲。语汇系统如果只有基本词,永远稳稳当当,语言就没有生命力可言,因此,在规定一定的规范的同时,要允许歧疑的存在,但更要积极吸收那些脱离当时的规范而能促进语言的丰富和发展的成分。正确看待网络语言。 关键字 网络语言;因素;发展趋势; 一、关于“网络语言”涵义及现状的研究 1.网络语言的涵义研究 网络语言是一个有着多种理解的概念,既可以指称网络特有的言语表达方式,也可以指网络中使用的自然语言,还可以把网络中使用的所有符号全部包括在内。网络语言起初多指网络语言的研究现状(网络的计算机语言,又指网络上使用的有自己特点的自然语言。于根元,2001)。 较早开展网络语言研究的劲松、麒可(2000)认为,广义的网络语言是与网络时代、e时代出现的与网络和电子技术有关的“另类语言”;狭义的网络语言指自称网民、特称网虫的语言。 周洪波(2001)则认为,网络语言是指人们在网络交流中所使用的语言形式,大体上可分为三类:一是与网络有关的专业术语;二是与网络有关的特别用语;三是网民在聊天室和BBS上的常用词语。 于根元(2003)指出,“网络语言”本身也是一个网络用语。起初多指网络的计算机语言,也指网络上使用的有自己特点的自然语言。现在一般指后者。狭义的网络语言指论坛和聊天室的具有特点的用语。 何洪峰(2003)进一步指出,网络语言是指媒体所使用的语言,其基本词汇及语法结构形式还是全民使用的现代汉语,这是它的主体形式;二是指IT领域的专业用语,或是指与电子计算机联网或网络活动相关的名词术语;其三,狭义上是指网民所创造的一些特殊的信息符号。总的看来,研究者基本认为网络语言有广义、狭义两种含义,广义的网络语言主要指与网络有关的专业术语,狭义的网络语言主要指在聊天室和BBS上常用的词语和符号。 2. 网络语言的研究现状 如:国人大常委会委员原国家教委副主任柳斌表示,网络语言的混乱,是对汉语纯洁性的破坏,语言文字工作者应对此类现象加以引导和批评。国家网络工程委会副秘书史自文表示,老师要引导学生使用网络语言。比如说在写出作文的时候,可以针对彩简单的网络语言还是用含义更有韵味的唐诗更好做一个主题研讨会,和学生一起探讨。这样就可以在理解、尊重学生的基础上进行引导。经过这样的过程,学生对于用何种语言形式多了一个选择,又加深了对传统文化的理解。 如:北京教科院基教所研究员王晓春表示,在网络世界里用网络语言无可厚非。但在正式场合要引导学生不使用网络语言。在教学中老师要引导学生如何正

JAVA基于网络爬虫的搜索引擎设计与实现

本科毕业设计 题目:基于网络爬虫的搜索引擎设计与实现 系别: 专业:计算机科学与技术 班级: 学号: 姓名: 同组人: 指导教师:教师职称:协助指导教师:教师职称:

摘要 本文从搜索引擎的应用出发,探讨了网络蜘蛛在搜索引擎中的作用和地住,提出了网络蜘蛛的功能和设计要求。在对网络蜘蛛系统结构和工作原理所作分析的基础上,研究了页面爬取、解析等策略和算法,并使用Java实现了一个网络蜘蛛的程序,对其运行结果做了分析。 关键字:爬虫、搜索引擎

Abstract The paper,discussing from the application of the search engine,searches the importance and function of Web spider in the search engine.and puts forward its demand of function and design.On the base of analyzing Web Spider’s system strtucture and working elements.this paper also researches the method and strategy of multithreading scheduler,Web page crawling and HTML parsing.And then.a program of web page crawling based on Java is applied and analyzed. Keyword: spider, search engine

网络安全中的中英对照

网络安全中的中英对照 Access Control List(ACL)访问控制列表 access token 访问令牌 account lockout 帐号封锁 account policies 记帐策略 accounts 帐号 adapter 适配器 adaptive speed leveling 自适应速率等级调整 Address Resolution Protocol(ARP) 地址解析协议Administrator account 管理员帐号 ARPANET 阿帕网(internet的前身) algorithm 算法 alias 别名 allocation 分配、定位 alias 小应用程序 allocation layer 应用层 API 应用程序编程接口 anlpasswd 一种与Passwd+相似的代理密码检查器 applications 应用程序 ATM 异步传递模式

audio policy 审记策略 auditing 审记、监察 back-end 后端 borde 边界 borde gateway 边界网关 breakabie 可破密的 breach 攻破、违反 cipher 密码 ciphertext 密文 CAlass A domain A类域 CAlass B domain B类域 CAlass C domain C类域 classless addressing 无类地址分配 cleartext 明文 CSNW Netware客户服务 client 客户,客户机 client/server 客户机/服务器 code 代码 COM port COM口(通信端口) CIX 服务提供者 computer name 计算机名

搜索引擎爬虫外文翻译文献

搜索引擎爬虫外文翻译文献 (文档含中英文对照即英文原文和中文翻译) 译文: 探索搜索引擎爬虫 随着网络难以想象的急剧扩张,从Web中提取知识逐渐成为一种受欢迎的途径。这是由于网络的便利和丰富的信息。通常需要使用基于网络爬行的搜索引擎来找到我们需要的网页。本文描述了搜索引擎的基本工作任务。概述了搜索引擎与网络爬虫之间的联系。 关键词:爬行,集中爬行,网络爬虫 1.导言 在网络上WWW是一种服务,驻留在链接到互联网的电脑上,并允许最终用户访问是用标准的接口软件的计算机中的存储数据。万维网是获取访问网络信息的宇

宙,是人类知识的体现。 搜索引擎是一个计算机程序,它能够从网上搜索并扫描特定的关键字,尤其是商业服务,返回的它们发现的资料清单,抓取搜索引擎数据库的信息主要通过接收想要发表自己作品的作家的清单或者通过“网络爬虫”、“蜘蛛”或“机器人”漫游互联网捕捉他们访问过的页面的相关链接和信息。 网络爬虫是一个能够自动获取万维网的信息程序。网页检索是一个重要的研究课题。爬虫是软件组件,它访问网络中的树结构,按照一定的策略,搜索并收集当地库中检索对象。 本文的其余部分组织如下:第二节中,我们解释了Web爬虫背景细节。在第3节中,我们讨论爬虫的类型,在第4节中我们将介绍网络爬虫的工作原理。在第5节,我们搭建两个网络爬虫的先进技术。在第6节我们讨论如何挑选更有趣的问题。 2.调查网络爬虫 网络爬虫几乎同网络本身一样古老。第一个网络爬虫,马修格雷浏览者,写于1993年春天,大约正好与首次发布的OCSA Mosaic网络同时发布。在最初的两次万维网会议上发表了许多关于网络爬虫的文章。然而,在当时,网络i现在要小到三到四个数量级,所以这些系统没有处理好当今网络中一次爬网固有的缩放问题。 显然,所有常用的搜索引擎使用的爬网程序必须扩展到网络的实质性部分。但是,由于搜索引擎是一项竞争性质的业务,这些抓取的设计并没有公开描述。有两个明显的例外:股沟履带式和网络档案履带式。不幸的是,说明这些文献中的爬虫程序是太简洁以至于能够进行重复。 原谷歌爬虫(在斯坦福大学开发的)组件包括五个功能不同的运行流程。服务器进程读取一个URL出来然后通过履带式转发到多个进程。每个履带进程运行在不同的机器,是单线程的,使用异步I/O采用并行的模式从最多300个网站来抓取数据。爬虫传输下载的页面到一个能进行网页压缩和存储的存储服务器进程。然后这些页面由一个索引进程进行解读,从HTML页面中提取链接并将他们保存到不同的磁盘文件中。一个URL解析器进程读取链接文件,并将相对的网址进行存储,并保存了完整的URL到磁盘文件然后就可以进行读取了。通常情况下,因

网络安全外文翻译--APR欺骗检测:一种主动技术手段

外文翻译原文及译文 学院计算机学院 专业计算机科学与技术班级 学号 姓名 指导教师 负责教师 2011年6月

Detecting ARP Spoofing: An Active Technique Vivek Ramachandran and Sukumar Nandi Cisco Systems, Inc., Bangalore India Indian Institute of Technology, Guwahati, Assam, India Abstract. The Address Resolution Protocol (ARP) due to its statelessness and lack of an authentication mechanism for verifying the identity of the sender has a long history of being prone to spoofing attacks. ARP spoofing is sometimes the starting point for more sophisticated LAN attacks like denial of service, man in the middle and session hijacking. The current methods of detection use a passive approach, monitoring the ARP traffic and looking for inconsistencies in the Ethernet to IP address mapping. The main drawback of the passive approach is the time lag between learning and detecting spoofing. This sometimes leads to the attack being discovered long after it has been orchestrated. In this paper, we present an active technique to detect ARP spoofing. We inject ARP request and TCP SYN packets into the network to probe for inconsistencies. This technique is faster, intelligent, scalable and more reliable in detecting attacks than the passive methods. It can also additionally detect the real mapping of MAC to IP addresses to a fair degree of accuracy in the event of an actual attack. 1. Introduction The ARP protocol is one of the most basic but essential protocols for LAN communication. The ARP protocol is used to resolve the MAC address of a host given its IP address. This is done by sending an ARP request packet (broadcasted) on the network. The concerned host now replies back with its MAC address in an ARP reply packet (unicast). In some situations a host might broadcast its own MAC address in a special Gratuitous ARP packet. All hosts maintain an ARP cache where all address mappings

网络爬虫开题报告doc

网络爬虫开题报告 篇一:毕设开题报告及开题报告分析 开题报告如何写 注意点 1.一、对指导教师下达的课题任务的学习与理解 这部分主要是阐述做本课题的重要意义 2.二、阅读文献资料进行调研的综述 这部分就是对课题相关的研究的综述落脚于本课题解决了那些关键问题 3.三、根据任务书的任务及文件调研结果,初步拟定执行实施的方案(含具体进度计划) 这部分重点写具体实现的技术路线方案的具体实施方法和步骤了,具体进度计划只是附在后面的东西不是重点南京邮电大学通达学院毕业设计(论文)开题报告文献[5] 基于信息数据分析的微博研究综述[J];研究微博信息数据的分析,在这类研究中,大多数以微博消息传播的三大构件---微博消息、用户、用户关系为研究对象。以微博消息传播和微博成员组织为主要研究内容,目的在于发祥微博中用户、消息传博、热点话题、用户关系网络等的规律。基于微博信息数据分析的研究近年来在国内外都取得了很多成果,掌握了微博中的大量特征。该文献从微博消息传播三大构件的角度,对当前基于信息数据分析的微博研究

进行系统梳理,提出微博信息传播三大构件的概念,归纳了此类研究的主要研究内容及方法。 对于大多用户提出的与主题或领域相关的查询需求,传统的通用搜索引擎往往不能提供令人满意的结果网页。为了克服通用搜索引擎的以上不足,提出了面向主题的聚焦爬虫的研究。文献[6]综述了聚焦爬虫技术的研究。其中介绍并分析了聚焦爬虫中的关键技术:抓取目标定义与描述,网页分析算法和网页分析策略,并根据网络拓扑、网页数据内容、用户行为等方面将各种网页分析算法做了分类和比较。聚焦爬虫能够克服通用爬虫的不足之处。 文献[7]首先介绍了网络爬虫工作原理,传统网络爬虫的实现过程,并对网络爬虫中使用的关键技术进行了研究,包括网页搜索策略、URL去重算法、网页分析技术、更新策略等。然后针对微博的特点和Ajax技术的实现方法,指出传统网络爬虫的不足,以及信息抓取的技术难点,深入分析了现有的基于Ajax的网络爬虫的最新技术——通过模拟浏览器行为,触发JavaScript事件(如click, onmouseover等),解析JavaScript脚本,动态更新网页DOM树,抽取网页中的有效信息。最后,详细论述了面向SNS网络爬虫系统的设计方案,整(转载自:https://www.wendangku.net/doc/2f14175218.html, 小草范文网:网络爬虫开题报告)体构架,以及各功能模块的具体实现。面向微博的网络爬虫系统的实现是以新浪微博作为抓取的

相关文档