基于网络爬虫的搜索引擎设计与实现—毕业设计论文内容摘要:
kground=images/ width=162 height=71 /td td img src=images/ width=1 height=71 alt=/td /tr tr td colspan=4 rowspan=2 /td td img src=images/ width=1 height=31 alt=/td /tr tr td img src=images/ width=1 height=495 alt=/td /tr /table ! End ImageReady Slices /form /body /html servlet 的实现 用 Servlet 来响应用户的请求,实现搜索参数的传入。 具体代码设计为: package crawer。 import .*。 import .*。 import .*。 import .*。 import .*。 public class MyServlet extends HttpServlet { private static final String CONTENT_TYPE = text/html。 charset=GBK。 public Timer timer。 myspider crawler。 ArrayList String myresult。 //搜索到的结果 //Initialize global variables public void init() throws ServletException { } //Process the HTTP Get request public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String var0 = (param0)。 if (var0 == null) { var0 =。 } (CONTENT_TYPE)。 PrintWriter out = ()。 byte[] bytes=(ISO88591)。 String search=new String(bytes,GB2312)。 crawler = new myspider( //Thread search=new Thread(crawler)。 // ()。 //此处开始爬行 ()。 //启动定时器,在时间内检查是否有结果,并显示 myresult=new ArrayList String()。 //搜索到的结果 myresult=()。 (html)。 (headtitle爬虫演示 /title/head)。 (p注意默认起始站点为: 10/p)。 (p搜索 +search+结果 :/p)。 (body bgcolor=\c0c0c0\)。 String te。 for(int i=0。 i()。 i++){ te=(i+1)。 (p+te+、 +(i)+/p)。 //输出结果 } if(()==0){ (p对不起 ,没有找到结果 /p)。 } (/body)。 (/html)。 ()。 } //Clean up resources public void destroy() { } } 网页的解析实现 网页的分析 网页文档作为 一 种半结构化文本是一种界于自由文本和结构化文本之间的数据,它通常没有严格的格式。 对于这类文本一般是通过分析文本中特有的标志性字符进行爬行处理,具体而言就是分析 HTML 语言中的各种标记之间的 关系。 网页信息的载体是网页文本,用超文本标记语言编写。 由 HTML 标准定义了一组元素类型,不同类型的元素分别描述文本、图像和超文本链接等。 一个元素的描述一般由开始标记 (Start Tag)、内容 (Content)、结束标记 (End Tag)所组成。 元素名称出现在开始标记中,在 HTML 语言中标记为 元素名称 ,对应的结束标记为 /元素名称 ,内容出现在开始标记和结束标记之间。 通过构造网页标记树的方法可反映网页的结构特点,下 图是一个简单的动态网页标记树 h t m lh e a d b o d yt a b l et i t l el i n k 1 l i n k 2 网页的处理队列 页面处理队列中保存的是页面的 URL,它实际上是由等待队列、处理队列、错误队列、完成队列组成。 正是通过它们,某个具体的移动 Spider 得以完成对该 Spider 所对应 web 的全部搜索任务。 页面队列中保存的页面的 URL 都是属于内链接。 (1)等待队列 (WaitURL)。 在这个队列中, URL 等待被移动 Spider 程序处理。 新发现的 URL 被加入到这个队列中。 (2)处理队列 (Proces— sUI )。 当移动 Spider 程序开始处理 URL 时,它们被传送到这一队列,但同一个 URL 不能被多次 处理,因为这样是浪费资源。 当一个 URL 被处理过后,它将被移送到错误队列或者是完成队列。 (3)错误队列 (ErrorURL)。 如果在处理某一页面时发生错误,它的 URL 将被加入到错误队列,该URL 到达这一队列后将不再移人其他队列。 一旦网页移入错误队列,移动 Spider 程序将不会再对它作进一步处理。 (4)完成队列 (LaunchURL)。 如果在处理网页时没有发生错误,处理完毕时,该 URL 将被加入到完成队列,该 URL 到达这一队列后将不再移人其他队列。 同一时间一个 URL 只能在一个队列中,这也叫做 URL 的状态,这是因 为人们常常使用状态图描述计算机程序,程序按照状态图从一个状态变换到下一个状态实际上,当发现 URL(内链接 )时,移动 Spider 会检查该 URL 是否已经存在于完成队列或错误队列中,如果已经存在于上述两种队列的任何一个队列中,那么移动 Spider 将不会对此 URL 进行任何处理。 由此,可避免某个页面被重复处理,防止陷入死循环。 搜索字符串的匹配 对于要搜索的字符串,必须在抓取的网页中进行匹配检查,如果存在于该网页中,则把地址添加到输出队列中。 网页分析类的实现 package crawer。 //html 文件解析类 import。 import。 import。 import。 import。 import。 import。 import。 import。 import。 import。 import。 import。 //类实体 public class HtmlParser { ArrayList String fafa=new ArrayList String()。 URL base = null。 // 基本 URL public HtmlParser (String PageContent) { int state = 0。 StringBuffer sb = new StringBuffer()。 int i = ()。 //(循环读取解析 )。 for (int j = 0。 j i。 j++) { //循环读取解析 / switch (state) { case 0: if ((j) == 39。 39。 ) state = 39。 39。 break。 case 39。 39。 : if ((j) == 39。 39。 ) { state = 0。 analyze(())。 (0)。 } else { ((char) (j))。 } } } } public void analyze(String param) { StringTokenizer st = new StringTokenizer(param)。 if (() 2) return。 String first_word = ().toLowerCase()。 if ((a)) { analyzeAnchor(())。 } else if ((frame)) { analyzeFrame(())。 } else if ((base)) { extractBase(())。 } } /**分析 a分析 . */ void analyzeAnchor(String anchor) { String href = extract(anchor, href)。 if (href == null) return。 addURL( href)。 } /**分析 frame 分析 . */ void analyzeFrame(String frame) { String src = extract(frame, src)。 if (src == null) return。 addURL(src)。 } /** 由 base标记中分离 url. */ void extractBase(String b) { String b2 = extract(b, href)。 if (b2 != null) { try { base = new URL( b2)。 } catch (MalformedURLException e) { ()。 } } } String extract(String line, String key) { try { key = ()。 String lower_case = ()。 int i = (key)。 if (i 0) return null。 i += ()。 if ((i) != 39。 =39。 ) return null。 i++。 int i2。 if ((i) == 39。 39。 ) { i++。 i2 = (39。 39。 , i)。 if (i2 0) { return (i)。 } else { return (i, i2)。 } } else { int targ = ()。 for (i2 = i。 i targ。 i++) { if (((i))) break。 } return (i, i2)。基于网络爬虫的搜索引擎设计与实现—毕业设计论文
相关推荐
..................................................................10 编码方法 垒遥 .......................................................................................................10 适应度函数 垒遥 .......
esearch object with DZ47LE. Analyze until rights of the person get an electric shock or circuit leak electric current exceed the regulation value .Utilize and leak electricity the circuit breaker and
塑焊机温度控制系统的硬件设计12随着集成电路的发展,越来越多的芯片随着体积的不断减小,而其功能反而越来越强大,并且价格也越来越便宜。 由于塑料焊接机的工作环境比较恶劣,而温控系统又很容易受到干扰,因此其稳定性就显得非常重要,为了增加设计电路的稳定性和简洁性,我们最终选择了具有放大和补偿双重功能的智能芯片,这样既减小了电路板的面积,简化了电路,其数字化的设计又使得系统的稳定性得到加强。
25℃ 时,其输出电流为。 精度:经过激光平衡调整, AD590 的校准精度可达 。 由于 AD590 是一种电流型的温度传感器,因此具有较 强的抗干扰能力,适用于计算机进行远距离温度测量和控制。 温度检测电路由温度传感器 AD590 等组成,直接输出电流 1μA/K,输出电压为100mV/℃ ,经运算放大器 LM358 进行 I/V 转化后,再经 A/D 转换通道送到微处理器中,R R R2
OE 端。 ADC0809 的 EOC 经反相后接到 8051 的 ( INT1)。 键盘 键盘在单片机系统中是 一 个重要部件。 为了输入数据,查询和控制系统的工作状态,都要用到键盘,键盘是人工干预计算机的主要手段。 多 路 数 据 采 集 与 传 输 系 统 毕业设计 在单片机控制系统中广泛使用的是机械键盘。 按键的动作不是立刻就完成的,抖动是表现在输入电压信号上。
41 黑龙江工程学院本科生毕业设计 名义应力的计算 45 本章小结 47 第 6 章 曲 柄连杆机构的创建 48 对 Pro/E 软件基本功能的介绍 48 活塞的创建 48 活塞的特点分析 48 活塞的建模思路 48 活塞的建模步骤 49 连杆的创建 50 连杆的特点分析 50 连杆的建模思路 50 连杆体的建模步骤 51 连杆盖的建模 52 曲轴的创建 52 曲轴的特点分析 52