ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:1MB ,
资源ID:5465441      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5465441.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(JAVA京东商城网络爬虫课程报告.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

JAVA京东商城网络爬虫课程报告.docx

1、JAVA京东商城网络爬虫课程报告重庆邮电大学研究生堂下考试答卷2014-2015学年第1学期考试科目 面向对象程序设计 姓 名 年 级 2014级 专 业 计算机科学与技术 2014年 12月 23日面向对象程序设计课程报告学号: 姓名: 学院: 计算机科学与技术学院 题目 京东商城商品信息爬虫程序选题背景 近年来,电子商务大热,在网上购物的用户越来越多,与此同时越来越多的问题表现出来,如何让用户不用花大量的时间找到最便宜的商品成为改善用户体验的关键点之一。本文就实现了一个基于京东商城的商品信息爬虫程序,将京东商城上所有的商品的种类、名称、价格等信息爬取下来存储在文件系统中,并提供给数据分析部

2、门进行进一步分析,挑选出不同购物网站上相同的商品之间谁的价格最低,从而提供给用户参考。 网络爬虫作为获取互联网数据的一个重要途径,在大数据时代发挥着越来越重要的作用,大到搜索引擎的实现,小到单个网站的数据收集都离不开网络爬虫。当前主流的搜索企业主要采用分布式爬虫架构,通过服务器集群同时运行多个爬虫程序,并将爬到的数据放到DFS上,再使用批处理的Map-reduce、基于内存计算的Spark或者流处理的Storm等分布式计算模型对数据处理,从而对用户提供延时或实时的数据处理服务。本系统使用JAVA语言设计了一个基于广度优先和最佳优先结合算法的京东商城商品信息垂直抓取的多线程爬虫程序,对url队列

3、进行优先级排序,去重,并将之存储在基于内存可持久化的日志型、Key-Value数据库redis中,然后通过url解析网页获取商品的分类、名称、价格信息,并将爬虫运行的产生的数据和日志信息保存在文件中,大大提高了爬虫的效率。系统代码结构通过Maven进行构造,使用Junit通过测试驱动开发的模式进行系统开发。系统说明1. 系统说明 网络爬虫所采用的主流的网页搜索策略主要有3种, 即: 深度优先、 广度优先、最佳优先。深度优先搜索是在网络爬虫开发使用中比较多的方法。深度优先搜索沿着网页文件上的超级链接走到底为止, 形成一条完整的访问链,然后返回到开始网页文件, 再继续选择此文件中的其他超级链接。当

4、不再有其他超级链接可选择时, 说明搜索已经结束。深度优先搜索方式的优点是能遍历完全Web站点深层嵌套的文档集合。缺点是假如Web结构相当深,有可能造成爬虫程序深陷在某一Web站点。广度优先搜索策略的基本思想是:与初始URL在一定距离内的网页重要性较高, 因此可以从起始网页开始, 先搜索完一个Web页面中所有的超级链接, 然后再继续搜索下一层, 直到底层为止。这样做的优点是保证了对浅层Web 页面的优先处理。但是缺点是如果要遍历一个指定的站点的页面集,用宽度优先搜索策略则需要花费较长时间。最佳优先搜索策略按照一定的网页估值算法, 预测候选URL与目标网页的相似度权值, 选取其中权值最高的一个或几

5、个URL进行抓取。在Web页面抓取方面,本系统采用了开源的HtmlCleaner和HtmlParser包对商品页面进行解析获取需求数据。需求分析2.1 功能需求本系统具有以下功能:爬虫能通过一个种子URL地址,爬取一个Web页面下的所有超链接,并将这些URL依次入对列,采用广度优先的方式解析所有页面。在使用广度优先算法的同时可以根据网页URL的特点进行优先级分类,如果一个URL是以爬虫支持多线程并发运行,提高爬行效率。爬虫有URL去重功能,在URL入队时,判断是否重复,如果重复则拒绝入队。爬虫能够规避由于爬取过于频繁而被京东封IP禁止访问的问题。爬虫能够解析Web页面,得到商品分类、名称、价格

6、等信息。能将爬取下来的商品信息保存在文件中。 能将爬取过程中的一些信息,如爬取时间,爬取URL,爬取耗时,爬取是否成功等信息保存在日志文件中。2.2 非功能需求2.2.1 性能需求一方面,爬虫系统需要采集大量商品数据,由于有大量的IO操作,所以对数据采集和数据存取性能要求较高。主要表现在爬虫的爬行效率和对URL队列的存取上,本文使用了多线程的方式在IO操作的同时能够爬取和解析Web页面,从而提高爬行效率,并选取了相对mysql存取速度更快的基于内存的key-value类数据库redis对大量的url进行存取。另一方面,由于京东商城对访问过于频繁的ip地址会封其ip禁止访问,本文利用了线程sle

7、ep的方式解决了这个问题。2.2.2 安全性需求由于爬虫系统的记录的数据会非常大,而且存放时间周期会比较长,所以在对这些数据导入和查询时要保证速度。在数据导入过程中又要保证事务的完整性。对于整个系统,需要完整的权限控制,防止某些人恶意的攻击系统,修改原始记录。同时对于数据库中的数据需要定时备份,防止系统数据丢失。系统设计3.1 系统概要设计3.1.1 系统功能描述该系统的主要功能有:解析一个Web页面中的所有超链接URL并存放至队列;解析商品页面中的商品分类、名称、价格;将商品信息和爬取日志保存在文件系统中。 3.1.2 系统层次模块图图3-1 系统层次模块图3.1.3 总体时序图图3-2 总

8、体时序图3.2 系统详细设计3.2.1 系统功能模块设计表3.1 系统模块设计模块名称输入项输出项功能描述download页面urlPage对象获取页面html代码duplicatable页面url无判断队列中的url是否重复processPage对象无解析页面的所有url和商品信息repository页面urlurl队列存储要处理的所有urlstore商品信息字符串无将商品信息保存在文件中utils无无工具类,用于解析Web页面的超链接url和商品页面的商品信息spider无无统筹程序运行3.2.2 各子功能模块分析(1) download模块:根据url通过http请求下载页面html代码

9、,并初始化一个Page对象,将html赋值给Page对象的rawHtml属性。模块类图:图3-3 download模块类图重要类和接口描述:Downloadable接口表3.2 Downloadable接口接口或类名Downloadable interface功能描述定义了一个用于获取指定url页面的html代码接口主要方法描述download:抽象方法,获取指定url页面的html代码。涉及数据url:需要下载的url地址。备注 HttpClientDownload类表3.3 HttpClientDownload类接口或类名HttpClientDownload class功能描述继承于Dow

10、nloadable接口,实现了download方法。用于获取指定url页面的html代码。主要方法描述1.download:调用excute方法获取指定url页面的html代码,并初始化一个Page对象,将html赋值给Page对象的rawHtml属性。2.excute:利用httpclient类,通过指定的url返回该页面的html代码。涉及数据url:需要下载的url地址。Logger:日志类。备注(2) duplicatable模块:判重模块,用于在url入队时判断是否原来解析过这个url。模块类图:图3-4 duplicatable模块类图重要类和接口描述:Duplicatable接口

11、表3.4 Duplicatable接口接口或类名Downloadable interface功能描述定义了一个判重,用于在url入队时判断是否原来解析过这个url的接口。主要方法描述1.add:抽象方法,将url压入判重存储结构。2.is:抽象方法,判断即将压入的url是否和原先的某一个url重复。涉及数据url:url地址。备注 BloomFilterDuplicatable实现类表3.5 BloomFilterDuplicatable类接口或类名BloomFilterDuplicatable class功能描述实现了Duplicatable的类,使用google的布隆过滤器来对url进行存

12、储和判重,布隆过滤器占用内存小,且查找速度快。主要方法描述1.add:将url压入bloomfilter。2.is:判断即将压入的url是否和bloomfilter中的某一个url重复。涉及数据url:url地址。Bloomfilter:布隆过滤器。备注 HashSetDuplicatable实现类表3.6 HashSetDuplicatable类接口或类名HashSetDuplicatable class功能描述实现了Duplicatable的类,使用hashset作为url的存储结构主要方法描述1.add:将url压入判重hashset2.is:判断即将压入hashset的url是否和原先

13、的某一个url重复涉及数据duplicatable:用于存储解析过的url的集合url:url地址。备注 RedisDuplicatable实现类表3.7 RedisDuplicatable类接口或类名RedisDuplicatable class功能描述实现了Duplicatable的类,使用基于内存的key-value数据库redis作为url的存储。主要方法描述1.add:将url压入redis2.is:判断即将压入redis的url是否和原先的某一个url重复涉及数据redisUtil:对redis进行操作的工具类url:url地址。备注(3) Process模块:解析Web页面模块,

14、解析一个Web页面中所有超链接url以及商品页面中商品的分类、名称、价格信息。模块类图:图3-5 process模块类图重要类和接口描述:Processable接口表3.8 Processable接口接口或类名Processable interface功能描述定义了一个解析Web页面中所有超链接url以及商品页面中商品的信息的接口。主要方法描述process:抽象方法,解析一个页面中所有超链接url以及商品页面中商品的信息涉及数据Page:Page类备注 Jdprocess实现类表3.9 Jdprocess类接口或类名Jdprocess class功能描述Processable的实现类,用于解

15、析一个京东商城页面中所有超链接url以及商品页面中商品的信息。主要方法描述1.parseProduct:解析商品页面该商品的分类、名称、价格。2.process:解析一个页面中所有超链接url,并调用本类的parseProduct方法解析商品的信息涉及数据Page:Page类备注(4) Repository模块:用于将process模块中获取的urls根据url特点判断是否是以模块类图:图3-6 respository模块类图重要类和接口描述:Repository接口表3.10 Repository接口接口或类名Repository interface功能描述定义了用于分析url,并根据分析结

16、果将url压入高优先级链表或低优先级队列的接口主要方法描述1.poll:抽象方法,调用add方法和addHigh将url压入队列2.add:抽象方法,将url压入低优先级队列3.addHigh:抽象方法,将url压入高优先级队列涉及数据nextUrl:下一个要压入的url备注 RedisRepository实现类表3.11 RedisRepository类接口或类名RedisRepository class功能描述实现了接口Repository,通过key-value数据库redis保存需要解析的url主要方法描述1.poll:调用add方法和addHigh将url存入键值为highPrior

17、ity或lowPriority的map中2.add:将url存入lowPriority3.addHigh:将url存入highPriorit涉及数据highKey:高优先级key键lowKey:低优先级键nextUrl:下一个要压入的url备注 MemoryRepository实现类表3.12 MemoryRepository类接口或类名MemoryRepository class功能描述实现了接口Repository,通过内存保存需要解析的url主要方法描述1.poll:调用add方法和addHigh将url存入highPriority或lowPriority的内存链表中中2.add:抽象方

18、法,将url存入lowPriority链表3.addHigh:抽象方法,将url存入highPriorit链表涉及数据highPriority:高优先级队列lowPriority:低优先级队列nextUrl:下一个要压入的url备注(5) Store模块:将解析Web页面得到的商品信息持久化。模块类图:图3-7 store模块类图重要类和接口描述:Storable接口表3.13 Storable接口接口或类名Storable interface功能描述定义了一个用于将解析页面得到的商品信息进行持久化的接口主要方法描述store:抽象方法,存储商品信息涉及数据Page:Page类备注 FileS

19、tore实现类表3.14 FileStore类接口或类名FileStore class功能描述Storable的实现类,将商品信息持久化到文件中主要方法描述1.store:存储商品信息到指定文件中2.FileStore: FileStore的构造方法,根据basePath参数调用checkExist方法判断该文件是否存在,创建文件3.CheckExsit:判断一个文件路径是否存在4.fileName:用当前日期为文件命名,在store方法中被调用涉及数据Page:Page类basePath:文件路径参数,默认为当前路径备注(6) utils模块:构造了一些用于解析html页面、构造json、操

20、作redis、通过js获取商品价格、线程配置的工具类。重要类和接口描述:HtmlXParser类表3.15 HtmlXParser类接口或类名HtmlXParser class功能描述解析Web页面主要方法描述select:解析页面中含有指定标签的值,在process模块中被调用getAttributeByName:解析页面中含有指定属性的标签的值,在process模块中被调用涉及数据htmlCleaner:引入第三方jar包,定义了一个htmlCleaner对象tagNodes:用于保存标签数组rawHtml:解析页面的html代码备注 JSONUtils类表3.15 JSONUtils类接

21、口或类名JSONUtils class功能描述用于json类型和string类型进行互转的类。由于商品价格是通过js动态生成的,在商品页面中解析不到,必须再另外访问商品的价格url,该页面是json格式的,所有使用此类将json类型转换成String类型主要方法描述1.parseFromUrl:获取指定url的json代码,并返回String类型2.parseJSONArrayIndex0:获取json类型字符串中键为key的值3.parseMap:将map的键值对封装成json类的字符串涉及数据Map values:存储商品信息的map类键值对备注 RedisUtil类表3.16 Redis

22、Util类接口或类名RedisUtil class功能描述用于对redis进行存储操作的类主要方法描述1.getResult2.Rpush3.Lpop4.Llen5.Sismember6.sadd涉及数据Key,value备注(7) 其他重要类:Spider类表3.17 Spider类接口或类名Spider class功能描述该系统最重要的类,调用其他类方法完成商品信息的爬取和存储主要方法描述1.download:调用downloadable接口的download方法进行页面html代码下载2.process:调用processable的process方法解析html4.store:调用sto

23、rable的store方法存储解析后的商品信息5.initComponent:初始化运行环境6.检查运行时环境是否齐备7.start:启动线程池,程序运行入口涉及数据logger、config、downloadable、processable、storable、repository、duplicatable、threadPool备注 FixedThreadPool类表3.18 FixedThreadPool类接口或类名FixThreadPool class功能描述用于实现多线程的类主要方法描述1.run:定义每个线程的入口涉及数据newFixedThreadPoolrunanble备注 Pag

24、e类表3.19 Page类接口或类名Page class功能描述Web页面类,成员变量包括该页面的html、url、所有超链接url以及该页面上所包含的商品信息主要方法描述ValueToJSON:调用了JSONUtils的parseMap方法将商品信息转换为Json类的字符串涉及数据url、rawHtml、values、targetUrls系统实现4.1 spider类实现public class Spider final Logger logger = LoggerFactory.getLogger(getClass(); private Config config = new Config

25、(); private Downloadable downloadable = new HttpClientDownload(); private Processable processable; private Storable storable = new ConsoleStore(); private Repository repository = new MemoryRepository(); private Duplicatable duplicatable = new HashSetDuplicatable(); private ThreadPool threadPool; /*

26、* 启动爬虫 */ public void start() check(); initComponent(); while(!Thread.currentThread().isInterrupted() /取出目标url final String url = repository.poll(); if(url=null) /TODO 如果为空,则等待 else threadPool.run( new Runnable() public void run() /下载 final Page page = Spider.this.download(url); /解析 Spider.this.proc

27、ess(page); /把目标url放到队列中 for (String nextUrl : page.getTargetUrls() if (duplicatable.is(nextUrl) continue; duplicatable.add(nextUrl); /if (nextUrl.startsWith( if (nextUrl.startsWith( repository.addHigh(nextUrl); else repository.add(nextUrl); /导出 Spider.this.store(page); ); SleepUtil.sleep(config.getE

28、xecuteSleep(); private void initComponent() threadPool = new FixedThreadPool(this.getConfig().getThreadPoolSize(); logger.info(=); logger.info(downloadable是, getDownloadable().getClass().getName(); logger.info(processable是, getProcessable().getClass().getName(); logger.info(storable是, getProcessable().getClass().getName(); lo

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1