课程设计网络爬虫.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
滨江学院 《计算机网络》课程设计 题 目 网络爬虫 院 系 计算机系 专 业 网络工程 学生姓名 吴培培 学 号 20112346060 二O年月日.3.1 URL抽取 通过观察研究HTML代码,我们可以知道。HTML代码中,页面之间的跳转,关联是通过href标签来实现的。我们需要获取HTML代码中的URLs,就可以通过寻找href标签来达到目的。 通过观察得知,一般href标签是以href=这样的形式出现的。但是不同的网站href=后面的内容有所不同。比如href=”url”这样情况,我们就可以通过截取双引号之间的内容来获取URL;如果是href=’url’这种情况,我们就需要截取单引号之间的内容来获取URL;或者有些是href=url,我们需要以等号为开始标记,而这种情况通常结尾是空格或者符号。 通过这种方法,我们获取网页中大部分的URLs。但是有些URLs是通过提交表单,或者通过javascript来跳转的。这些情况就需要更细致的考虑,才能获取。 4.3.2 URL解析 截取出来的字符串,可能为相对地址或者绝对地址。所以需要判断URL为绝对地址,还是相对地址。相对地址需要先转化为绝对地址,再进行过滤。因为解析出来的URL地址可能是一些文件的地址,或者为javascript文件或者css文件。这些格式的URL是无法获取HTML代码的,也就不可能进行URL解析。所以我们需要过滤掉这些URLs。然后再进行URL消重处理,最后加入到URL等待队列。 为了把爬行限制在同一站点内需要截断指向站外的链接,保证SPIDER总在站内执行,即准确地根据超链URL判断超链是否指向站外.由RFC对URL的定义可知,URL的格式为[protocol://host:port/path?query],一般情况下,同一网站内所有页面对应URL的host是相同的,所以可以使用host匹配作为判断超链是否指向站外的标准. 进一步研究发现,很多大型网站中一个分类目录对应一个主机, 所以前面的判断标准必须改进.研究host的组成可知, host的格式一般为[站内分类.站点标志串.站点类型各异的串].站点类型串只有[ com |edu|gov|net| 国家域名]几种类型,所以我们取站点类型各异串前面的串,即站点标志串作匹配,超链URL的host中是否包含此串,为超链是否站内的判断标准. 4.3.3 URL保存 因为等待URLs的数目非常多,如果全部采用List来存储非常的占用内存空间。所以将等待URLs存入数据库中,并设计2个缓存区,用于向队列中加入和取得URLs。URL等待队列设计成三段式:第一段为一个List,用来加入新得到的URL。当这个List中的数目过多时,则将List中的内容加入到数据库,并清空该List,以便加入新的URLs;第二段为数据库,当第一段数据过多时,将第一段内的数据存入数据库;第三段也为一个List,从这里面分配任务URL,当该List内URL不足时,将数据库里的数据再转存入。 系统实现 5.1 实现工具 操作系统是winXP;JAVA程序的编写工具是eclipse;数据库是MYSQL。 5.2 爬虫工作 在这个循环里,首先会向URL等待队列里请求一个URL。因为URL队列会出现为空或者被其他线程占用的情况。如果没有得到URL就继续向URL等待队列申请。当得到任务URL以后,会通过这个URL得到对应的HTML代码。具体方法是调用getHtml(String sourse_url)这个方法: HttpURLConnection connection = null; InputStreamReader in = null; BufferedReader br = null; URL url = null; url = new URL(sourse_url); connection = (HttpURLConnection) url.openConnection(); connection.connect(); // 打开的连接读取的输入流。 in = new InputStreamReader(url.openStream()); br = new BufferedReader(in); String c; while ((c = br.readLine()) != null) { html.append(c); } return html.toSt

文档评论(0)

xingyuxiaxiang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档